Utilizzo di algoritmi genetici in ambito SEO ( Search Engine
Optimization )
In questo articolo mostreremo come è stato usa...
Gli algoritmi in questione sono ovviamente molto più complessi ed il nostro scopo non è quello di
replicarli fedelmente, m...
L'algoritmo evolve quindi attraverso i seguenti punti:

       generazione, in maniera casuale di una popolazione iniziale...
L'applicazione

Un sito web è a tutti gli effetti un grafo. Ed è al grafo del sito in esame che applicheremo l' algoritmo
...
L'algoritmo è in grado di tenere conto anche dei vincoli editoriali e di evolversi in funzione di essi.

I risultati

A se...
Prima dell' applicazione dell'algoritmo genetico
                                       Url                               ...
Dopo l' applicazione dell'algoritmo genetico
                                                  Url                        ...
Le pagine che sono presenti nel menù come è facile immaginare sono quelle con maggiore rank, sia
prima che dopo. Tuttavia ...
Upcoming SlideShare
Loading in …5
×

Utilizzo Di Algoritmi Genetici In Ambito Seo

1,017 views

Published on

In questo articolo mostreremo come è stato usato l\'approccio degli algoritmi genetici per l\'ottimizzazione della distribuzione dei link all\'interno di siti web per massimizzare il rank medio delle singole pagine web.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,017
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Utilizzo Di Algoritmi Genetici In Ambito Seo

  1. 1. Utilizzo di algoritmi genetici in ambito SEO ( Search Engine Optimization ) In questo articolo mostreremo come è stato usato l'approccio degli algoritmi genetici per l'ottimizzazione della distribuzione dei link all'interno di siti web per massimizzare il rank medio delle singole pagine web. Iniziamo spiegando come si comporta un algoritmo di link analysis ranking (LAR), i quali sono molto utilizzati dai motori di ricerca per effettuare l' ordinamento (o ranking) delle pagine web. Esso inferisce importanza a una pagina web basandosi sulla struttura topologica del grafo, estratto analizzando i collegamenti ipertestuali del sito in esame, percorrendolo ed analizzandone gli archi uscenti e gli archi entranti, ovvero, link uscenti e link entranti delle pagine che compongono il grafo. Sulla base di queste informazioni viene associato un valore ad ogni pagina, che verrà poi usato per l'ordinamento. Il predecessore degli algoritmi di link analysis ranking è InDegree che calcola la popolarità di una pagina prendendo in considerazione il numero di pagine che hanno un link ad essa. Algoritmi più recenti e maggiormente raffinati sono: PageRank • Kleinberg (in seguito intitolato HITS) • Salsa • PageRank segue un percorso casuale nel grafo del web, dove ogni pagina propaga il proprio peso alle pagine verso cui ha un link, determinando un array di pesi nominati in seguito pesi di authority. L'algoritmo completo per il calcolo del PageRank fa ricorso all'uso della teoria dei processi di Markov. Kleinberg propone uno schema di propagazione dei pesi a due livelli, determinando i valori di authority e anche i valori di hub. Una pagina con alto valore di hub, sarà una pagina che contiene collegamenti a pagine di qualità (ossia con alto valore di authority) e simmetricamente una pagina con un alto valore di authority, sarà un pagina puntata da molti buoni hub. Salsa è un ibrido fra i due algoritmi precedenti. Per approssimare questi algoritmi prenderemo in considerazione la formula inizialmente sviluppata dai fondatori di Google. Rank[A] = ( 1 - d ) + d (Rank[P1] / Link[P1] + ..... + Rank[Pn] / Link[Pn] ) Rank[A] è il valore di Rank della pagina A che vogliamo calcolare • P[1]...P[n] sono le pagine che contengono almeno un link verso A • Rank[P1] ... Rank[Pn] sono i valori di Rank delle pagine P1 ... Pn • Link[T1] ... Link[Tn] sono il numero complessivo di link contenuti nella pagina che offre il • link d (damping factor) è un fattore deciso da Google che nella documentazione originale assume • valore 0,85. Può essere aggiustato da Google per decidere la percentuale di PageRank che deve transitare da una pagina all'altra e il valore di Rank minimo attribuito ad ogni pagina in archivio.
  2. 2. Gli algoritmi in questione sono ovviamente molto più complessi ed il nostro scopo non è quello di replicarli fedelmente, ma di ottenere un modello matematico che riesca ad approssimarli per ottenere un quot;Nostroquot; valore di Rank che ci permetta di stabilire la bontà della struttura topologica calcolata dall'algoritmo genetico dopo che è stato applicato. Facciamo adesso una panoramica sugli algoritmi genetici. L'algoritmo genetico è un algoritmo di analisi dei dati e appartiene a una particolare classe di algoritmi utilizzati in diversi campi, tra cui l'intelligenza artificiale. È un metodo euristico di ricerca ed ottimizzazione, ispirato al principio della selezione naturale di Charles Darwin che regola l'evoluzione biologica. Principi di funzionamento Un tipico algoritmo genetico parte da un certo numero di possibili soluzioni (individui) chiamate popolazione e provvede a farle evolvere nel corso dell'esecuzione: a ciascuna iterazione, esso opera una selezione di individui della popolazione corrente, impiegandoli per generare nuovi elementi della popolazione stessa, che andranno a sostituire un pari numero d'individui già presenti, e a costituire in tal modo una nuova popolazione per l'iterazione (o generazione) seguente. Tale successione di generazioni evolve verso una soluzione ottimale del problema assegnato. L' evoluzione viene ottenuta attraverso una parziale ricombinazione delle soluzioni, ogni individuo trasmette parte del suo patrimonio genetico ai propri discendenti. L'introduzione di mutazioni casuali nella popolazione di partenza, genera sporadicamente nuovi individui, con caratteristiche non comprese tra quelle presenti nel corredo genetico della specie originaria. Finita la fase di evoluzione, la popolazione generata ad ogni iterazione, viene analizzata e vengono tenute solo le soluzioni che meglio risolvono il problema: gli individui con le qualità più adatte all'ambiente in cui si trovano hanno maggiori possibilità di sopravvivere e riprodursi. Queste soluzioni subiranno una nuova fase di evoluzione e così via. Alla fine ,ci si aspetta di trovare una popolazione di soluzioni, che riescano a risolvere adeguatamente il problema posto. Non vi è modo di decidere a priori se l'algoritmo sarà effettivamente in grado di trovare una soluzione accettabile. Di norma gli algoritmi genetici vengono utilizzati per problemi di ottimizzazione per i quali non si conoscono algoritmi di complessità lineare o polinomiale. Dettaglio del funzionamento La soluzione del problema viene codificata in una struttura dati, di solito una stringa, detta gene. Inizialmente viene creato un certo numero di geni in maniera casuale e si definisce una funzione che restituisca la quot;bontàquot; di un gene come soluzione del problema, detta funzione di fitness. L'algoritmo consiste nell'applicazione di operazioni, che tendono a modificare la popolazione dei geni, nel tentativo di migliorarli in modo da ottenere una soluzione sempre migliore. L'evoluzione procede quindi in passi, per ognuno di questi viene per prima cosa eseguito un ordinamento dei geni sulla base del risultato della funzione di fitness. Vengono poi eseguite le operazioni su un numero di geni stabilito dai parametri dell'algoritmo, che in generale determinano quanti geni devono subire crossover e mutazioni, e in quale misura.
  3. 3. L'algoritmo evolve quindi attraverso i seguenti punti: generazione, in maniera casuale di una popolazione iniziale; • creazione di una sequenza di nuove popolazioni, o generazioni. In ciascuna iterazione, gli • individui della popolazione corrente sono usati per creare la generazione successiva e, a questo scopo, si compiono degli ulteriori passi: • Ciascun membro della popolazione corrente è valutato calcolandone il rispettivo o valore di fitness (idoneità); o Si determina un opportuno ordinamento di tali individui sulla base dei valori di fitness; o Gli individui più promettenti sono selezionati come genitori; o A partire da tali individui si genera un pari numero di individui della generazione successiva, e ciò può avvenire secondo due modalità distinte, vale a dire effettuando cambiamenti casuali su un singolo genitore (mutazione) oppure combinando opportunamente le caratteristiche di una coppia di genitori (incrocio); o Gli individui così generati vanno a sostituire i genitori consentendo la formazione della generazione successiva; Infine, l'algoritmo s'interrompe quando uno dei criteri d'arresto è soddisfatto. • In base a un coefficiente stabilito inizialmente, alcune parti dei geni risultati migliori vengono scambiate, nell'ipotesi che questo possa migliorare il risultato della funzione di fitness nel successivo quot;passo evolutivoquot;. Single point crossover Ci sono varie tecniche di crossover. Una delle più semplice è la quot;single point crossoverquot; che consiste nel prendere due individui e tagliare le loro stringhe di codifica in un punto a caso. Si creano così due teste e due code. A questo punto si scambiano le teste e le code, ottenendo due nuovi geni. Il crossover non è applicato sempre, ma con una probabilità pc. Nel caso in cui non viene applicato i figli sono semplicemente le copie dei genitori. Sperimentalmente si può vedere che il miglioramento diventa apprezzabile solo dopo un certo numero di passi. Questo a meno di casi fortunati, ovviamente. Mutazione La mutazione consiste nella modifica casuale di alcune parti dei geni con valore di fitness più basso, in base a coefficienti definiti inizialmente. Queste modifiche puntano a migliorare il valore della funzione per il gene in questione. In realtà non è corretto pensare di mutare solo i cromosomi con fitness più bassa; al fine di garantire una maggiore capacità esplorativa dell'algoritmo (e non finire in quot;buchequot; di ottimo locale) sono ritenute utili anche le mutazioni di cromosomi con valore di fitness alto. In definitiva le mutazioni servono soprattutto a esplorare lo spazio di ricerca, non hanno quindi scopo migliorativo.
  4. 4. L'applicazione Un sito web è a tutti gli effetti un grafo. Ed è al grafo del sito in esame che applicheremo l' algoritmo genetico. La rappresentazione utilizzata è quella per matrice di adiacenza. La matrice delle adiacenze costituisce una particolare struttura dati comunemente utilizzata nella rappresentazione dei grafi. In particolare è ampiamente utilizzata nella stesura di algoritmi che operano su grafi e in generale nella loro rappresentazione informatica. Dato un qualsiasi grafo la sua matrice delle adiacenze è costituita da una matrice binaria quadrata che ha come indici di righe e colonne i nomi dei vertici del grafo. Nel posto (i,j) della matrice si trova un 1 se e solo se esiste nel grafo un arco che va dal vertice i al vertice j, altrimenti si trova uno 0. Se al posto degli 1 nella matrice si trovano dei numeri, questi sono da interpretare come il peso attribuito a ciascun arco. Ad esempio se l'insieme dei vertici del grafo rappresenta una serie di punti su una cartina geografica, il peso degli archi può essere interpretato come la distanza dei punti che questi connettono. Nel nostro caso indicherà la quantità di link. Nel caso della rappresentazione di grafi non orientati, la matrice è simmetrica rispetto alla diagonale principale. Una delle caratteristiche fondamentali di questa matrice è di permettere di ottenere il numero dei cammini da un nodo i ad un nodo j che devono attraversare n nodi. Per ottenere tutto ciò è sufficiente fare la potenza n-sima della matrice e vedere il numero che compare al posto i,j. Come precedentemente spiegato un gene è una stringa binaria, quindi una sequenza di 0 ed 1. L'idea che sta alla base di questo algoritmo è che anche una matrice può essere vista come una stringa binaria e quindi un gene. Se vogliamo infatti accedere all'elemento nella posizione X, Y di una matrice organizzata come stringa, basta applicare la seguente formula: Value(x,y) = Matrix[ (x+matrixsize) * y] Applicando quindi un algoritmo genetico al grafo del sito in esame è possibile ottenere una migliore struttura topologica che migliora il rank delle singole pagine. Sono stati studiati ed implementate altri processi di evoluzione oltre quello di crossover precedentemente spiegato, appositamente pensati per la problematica SEO. La funzione di fitness è abbastanza complessa e tra i parametri che prende in considerazione ci sono il rank medio delle pagine obiettivo, il numero di link medio per pagina e numero di pagine nulle. Le pagine obiettivo sono quelle pagine del sito che sono di nostro particolare interesse. Tipicamente nella maggior parte dei casi si tratta delle pagine di foglia. Per pagina nulla si intende una pagina con valore di rank pari a 0.15 ( si deduce facilmente dalla formula di rank sopra citata), oppure dal valore stabilito dall'utente.
  5. 5. L'algoritmo è in grado di tenere conto anche dei vincoli editoriali e di evolversi in funzione di essi. I risultati A seguito i risultati dell' applicazione dell'algoritmo genetico sul sito: http://www.fratellileonelli.it Potete vedere la rappresentazione 3D del grafo prima e dopo il processo. La dimensione delle sfere verdi indica il valore di rank delle pagine, mentre gli archi sono rappresentati in viola. Prima l'applicazione Dopo l'applicazione Si nota a colpo d'occhio la sostanziale differenza tra prima e dopo il trattamento. Le sfere ( Le singole pagine web ) hanno un diametro più ampio, che significa maggiore rank. Prima dell' applicazione dell'algoritmo genetico Url Rank / 20,869984 /come-raggiungerci/ 1,923949 /foto/ 3,078781 /eventi/ 1,982173 /progettazione/ 20,345295 /realizzazione/ 20,464703 /manutenzione/ 20,574158 /potatura/ 20,674488 /erbacee-perenni/ 29,898375 /arbusti/ 26,296431 /foto/azienda-florovivaistica-leonelli-0001/ 0,215424 /foto/azienda-florovivaistica-leonelli-0002/ 0,215424 /foto/azienda-florovivaistica-leonelli-0003/ 0,215424 /foto/azienda-florovivaistica-leonelli-0004/ 0,215424 /foto/azienda-florovivaistica-leonelli-0005/ 0,215424 /foto/azienda-florovivaistica-leonelli-0006/ 0,215424 /foto/azienda-florovivaistica-leonelli-0007/ 0,215424 /foto/azienda-florovivaistica-leonelli-0008/ 0,215424 /foto/azienda-florovivaistica-leonelli-0009/ 0,215424 /foto/azienda-florovivaistica-leonelli-0010/ 0,215424
  6. 6. Prima dell' applicazione dell'algoritmo genetico Url Rank /eventi/mostra-mercato/ 0,318485 /eventi/open-day/ 0,318485 /erbacee-perenni/agastache/rupestris/ 0,288162 /erbacee-perenni/ajuga-reptans/atropurpurea/ 0,288162 /erbacee-perenni/alchemilla/mollis/ 0,288162 /erbacee-perenni/allium/karataviense/ 0,288683 /erbacee-perenni/allium/tuberosum/ 0,288683 /erbacee-perenni/allium-karataviense/ivory-queen/ 0,288162 /erbacee-perenni/alyssum/montanum/ 0,289121 /erbacee-perenni/alyssum/saxatile/ 0,289121 /erbacee-perenni/alyssum/saxatile-compactum/ 0,289121 /erbacee-perenni/amsonia/tabernaemontana/ 0,288162 /erbacee-perenni/anemone/honorine-jobert/ 0,290098 /erbacee-perenni/anemone/konigin-charlotte/ 0,290098 /erbacee-perenni/anemone/prinz-heinrich/ 0,290098 /erbacee-perenni/anemone/richards-ahrends/ 0,290098 /erbacee-perenni/anemone/rosenschale/ 0,290098 /erbacee-perenni/anemone/whirlwind/ 0,290098 /erbacee-perenni/aquilegia/vulgaris/ 0,288162 /erbacee-perenni/aquilegia-cerualea/red-hobbit/ 0,288162 /erbacee-perenni/aquilegia-cerulea/rose-queen/ 0,288162 /erbacee-perenni/aquilegia-flabellata-pumila/ministar/ 0,288162 /erbacee-perenni/aquilegia-hybride/biedermeier/ 0,288162 /erbacee-perenni/arabis-caucasica/snowball/ 0,288162 /erbacee-perenni/arenaria-montana/alba/ 0,288162 /erbacee-perenni/artemisia/powis-castle/ 0,288683 /erbacee-perenni/artemisia/stelleriana/ 0,288683 /erbacee-perenni/asclepias/tuberosa/ 0,288162 /erbacee-perenni/aster/snow-flurry/ 0,288162 /erbacee-perenni/aster-dumosus/kippenberger/ 0,288683 /erbacee-perenni/aster-dumosus/schneekissen/ 0,288683 /erbacee-perenni/aster-laterifolius/lady-black/ 0,288162 /erbacee-perenni/astilboides/tabularis/ 0,288162 /erbacee-perenni/aubretia/blue-cascade/ 0,288162 /erbacee-perenni/begonia/envasiana-bianca/ 0,288162 /erbacee-perenni/belamcanda/chinensis/ 0,288162 /erbacee-perenni/brunnera/macrophilla/ 0,288162 /erbacee-perenni/callirhoe/involucrata/ 0,288162 /erbacee-perenni/campanula/loddon-anna/ 0,289121 /erbacee-perenni/campanula/porscharskyana-lisduggan/ 0,289121 /erbacee-perenni/campanula/poscharskyana-stella/ 0,289121 /erbacee-perenni/campanula-persicifolia/telham-beauty/ 0,288162 /erbacee-perenni/campanula-poscharskyana/eh.-frost/ 0,288162 /erbacee-perenni/campanula-punctata/rubriflora/ 0,288162 /erbacee-perenni/centaurea/pulcherrima/ 0,288162 /erbacee-perenni/centranthus/ruber/ 0,288162 /erbacee-perenni/ceratostigma/plumbaginoides/ 0,288162 /erbacee-perenni/chrisantemum-coccineus/robin-red/ 0,288162 /erbacee-perenni/chrysantemum/weirichii/ 0,288162 /erbacee-perenni/cimicifuga/racemosa/ 0,288162 /erbacee-perenni/convallaria-japonica/nana/ 0,288162 /erbacee-perenni/coreopsis/grandiflora-aureo-marginata/ 0,289121 /erbacee-perenni/coreopsis/verticillata-grandiflora/ 0,289121 Dopo l' applicazione dell'algoritmo genetico Url Rank Variazione in % / 13,694373 -34,382446 /come-raggiungerci/ 1,051139 -45,365528 /foto/ 1,464144 -52,444015 /eventi/ 1,14884 -42,041415 /progettazione/ 13,828813 -32,029433 /realizzazione/ 13,718434 -32,965392 /manutenzione/ 13,976818 -32,066148 /potatura/ 14,024247 -32,166412 /erbacee-perenni/ 22,935853 -23,287291 /arbusti/ 16,967085 -35,477614 /foto/azienda-florovivaistica-leonelli-0007/ 1,110144 415,329628 /foto/azienda-florovivaistica-leonelli-0001/ 0,291642 35,380483 /foto/azienda-florovivaistica-leonelli-0002/ 0,268323 24,555806
  7. 7. Dopo l' applicazione dell'algoritmo genetico Url Rank Variazione in % /foto/azienda-florovivaistica-leonelli-0003/ 0,281249 30,555904 /foto/azienda-florovivaistica-leonelli-0004/ 0,335848 55,90069 /foto/azienda-florovivaistica-leonelli-0005/ 0,353533 64,110223 /foto/azienda-florovivaistica-leonelli-0006/ 0,317864 47,552509 /foto/azienda-florovivaistica-leonelli-0008/ 0,298621 38,620123 /foto/azienda-florovivaistica-leonelli-0009/ 0,322093 49,515791 /foto/azienda-florovivaistica-leonelli-0010/ 0,518017 140,463603 /foto/azienda-florovivaistica-leonelli-0011/ 0,416419 93,30211 /eventi/mostra-mercato/ 1,077961 238,465601 /eventi/open-day/ 0,400233 25,667764 /erbacee-perenni/agastache/rupestris/ 0,380497 32,042654 /erbacee-perenni/ajuga-reptans/atropurpurea/ 0,353591 22,705328 /erbacee-perenni/alchemilla/mollis/ 0,439853 52,64078 /erbacee-perenni/allium/karataviense/ 0,538787 86,636158 /erbacee-perenni/allium/tuberosum/ 0,363862 26,042161 /erbacee-perenni/allium-karataviense/ivory-queen/ 0,31456 9,160755 /erbacee-perenni/alyssum/montanum/ 0,456966 58,053371 /erbacee-perenni/alyssum/saxatile/ 1,010271 249,42859 /erbacee-perenni/alyssum/saxatile-compactum/ 1,260897 336,114057 /erbacee-perenni/amsonia/tabernaemontana/ 0,542984 88,429871 /erbacee-perenni/anemone/honorine-jobert/ 0,390125 34,4802 /erbacee-perenni/anemone/konigin-charlotte/ 0,351422 21,13903 /erbacee-perenni/anemone/prinz-heinrich/ 1,071951 269,5129 /erbacee-perenni/anemone/richards-ahrends/ 0,435242 50,032475 /erbacee-perenni/anemone/rosenschale/ 0,391896 35,090808 /erbacee-perenni/anemone/whirlwind/ 0,33464 15,354023 /erbacee-perenni/aquilegia/vulgaris/ 1,104393 283,25364 /erbacee-perenni/aquilegia-cerualea/red-hobbit/ 1,041284 261,353236 /erbacee-perenni/aquilegia-cerulea/rose-queen/ 0,346796 20,347341 /erbacee-perenni/aquilegia-flabellata-pumila/ministar/ 0,391123 35,729918 /erbacee-perenni/aquilegia-hybride/biedermeier/ 0,45022 56,238254 /erbacee-perenni/arabis-caucasica/snowball/ 0,390517 35,519662 /erbacee-perenni/arenaria-montana/alba/ 0,437306 51,756659 /erbacee-perenni/artemisia/powis-castle/ 0,340346 17,896019 /erbacee-perenni/artemisia/stelleriana/ 1,002906 247,407458 /erbacee-perenni/asclepias/tuberosa/ 0,404723 40,449666 /erbacee-perenni/aster/snow-flurry/ 0,496032 72,136291 /erbacee-perenni/aster-dumosus/kippenberger/ 0,348915 20,864332 /erbacee-perenni/aster-dumosus/schneekissen/ 0,345664 19,738409 /erbacee-perenni/aster-laterifolius/lady-black/ 0,359595 24,788962 /erbacee-perenni/astilboides/tabularis/ 0,404522 40,379976 /erbacee-perenni/aubretia/blue-cascade/ 0,348454 20,92274 /erbacee-perenni/begonia/envasiana-bianca/ 0,405793 40,820759 /erbacee-perenni/belamcanda/chinensis/ 0,331347 14,986294 /erbacee-perenni/brunnera/macrophilla/ 0,447869 55,422554 /erbacee-perenni/callirhoe/involucrata/ 0,550039 90,87803 /erbacee-perenni/campanula/loddon-anna/ 0,423717 46,553667 /erbacee-perenni/campanula/porscharskyana-lisduggan/ 0,441346 52,651122 /erbacee-perenni/campanula/poscharskyana-stella/ 0,351554 21,59415 /erbacee-perenni/campanula-persicifolia/telham-beauty/ 0,476057 65,204238 /erbacee-perenni/campanula-poscharskyana/eh.-frost/ 0,420136 45,798436 /erbacee-perenni/campanula-punctata/rubriflora/ 0,441126 53,082548 /erbacee-perenni/centaurea/pulcherrima/ 0,440109 52,729489 /erbacee-perenni/centranthus/ruber/ 0,385745 33,863636 /erbacee-perenni/ceratostigma/plumbaginoides/ 1,198788 316,011179 /erbacee-perenni/chrisantemum-coccineus/robin-red/ 0,387029 34,309344 /erbacee-perenni/chrysantemum/weirichii/ 1,040353 261,030125 /erbacee-perenni/cimicifuga/racemosa/ 0,364126 26,361224 /erbacee-perenni/convallaria-japonica/nana/ 0,482505 67,441941 /erbacee-perenni/coreopsis/grandiflora-aureo-marginata/ 0,477275 65,077949 /erbacee-perenni/coreopsis/verticillata-grandiflora/ 1,244313 330,377832 È importante notare come l'algoritmo abbia cercato di distribuire in maniera più omogenea il rank complessivo del sito. Nella tabella con i risultati finali sono evidenziati in rosso i valori più significativi.
  8. 8. Le pagine che sono presenti nel menù come è facile immaginare sono quelle con maggiore rank, sia prima che dopo. Tuttavia il loro rank è stato abbassato in favore delle pagine obiettivo. Ovviamente questo comportamento può essere pilotato in base alle esigenze. In questo particolare caso per il cliente era importante aumentare il rank delle pagine che contengono la descrizione della pianta, di conseguenza, l' algoritmo si è evoluto in questa direzione. A seguito potete vedere come sono stati posizionati i link aggiuntivi calcolati dal processo: Sebastiano Galazzo 18 novembre 2008 sebastiano.galazzo@gmail.com

×