¿Qué tipo de problemas en los gráficos es más rápido (en términos de O grande) para resolver usando matrices de incidencia de estructuras de datos en lugar de matrices de adyacencia más amplias?Matriz de incidencia en lugar de matriz de adyacencia
Respuesta
Las complejidades espaciales de las estructuras son:
Adyacencia: O (V^2) Incidencia: O (VE)
Con la consecuencia de que una estructura de incidencia ahorra espacio si hay muchos más vértices que los bordes.
Usted puede mirar en el tiempo la complejidad de algunas operaciones típicas del gráfico:
Encontrar todos los vértices adyacentes a un vértice: Adj: O (V) Inc: O (VE)
Comprobar si dos vértices son adyacentes: Adj: O (1) Inc: O (E)
contar el valencia de un vértice: Adj: O (V) Inc: O (E)
Y así sucesivamente. Para cualquier algoritmo dado, puede usar bloques de construcción como los anteriores para calcular qué representación le brinda una mayor complejidad general en el tiempo. Como nota final, usar una matriz de cualquier tipo es extremadamente ineficiente en cuanto a espacio para todos los gráficos, excepto para los más densos, y recomiendo no usar ninguno a menos que haya descartado conscientemente alternativas como listas de adyacencia.
Tengo gráficos muy densos, con casi todas las conexiones. – psihodelia
¿No hay formas de almacenar eficientemente la matriz dispersa? – CMCDragonkai
Personalmente, nunca he encontrado una aplicación real de la representación de matriz de incidencia en un concurso de programación o problema de investigación. Creo que puede ser útil para probar algunos teoremas o para algunos problemas muy especiales. Un libro da un ejemplo de "contar el número de árboles de expansión" como un problema en el que esta representación es útil.
Otro problema con esta representación es que no tiene sentido almacenarla, porque es realmente fácil calcularla dinámicamente (para responder a lo que contiene la celda dada) de la lista de bordes.
Puede parecer más útil en hiper-gráficos, pero solo si es denso.
Así que mi opinión es - es útil solo para trabajos teóricos.
- 1. representación de gráficos: lista de adyacencia frente a la matriz
- 2. Optimice Floyd-Warshall para la matriz de adyacencia simétrica
- 3. Zend_Db_Table - asociativa matriz en lugar de objetos
- 4. Cómo implementar una matriz de adyacencia en Java produciendo ciclos de hamilton
- 5. AutoMapper establece una propiedad de matriz a una matriz de longitud cero en lugar de nulo
- 6. Lista de adyacencia y gráfico
- 7. ¿Mejor práctica de la matriz Javascript para usar [] en lugar de nueva matriz?
- 8. Si topológicamente clasifico un DAG, ¿puedo soltar la mitad de la matriz de adyacencia?
- 9. Comparando objeto gráfico representación a la lista de adyacencia y la matriz de representaciones
- 10. fields_for envío de matriz en lugar de hash (carriles 3)
- 11. ¿Qué colección utilizar en lugar de matriz 2D en Java?
- 12. Incidencia de incrustación de videoJS y swfobject
- 13. has_many devuelve una matriz en lugar de la clase ActiveRecord
- 14. matriz híbrida y hash de Lua; ¿existe en otro lugar?
- 15. ¿Cuándo usarías una matriz en lugar de un vector/cadena?
- 16. Divide matriz en una matriz de matriz subsecuencia
- 17. Convertir matriz TCHAR en matriz de caracteres
- 18. matriz de PHP como clave de matriz
- 19. Conversión de matriz de cadenas en matriz de flotantes
- 20. matriz de clasificación de ruby de una matriz
- 21. matriz de enteros o matriz de estructuras: ¿cuál es mejor?
- 22. estructura de lista de adyacencia en HBase
- 23. Convertir matriz plana de objetos en matriz anidada de objetos
- 24. matriz de impresión 2D en formato de matriz
- 25. conversión de matriz PHP de matrices en una sola matriz
- 26. Pase la matriz de PHP en la matriz de Javascript
- 27. matriz JSON convertir a matriz de Javascript
- 28. matriz de matriz con ceros- abrirCV
- 29. Convertir matriz int a matriz de caracteres
- 30. Convertir matriz asociativa de matriz numérica
No estoy seguro de que sea fácil encontrar un límite superior computacional basado en la representación subyacente. La mayor parte de la complejidad algorítmica será en términos del _número_ de bordes o vértices, no de la representación subyacente. Cualquier límite inferior en la complejidad se aplicará ya sea que se implemente en lápiz y papel o en una computadora. ¿Piensas que si hay clases específicas de problemas que tienes en mente, entonces tal vez menciones esas y podamos tratar de resolverlo? – Gian
La matriz de incidencia es MxN y la matriz de adyacencia es NxN si N es muy grande y tu gráfica es muy dispersa, tendrás MxN