Estoy intentando escribir un código que atraviese un gráfico no ponderado no ponderado. Esencialmente, al método se le pasará un nodo (que conoce a todos sus vecinos). Luego, el método debe construir un modelo del gráfico de la manera más eficiente * yendo de un nodo a otro y recopilando información que los nodos se vinculan entre sí. Al final, el método tendrá una lista completa de todos los nodos y todos los vértices que los conectan.Atravesar un gráfico no ponderado no dirigido con un giro: visitas mínimas a cada nodo
* El meollo del problema radica en la palabra de manera eficiente y lo que quiero decir con eso. Permítanme dirigir su atención a este pequeño gráfico:
Digamos que me pongo en el nodo G. bien puedo visitar C, B, C, D, H, J o E. quiero minimizar el cantidad de veces que visito un nodo y para visitar un nodo, debo pasar por todos los nodos en el camino hacia ese nodo.
Ejemplo: digamos que decido visitar el nodo C. El próximo nodo a visitar podría ser A, B, F, D, H, J o E. Sin embargo, para visitar cualquier nodo, excepto A, tendría pasar de nuevo por G que se considera ineficiente. Y para visitar A, tendría que visitar G y C nuevamente y luego pasar por C y luego G para volver al resto del gráfico. Entonces decido visitar a A. Esto significa que tengo que pasar por C nuevamente para llegar a G. Por lo tanto, desde el punto de vista lógico, tiene sentido visitar la rama C al final.
Sin embargo, el programa, cuando comienza en el nodo G, no sabe que la rama C conduce a un callejón sin salida. Mientras escribo esto, creo que podría ser imposible, pero lo pregunto de todos modos: ¿hay alguna manera de recorrer este gráfico de la manera más eficiente posible (como lo he definido previamente) usando solo la información dada (es decir, que el programa solo conoce acerca de los nodos de su visitados y de los bordes que emana de esos nodos? ¿O debo ir con el algoritmo una variación de Dijkstra con el fin de asegurar que visita cada nodo?
todo esto será escrito en Java si lo que importa.
¿Sería un DFS más eficiente teniendo en cuenta los numerosos ciclos? Creo que puedo escribir ambos y descubrirlo experimentalmente usando una cantidad de conjuntos de datos. No puedo creer que haya olvidado esto, pero probablemente sea la mejor respuesta. ¡Gracias! – Smipims
@Smipims, Breadth First Search o Djikstra no será mejor o peor en cuanto al ciclo que la recursión. Para visitar todos los nodos, debe visitar todos los nodos.Puede haber una ventaja al usar una solución no recursiva para evitar una pila de llamadas demasiado profunda (para gráficos grandes). –
Supongo que todo depende del recurso que tenga y de que valore más: tiempo y/o espacio de memoria: tenga en cuenta que debe hacer un seguimiento de los nodos expandidos pero que deben visitarse aún en el BFS. Si tu gráfico puede permanecer todo en la memoria, supongo que no importa (pero imagina un gráfico implícito que exploras solo nodo por nodo) – rano