Una persona tiene muchos amigos en Facebook. Dada una persona y un amigo, ¿cómo encuentro la mejor manera de determinar el camino entre ellos?

Hacer un BFS servirá a su propósito.

A continuación se muestra cómo hacer el cálculo en un solo nodo de un clúster (si todos los datos están presentes en un nodo).
Suponga que la persona A y la persona B están separadas por la distancia d. Luego, simplemente haciendo BFS desde estos dos nodos en paralelo, obtendremos los amigos comunes después de hacer el BFS hasta el nivel d / 2.
Suponiendo que tenemos una ramificación constante de cada nodo en promedio es ‘x’. luego, en el nivel d / 2 hemos investigado [matemáticas] x ^ {d / 2} [/ matemáticas] nodos de cada persona.
Entonces, en total [math] 2 * (x ^ {d / 2}) [/ math], los nodos han sido atravesados.
Ahora, una vez que tengamos la lista de amigos de estos dos nodos, podemos ejecutar las intersecciones entre ellos, para esto primero encontraremos a todos los amigos y amigos de A (es decir, obtenidos al hacer BFS y el algoritmo paralelo realizará comprobaciones en nodos comunes, es decir intersección entre estos dos conjuntos de amigos).

La intersección de conjunto tomará alrededor de O (m + n), para conjuntos de longitud m & n.

Sin embargo, el ingenuo BFS tomará tomar O ([matemáticas] x ^ d [/ matemáticas]).

Si suponemos que [math] x ^ {d} [/ math] = r, entonces el BFS retorcido tomará, [math] \ sqrt [2] {r} [/ math], que es mucho más rápido que hacer un BFS ingenuo.

El cálculo distribuido realmente requerirá aquí, porque todos los datos de nodo (datos de amigos de amigos, es decir, amigos de campo a través) residirán en un sistema diferente.
Para obtener un conocimiento más profundo al respecto, puede consultar el siguiente documento:
Página en supercomputing.org

aplique BFS si ambos no son amigos entre sí.
La longitud del camino sería 1, si son amigos entre sí (una persona tiene muchos amigos en Facebook, una persona y un amigo …), si ya son amigos, la distancia es 1, ¿no es así?

Como dice mi compañero “Anónimo”, BFS es quizás la forma más fácil de encontrar el camino más corto entre dos personas en el gráfico de Facebook.

Para encontrar una mejora significativa en el número de nodos escaneados por el algoritmo, probablemente podría desencadenar un BFS en paralelo entre ambos nodos (persona y su amigo) en el gráfico un nivel a la vez y detener el algoritmo cuando vea un primer nodo común en los 2 árboles BFS generados.

Suponiendo que estos árboles BFS tienen un factor de ramificación constante de ‘x’ y ‘d’ es la distancia más corta entre las dos personas, nuestro BFS modificado solo mira los nodos ‘2 * x ^ (d / 2)’ en lugar de ‘x ^ d ‘nodos que son procesados ​​por un ingenuo BFS.

PD: Realmente no he pensado mucho en los 6 grados de separación entre los usuarios de FB. Pero esto reduciría significativamente la longitud del camino más corto y probablemente podamos encontrar mejores heurísticas suponiendo que la teoría se mantenga. Pero les dejo que reflexionen sobre ustedes 🙂

More Interesting

¿Cuál sería el formato de una entrevista telefónica técnica de primera ronda para un puesto de ingeniero de software (Nueva York) en Bloomberg?

¿Cuáles son las preguntas frecuentes de Java?

¿La velocidad de escritura de un candidato indica algo sobre su habilidad como desarrollador?

Cómo escribir un código más limpio durante las entrevistas en el sitio

¿Tenemos que prepararnos para una entrevista tecnológica? Me preparo para las entrevistas, pero los entrevistadores hacen otras preguntas.

¿Cuál es el algoritmo más eficiente y fácil (en términos de implementación) para la coincidencia de patrones en una cadena?

Cómo imprimir todas las subsecuencias comunes más largas de dos cadenas

¿Por qué hay una gran diferencia entre las preguntas de algoritmos en una entrevista técnica y el desarrollo de software real?

Sigo fallando las entrevistas de programación para pasantías de ingeniería de software. ¿Qué tengo que hacer?

Además de la búsqueda binaria, ¿hay otros ejemplos de código que tengan un tiempo de ejecución de O (log n)?

¿Cuáles son los requisitos previos para programar entrevistas en empresas tecnológicas y recomendar libros?

¿Qué preparación especial hay que hacer para las entrevistas de empresas como Google, Amazon y Facebook?

¿Qué pregunta puede ayudarme a determinar si el entrevistado está motivado y trabaja duro?

¿Cuáles son las mejores preguntas que hacen los entrevistadores en la entrevista relacionada con C, si va a realizar una entrevista de la compañía 5-6 CTC?

¿Cuáles son algunas preguntas difíciles para las entrevistas de JavaScript?