MSN Home  |  My MSN  |  Hotmail
Sign in to Windows Live ID Web Search:   
go to MSNGroups 
Groups Home  |  My Groups  |  Language  |  Help  
 
matematica e libera ricercamatematicaeliberaricerca@groups.msn.com 
  
What's New
  Join Now
  Benvenuto  
  Bacheca  
  Pubblica un articolo  
  Forum  
  Suggerimenti  
  Matematica  
  Fisica  
  Chimica  
  Astronomia  
  Ingegneria  
  Informatica  
  Biologia  
  Filosofia  
  Profilo iscritti  
  Eventi  
  Astronomia  
  Restauro di libri e carte  
  Economia  
  
  
  Tools  
 

Algoritmo a DNA



Questo algoritmo si propono di risolvere il noto problema della ricerca dei cammini minimi.
Per chi non sapesse di cosa si tratti diamo una breve spiegazione.
Supponiamo di avere un commesso viaggiatore che deve coprire per lavoro n citta' e che vi siano m collegamenti. Chiaramente non tutte le citta' sono collegate alle altre. Si cerca un cammino che compra tutte le citta', senza mai ripassare da una citta' gia' toccata.
Vi sono vari modi di solvere questo problema, primo fra tutti quello che utilizza il backtracking. In pratica si compie una sequenza di passi casuale, se si termina in un ramo morto si fa un passo all'indietro e si ripercorre un cammino non ancora toccato.
Chiaramente questo metodo e' molto dispendioso ed, in alcuni casi, puo' portare ad un tempo di lavoro estremamente alto.
Io vi propondo una soluzione alternativa.
Supponiamo di avere le seguenti citta'
A-B-C.......
e di considerare la stringa AB come un cammino che collega la citta' A alla B.
Per prima cosa si considerano tutti i cammini che collegano le citta', quindi avremo
AB, AC, AE, BC, BE, CE, ......
Definiamo questi cammini filamenti 2.
Il passo successivo e' quello di generare i filamenti 4, questo viene fatto facendo combinare i filamenti 2 nella seguente maniera.
Supponiamo di avere AB e CD, questi due cammini si possono combinarea formare ABCD se esiste il cammino BC che fa da ponte tra i due, si devono dunque inizialmente testare tutti i possibili accoppiamenti.
Successivamente bisogna effettuare una scrematura, infatti il cammino ABCA non viene ritenuto valido, per la regola che non e' possibile ripassare su una citta' gia' visitata.
Il passo successivo e' quello di combinare i filamenti 4 per formare filamenti 8, tra cui avremo le soluzioni cercate.
I filamenti vengono creati combinando filamenti 4 e successivamente scremando nella maniera vista precedentemente.
Vediamo adesso un esempio per chiarire il metodo di lavoro di questo algoritmo.
Supponiamo di avere le seguenti citta'
A,B,C,D,E,F,G,H
ed i seguenti collegamenti

AB,AD,AG,BC,BE,CD,CF,DB,DE,EB,ED,FE,FD,FG,GH

Sviluppando otteniamo i seguenti filamenti 4

ABCD, ABCF, ABEB, ABED,
ADBC, ADBE, ADEB, ADED,
BCDB, BCDE, BCFE, BCFD,
BCFG, BEBC, BEBE, BEDB,
BEDE, CDBC, CDBE, CDEB,
CDED, CFEB, CFED, CFDB,
CFDE, CFGH, DBCD, DBCF,
DBEB, DBED, EBCD, EBCF,
EBEB, EBED, EDBC, EDBE,
EDEB, EDED, FEEBC, FEBE,
FEDB, FEDE, FDBC, FDBE,
FDEB, FDED.

Dopo una prima selezione dividiamo i filamenti in due gruppi distinti, quelli che iniziano nella citta' A e quelli che finiscono nella citta' H, se riusciamo a legare senza ottenere nodi, due filamenti appartenenti a due gruppi distinti, otteniamo un cammino che parte da A e termina in H e quindi otteniamo la soluzione.

Abbiamo
ABCD, ABCF, ABED, ADBC, ADBE, ADEB
e dall'altra parte
CFGH
quindi otteniamo
ADEBCFGH
che e' la soluzione cercata.

Pietro Bonfigli

Notice: Microsoft has no responsibility for the content featured in this group. Click here for more info.
  Try MSN Internet Software for FREE!
    MSN Home  |  My MSN  |  Hotmail  |  Search
Feedback  |  Help  
  ©2005 Microsoft Corporation. All rights reserved.  Legal  Advertise  MSN Privacy