Hay muchas respuestas posibles a esto, y solo estoy dando mis dos centavos. Abordaré esto únicamente desde una perspectiva de programación y no tendré en cuenta las soluciones más sofisticadas que se pueden proporcionar utilizando las tecnologías existentes.
Así que vamos directo a ello. Deje que el usuario en una red social sea una clase, y una publicación sea otra clase. Cada vez que el usuario desea publicar algo, creamos una instancia de la clase Post. Dejaré los detalles más finos de esta abstracción.
¿Qué queremos decir cuando decimos que dos instancias de la clase Usuario son amigos? Están conectados en un gráfico. Llamemos a esto un gráfico de amistad o FG. Técnicamente, si un usuario tiene n amigos, entonces hay n bordes unidos a ese nodo de usuario en el FG.
- ¿Cuáles son los pros y los contras de imprimir una matriz en Java?
- Cómo contar el número de enteros palindrómicos dentro de un rango [A, B] donde A y B pueden ser de hasta 10 ^ 17
- ¿Por qué mi implementación de Quicksort no funciona?
- Cómo demostrar que puedes ir de C a L con secuencias de vuelos
- ¿Cuál es el algoritmo más poderoso en el mundo de las aplicaciones?
Ahora que tenemos nuestra arquitectura básica en su lugar, buscar y mostrar publicaciones pertenecientes a tus amigos es trivial. La aplicación envía tu nueva publicación a todos tus amigos cada vez que creas una.
Un problema más desafiante sería mostrar publicaciones de su red. Supongamos que A y B son amigos, mientras que C y B son amigos, pero A y C no lo son. Ahora, si construimos un gráfico, A y C pertenecen a los mismos componentes conectados pero no son adyacentes. Sin embargo, A podría estar interesado en las publicaciones de C. Entonces, el desafío es predecir cuándo podría ser.
Digamos que C crea una instancia de una publicación y se envía a B. B ofrece algún tipo de retroalimentación positiva para indicar que la publicación fue buena (me gusta, votos a favor, estrellas, corazones, retweets). Si A y C tienen k amigos mutuos (vecinos intermedios) y a casi todos les gusta esa publicación, se reenvía a A. Implementar esto es un poco difícil porque tienes que eliminar publicaciones redundantes y cosas por el estilo. Pronto podremos propagar una publicación realmente agradable a través del componente conectado de esta manera.
Así es como construiría mi estructura de datos subyacente.