2016-04-29 14 views
6

UPD: Mi sono trasferito domanda iniziale per https://codereview.stackexchange.com/questions/127055/building-tree-graph-from-dictionary-performance-issuesPhp implementazione albero prefisso contro gamma assoc

Ecco una versione corta, senza codici.

Sto provando a creare un albero prefisso dal dizionario. Quindi, utilizzando il seguente dizionario 'and','anna','ape','apple', il grafico dovrebbe essere simile al seguente: graph Ho provato 2 approcci: utilizzando array associativo e utilizzando classi di albero/nodo autodidatta.

Nota: il dizionario originale è qualcosa di circa 8 MB e contiene> 600000 parole.

Domanda: c'è qualche buon modo (veloce/efficiente) per farlo?

io ho provato finora:

  • array associativi php (non sono molto flessibili per il lavoro futuro con questo grafico).

  • Classi Tree/Node autodefinite (problemi di prestazioni - il tempo di esecuzione sale fino a 7 volte, l'utilizzo della memoria aumenta di 2x anche senza implementare nulla tranne la semplice funzione inserting).

codici di esempio sono disponibili sul CodeReview (il primo collegamento in questione)

+0

Entrambi hanno lo stesso codice/complessità di esecuzione, non lo stesso footprint di memoria e velocità di esecuzione. A seconda della versione di PHP che si esegue in classi, si utilizza anche più o meno memoria. Se stai cercando prestazioni migliori e non solo materiale didattico, ti suggerisco di esaminare i set annidati. Troverà anche le implementazioni PHP pronte all'uso: http://stackoverflow.com/questions/272010/searching-for-the-best-php-nested-sets-class-pear-class-excluded –

+2

Questa domanda è più adatta per [code review] (http://codereview.stackexchange.com) – nickb

+0

@Sergiu Paraschiv - Lo guarderò io – haldagan

risposta

0

Finché ho passato a C++ e ottenuto una buona risposta sul codereview, mi limiterò a rispondere alla mia domanda Qui.

C'è un altro modo per farlo molto più tempo efficiente, aumentando l'utilizzo della memoria (non è molto grande incremento, rispetto al "array di array s di array s ..." approccio). L'approccio è chiamato "double array trie" e puoi leggere le informazioni su questo argomento here e leggere la risposta sopra riportata su codereview per vedere un esempio di implementazione.

È più efficiente in termini di tempo, ma consente una minore flessibilità/convenienza per l'utilizzo futuro (rispetto all'approccio OOP).

Quindi la risposta finale a questa domanda per me è: "php non è lo strumento migliore per lavorare con davvero grandi tentativi con".