2010-06-14 12 views
10

Sono arrugginito su modelli C++ e sto usando la libreria di grafici boost (una combinazione fatale). Ho cercato sul Web e non riesco a trovare alcuna istruzione diretta su come prendere una struttura grafica personalizzata e adattarla a BGL (boost graph library) che posso utilizzare algoritmi di traversamento grafico boost. Qualcuno ha familiarità con la biblioteca per aiutarmi?Come adattare un grafico personalizzato al modello della libreria del grafico boost?

EDIT: Quindi, il problema principale che ho riscontrato è dove trovare una fonte in cui i requisiti totali per mappare un grafico arbitrario a un grafico BGL. Sono davvero nuovo con i modelli, quindi è difficile per me leggere le specifiche/esempi di BGL. Forse dovrei cercare una fonte generale sui modelli?

+0

Sarebbe di grande aiuto se potessimo vedere un esempio di come si presenta la struttura del tuo grafico personalizzato. –

risposta

5

L'approccio, a quanto ho capito, è di specializzare la struttura boost::graph_traits per il tipo di grafico. Questo configura BGL con varie importanti proprietà di cui ha bisogno per conoscere il tuo grafico. Quindi specializzate le funzioni globali del modello per il tipo di grafico specialistico di graph_traits per implementare qualsiasi interfaccia di grafico di incremento che potrebbe applicarsi al vostro tipo specifico di grafico.

Un esempio è proprio lì nella documentazione BGL:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/leda_conversion.html

Non ci sono collegamenti per alcune delle diverse interfacce là, che indicano quali funzioni template globali avrete bisogno di specializzarsi per il grafico, se vuoi supportare quell'interfaccia. L'elenco completo delle interfacce è qui:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/graph_concepts.html

+1

Ho letto la maggior parte della documentazione BGL che il sito ha per quanto riguarda il funzionamento del template. Tuttavia, se non conosci la LEDA, l'esempio che mostri non è banale e non è ben spiegato. Se guardi il loro codice è quasi completamente privo di commenti. Ogni pezzo di codice che ho trovato sul sito del grafico boost è quasi completamente privo di commenti, e per un oggetto questo generico è abbastanza scoraggiante. – Michael

+0

Aiuterà, quindi, se indichi cose specifiche su cui non sei chiaro o specifiche relative alla struttura del tuo grafico che rendono difficile l'adattamento. –

+0

abbastanza giusto, metterà in atto una modifica più tardi oggi – Michael

6

mio suggerimento sarebbe quello di abbandonare l'uso di BGL del tutto a meno che non si dispone già di una notevole quantità di codice scritto su di esso. Lo stavo testando di recente per un uso futuro su un grande progetto di analisi del grafico, e l'ho trovato quasi inutilizzabile a causa di un'API eccessivamente complessa e mal progettata.

Non ci sono compiti semplici in BGL, solo complessi, e io stavo combattendo costantemente il compilatore a causa della gerarchia dei template eccessivamente complicata di BGL. Poca o nessuna documentazione utile (almeno non dove è realmente necessaria) e non abbastanza esempi aggravano solo le questioni. Non è il modo di scrivere codice.

Si consiglia di passare a LEMON. È stabile, scritto in C++, facile da capire e codificato, offre diverse forme specializzate di grafici per supportare le diverse esigenze di utilizzo e supporta sia le funzioni di ricerca/visitatore BFS che DFS. Ha anche il suo equivalente di mappe di proprietà per nodi/spigoli, quindi dovresti essere in grado di adattare la tua struttura grafica e altri dati su di essa.

Prova LEMON; ha un sapore molto migliore e causerà meno ulcere. ;-)

+2

Ho appena finito di testare LEMON su un grafico con 1 milione di nodi e 100 milioni di bordi; adattato bene senza problemi di prestazioni, ecc. –

+0

Grazie per l'idea!Purtroppo sto lavorando con una base di codice GRANDE e non credo che i miei capi vogliono un altro dipendenza: S – Michael

+1

Oh, e bello sentire che non sono l'unico che pensa BGL è assolutamente complesso e troppo generale e che gli esempi aren è particolarmente rivelatore! – Michael

Problemi correlati