A leghosszabb közös rész

Az elméleti számítástechnikában a két szekvenciának vagy két karakterláncnak a leghosszabb részszekvenciája az a szekvencia, amely a két szekvencia részszekvenciája és maximális méretű. A probléma megoldása dinamikus programozással érhető el .

A tetszőleges számú szekvenciára való általánosítás NP-nehéz probléma . Az algoritmus végrehajtási ideje exponenciális a szekvenciák számában.

Példa

A következő két karaktersorozat esetében:

a leghosszabb közös alszakasz "ez".

Ebben a problémában elengedhetetlen, hogy a közös elemek azonos sorrendben legyenek a különböző szekvenciákban, de nem feltétlenül egymást követőek: az „e” nem következik a „c” -vel az első szekvenciában.

Nyers erő algoritmus

Megszámlálva látható, hogy vannak hosszúságú húr szekvenciái . Ha mindet nyers erővel megpróbáljuk megtalálni a leghosszabbat, amely egy másik húr folytatása, ezért exponenciális összetettséggel bír , ami a gyakorlatban nem kívánatos.

Két szekvencia polinomiális időfelbontása

Ilyen részsorrendet egy dinamikus programozási algoritmussal nyerhetünk, amelynek végrehajtási ideje arányos a két szekvencia hosszának szorzatával.

A megoldás felépítése

A következő tételnek (ahol a szekvencia első karakterét jelöli) köszönhetően csökkenteni lehet azt a problémát, hogy két adott karakterlánc között megtalálja a leghosszabb közös szekvenciát (PLSC) két megadott húr között .

Tétel  -  Legyen és legyen két szekvencia, és vagy a leghosszabb közös folytatása és . Ezután:

A három eset , és a teljes, amely lehetővé teszi számunkra, hogy csökkentsék magunkat probléma kisebb méretű.

A leghosszabb közös alszakaszok hossza

Létrehozunk egy kétdimenziós tömböt , amelyben az egyes celláknak tartalmazniuk kell a és közötti PLSC-k hosszát . Ezután lépésről lépésre kiszámíthatjuk az egyes indexpárokat és . Az előző tételből következik a képlet:

A dobozok tartalmának kiszámítása bonyolultan elvégezhető , mivel az egyes dobozok tartalma kiszámítható az előző dobozokból .

Hosszabb közös utószerzés megszerzése

Az előző képlet lehetővé teszi a négyzetek lépésenkénti kiszámítását . Ennek köszönhetően helyreállíthatunk egy hosszabb közös részt.

Ehhez egy útvonalat csinálunk a következő szabály szerint

Érték mezőből :

Az útvonalra példát ad a következő táblázat, amelynek köszönhetően arra következtethetünk, hogy az MJAU az MZJAWXU és az XMJYAUZ közös hosszabb alszekvenciája  :

0 1 2 3 4 5. 6. 7
Ø M Z J NÁL NÉL W x U
0 Ø 0 0 0 0 0 0 0 0
1 x 0 0 0 0 0 0 1 1
2 M 0 1 1 1 1 1 1 1
3 J 0 1 1 2 2 2 2 2
4 Y 0 1 1 2 2 2 2 2
5. NÁL NÉL 0 1 1 2 3 3 3 3
6. U 0 1 1 2 3 3 3 4
7 Z 0 1 2 2 3 3 3 4

Az algoritmus összetettsége

A dobozok tartalmának kiszámítása bonyolultan elvégezhető , mivel az egyes dobozok tartalma kiszámítható az előző dobozokból .

Miután ismert, a PLSC megszerzése bonyolult .

Megjegyzések és hivatkozások

  1. Thomas H. Cormen , Charles E. Leiserson , Ronald L. Rivest és Clifford Stein , Bevezetés az algoritmikába , Dunod ,2002[ a kiadás részlete ], 15.4. fejezet, Dinamikus programozás: a leghosszabb közös részsorozat .

Lásd is

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">