Estoy buscando el código de Python para la correspondencia entre el peso máximo y el costo mínimo en un gráfico bipartito. He estado usando el código de coincidencia de peso máximo de casos generales en NetworkX, pero estoy resultando demasiado lento para mis necesidades. Esto probablemente se deba al hecho de que el algoritmo general es más lento y al hecho de que la solución NetworkX se implementa por completo en Python. Idealmente, me gustaría encontrar un código Python para el problema de correspondencia bipartita que envuelve algún código C/C++, pero en este momento, cualquier cosa más rápida que la implementación de NetworkX sería útil.Código de correspondencia bipartita de peso máximo/mínimo en Python
Respuesta
Después de algunas investigaciones adicionales, he encontrado los siguientes dos módulos particularmente útiles (http://pypi.python.org/pypi/pyLAPJV/0.3 y http://pypi.python.org/pypi/hungarian). Ambos son algoritmos implementados en C++ con enlaces de Python, y se ejecutan mucho más rápido que la implementación de coincidencia de NetworkX. La implementación de pyLAPJV, sin embargo, parece ser un poco voluble para mis necesidades y no maneja adecuadamente los bordes con ponderación idéntica. El módulo húngaro (aunque supuestamente más lento que el algoritmo pyLAPJV) ejecuta aproximadamente 3 órdenes de magnitud más rápido que la implementación de NetworkX en los tamaños de datos con los que actualmente estoy tratando. También voy a dar otra mirada al código sugerido por kunigami, ya que creo que se puede ejecutar a través de Shedskin con bastante facilidad para dar una implementación razonablemente rápida.
No estoy seguro si esto es lo que está buscando, pero es una implementación de Python del algoritmo de comparación de gráficos bipartitos Hopcroft-Karp. De lo contrario, probablemente sea un buen lugar para comenzar.
Gracias por el enlace Nico. Sin embargo, el problema de coincidencia máxima es mayor que el problema de coincidencia de peso máximo; se trata de encontrar el número máximo de vértices participantes, el intestino no toma los pesos en cuenta. – nomad
¿Has probado la implementación astuta del algoritmo húngaro, también conocido como el algoritmo Munkres o Kuhn-Munkres?
- 1. Correspondencia aproximada de cadena
- 2. líneas de copia de correspondencia de Emacs
- 3. Programa de correspondencia de archivos de audio
- 4. peso anidado en diseño lineal
- 5. ¿Correspondencia de expresiones regulares entre dos cadenas?
- 6. tablas de correspondencia nombre con mostrar tablas
- 7. weightx y de peso en Java GridBagLayout
- 8. RestKit relaciones de correspondencia objeto sin KVC
- 9. Correspondencia de expresiones regulares de cadenas en Erlang
- 10. Concordancia bipartita ponderada máxima, restricción: el orden de cada gráfico se conserva
- 11. Bloques de código en python
- 12. android peso de diseño mediante programación
- 13. Opciones de peso de fuente CSS
- 14. "[Función de peso liviano]" en la pila de llamadas
- 15. Comprobación de peso de borde negativo en dijkstra_shortest_paths de boost
- 16. Python: estadísticas de código
- 17. Generador de código Python
- 18. código de Python encarcelamiento
- 19. Unidad de peso del producto Magento
- 20. Haciendo submenús de JPopupMenu peso pesado
- 21. Disposición lineal de peso y estatura
- 22. ¿Lwt significa "hilo de peso ligero"?
- 23. Ligero Vs Procesos de peso pesado
- 24. Normas de código de salida en Python
- 25. Código "Boilerplate" en Python?
- 26. NHibernate correspondencia NULL Objeto/Patrón Caso especial
- 27. ¿Cómo peso 'ORDER BY' en mysql?
- 28. Lectibilidad de código de Python
- 29. Establecer el peso (porcentaje) programáticamente
- 30. Generando resultados aleatorios por peso en PHP?
¿Tiene alguna pseudo código específico en mente? ¿Puedes proporcionar un ejemplo de entrada/salida de Python? – kevpie
Pregunta similar http://stackoverflow.com/questions/4075669/hungarian-algorithm-in-python – Ante
@Kevpie Estoy abierto a casi cualquier interfaz. El problema del peso máximo es, en sí mismo, bien definido (en Wikipedia, por ejemplo, http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs), por lo que no quería perder espacio redefiniéndolo. La entrada sería un gráfico o incluso solo una matriz de peso, y la salida sería una coincidencia entre los vértices bipartitos. – nomad