Sto cercando il codice Python per la corrispondenza di peso/minimo costo massimo in un grafico bipartito. Ho utilizzato il codice di corrispondenza del peso massimo del caso generale in NetworkX, ma lo trovo troppo lento per le mie esigenze. Ciò è probabilmente dovuto sia al fatto che l'algoritmo generale è più lento, sia al fatto che la soluzione NetworkX è implementata interamente in Python. Idealmente, mi piacerebbe trovare un codice Python per il problema di corrispondenza bipartito che avvolge un po 'di codice C/C++, ma al momento, qualsiasi cosa più veloce dell'implementazione di NetworkX sarebbe utile.Codice di corrispondenza bipartito di costo massimo/minimo in Python
risposta
Dopo ulteriori indagini, ho trovato particolarmente utili i seguenti due moduli (http://pypi.python.org/pypi/pyLAPJV/0.3 e http://pypi.python.org/pypi/hungarian). Sono entrambi algoritmi implementati in C++ con collegamenti Python ed eseguiti molto più velocemente rispetto all'implementazione di corrispondenza di NetworkX. L'implementazione di pyLAPJV, tuttavia, sembra essere un po 'troppo volubile per le mie esigenze e non gestisce correttamente i bordi con pesi identici. Il modulo ungherese (anche se apparentemente più lento dell'algoritmo pyLAPJV) esegue circa 3 ordini di grandezza più velocemente dell'implementazione di NetworkX sulle dimensioni dei dati con cui attualmente mi occupo. Darò anche un'altra occhiata al codice suggerito da kunigami, poiché ritengo che possa essere eseguito con Shedskin abbastanza facilmente per dare un'implementazione ragionevolmente veloce.
Non troppo sicuro se questo è ciò che si sta cercando, ma è un'implementazione python dell'algoritmo di corrispondenza del grafico bipartito Hopcroft-Karp. In caso contrario, probabilmente può essere un buon punto di partenza per te.
Grazie per il link Nico. Tuttavia, il problema di corrispondenza massima non è elevato rispetto al problema di corrispondenza del peso massimo; si occupa di trovare il numero massimo di vertici partecipanti, l'intestino non tiene conto dei pesi. – nomad
Il peso corrispondente minimo bipartito può essere risolto dall'algoritmo ungherese (wikipedia). Il collegamento nei collegamenti di Wikipedia ad un'implementazione python. Non sono sicuro se sia più veloce del codice che hai citato, però.
Grazie Kunigami, lo controllerò e vediamo come si comporta. – nomad
Hai provato l'implementazione scipy dell'algoritmo ungherese, noto anche come algoritmo Munkres o Kuhn-Munkres?
- 1. Algoritmi di corrispondenza in R (matching bipartito, algoritmo ungherese)
- 2. Costo dei gestori di eccezioni in Python
- 3. Grafico bipartito in NetworkX
- 4. costo delle funzioni lista in Python
- 5. corrispondenza di più righe nell'espressione regolare python
- 6. corrispondenza con il numero di cluster in scipy.cluster.hierarchy di Python
- 7. Il costo di thread_local
- 8. Python RegEx corrispondenza Newline
- 9. numero di incroci Minimizzare in un grafo bipartito
- 10. Python - ip <-> corrispondenza di subnet?
- 11. Modello di costo x86 moderno
- 12. corrispondenza obiettivo parola python
- 13. Blocchi di codice in python
- 14. Costo delle prestazioni di "prova" in C#
- 15. Regex - Corrispondenza attributo in un codice HTML
- 16. caso di corrispondenza con le espressioni regolari in Python
- 17. Esistono funzioni di corrispondenza dei modelli in Python come questo?
- 18. Cercando di trovare una corrispondenza in due stringhe - Python
- 19. corrispondenza dell'istogramma di due immagini in Python 2.x?
- 20. Date di corrispondenza con espressioni regolari in Python?
- 21. Codice di python di debug in pycharm
- 22. Corrispondenza modello/predicato funzione in Python
- 23. Costo del ridimensionamento Rails rispetto al costo del ridimensionamento Framework PHP vs Python
- 24. Generatore di codice Python
- 25. Trova tutto il sottografo bipartito completo massimale dal dato grafico bipartito
- 26. operazioni di base tempo di cpu costo
- 27. Offset di codice Python
- 28. Qual è il costo di '$ (questo)'?
- 29. Lettera di corrispondenza in qualsiasi lingua
- 30. Costo delle prestazioni dei confronti di tipo
Avete qualche pseudo codice specifico in mente? Potete fornire un esempio di input/output di python? – kevpie
Domanda simile http://stackoverflow.com/questions/4075669/hungarian-algorithm-in-python – Ante
@Kevpie Sono aperto a quasi tutte le interfacce. Il problema del peso massimo è, a sua volta, ben definito (su Wikipedia per esempio http://en.wikipedia.org/wiki/Matching_(graph_theory)#Maximum_matchings_in_bipartite_graphs) quindi non volevo sprecare spazio ridefinendolo. L'input sarebbe un grafico o anche solo una matrice di peso, e l'output sarebbe una corrispondenza tra i vertici bipartito. – nomad