Questa è una domanda intervista che ho recentemente trovato su internet:modo efficiente per trovare gradi di separazione tra i due nodi di un grafo
Come ti trovare il grado di separazione tra due persone su Facebook? Discutere diverse idee, algoritmi e compromessi. (Definizione del grado di saparation: http://en.wikipedia.org/wiki/Six_degrees_of_separation)
Ecco cosa penso a questo proposito:
Gli algoritmi candidati che mi viene in mente sono: ampiezza di ricerca (BFS), ricerca in profondità (DFS) , ricerca con profondità limitata (DLS), ricerca approfondita iterativa (IDS).
Innanzitutto, DFS deve essere preso in considerazione. È molto probabile che anche quando le due persone sono connesse (vale a dire il grado di separazione = 1), l'algoritmo può continuare a cercare lungo un percorso sbagliato per un lungo periodo di tempo.
BFS è garantito per trovare il grado minimo di separazione (poiché il grafico non è ponderato). Supponiamo che il fattore di ramificazione massimo sia b e che il grado effettivo di separazione tra due persone bersaglio sia d, sia la complessità temporale che la complessità spaziale sarebbero O (b^d).
Poiché il massimo grado possibile di separazione è sconosciuto (sebbene non dovrebbe essere troppo superiore a 6), potrebbe non essere una buona idea utilizzare DLS. Tuttavia, IDS sembra essere un'idea migliore di BFS - la complessità del tempo è anche O (b^d) (anche se il tempo effettivo costa un po 'più alto di BFS a causa della visita ripetuta dei nodi intermedi), mentre la sua complessità spaziale è O (bd), che è molto meglio di O (b^d).
Dopo tutto, sceglierei IDS. È una risposta accettabile in un'intervista? Ho commesso qualche errore nell'inferenza di cui sopra? O ci sono soluzioni migliori che mi sono perso?
Grazie in anticipo.
Non ho mai pensato prima alla ricerca bidirezionale. Grazie per averlo detto. – quantumrose