A kétirányú szélességi (vagy mélységi) keresés [1] [2] egy kifinomult szélességi (vagy mélységi ) keresési algoritmus , amelynek az az ötlete, hogy keresési folyamatot hozzon létre a kezdeti ( előre keresés ) és a végső csúcsból ( fordított keresés ) keresés ) a grafikonon .
A kívánt útvonal megtalálása a kezdeti szakasztól valamilyen közteshez, és onnan a végső csúcsig vezető utak meghatározásához vezet. Az egyik vagy mindkét folyamat ellenőrzésével valósítható meg, amikor az egyik keresési fa levele megegyezik egy másik levelével, majd kivonja az adott elemhez vezető útvonalakat. Az utakat összekötve megkapjuk a kívánt utat. Ha két keresést párhuzamosan hajtanak végre , az egyirányú kereséshez képest még több időt takarít meg a kívánt útvonal eléréséhez.
A teljes algoritmus összetettségét az előre és visszafelé irányuló keresések összetettségének összegeként becsüljük meg, a tagsági ellenőrzés egy művelettel egyenlő, az állandó idő (O (n)), a hash táblához való hozzáférés .
Túlságosan az adott helyzettől függ, ha a keresés nem n-áris fán történik .
A kétirányú keresés egyetlen kezdő és záró elem mellett javíthatja az egyirányú szélesség-első keresést, jellemzően 2-szeresére. A kétirányú keresés legnehezebb esete egy olyan probléma, amelyben csak néhány (esetleg nagyon nagy) célállapot-halmaz implicit leírását adjuk meg a cél ellenőrzésére, például a „sakk” cél sakkmattájának megfelelő összes állapotot. " a sakkban . Fordított keresésnél szükség lenne minden olyan állapot kompakt leírására, amely lehetővé teszi a sakkmattot mozgásokkal stb.; és ezeket a leírásokat össze kellene vetni a közvetlen keresés által generált állapotokkal. Nincs általános módszer egy ilyen probléma hatékony megoldására.
Az algoritmus a következőkből áll:
A megvalósítás bonyolultsága a fordított keresési algoritmusban rejlik.
Grafikon keresési algoritmusok | ||
---|---|---|
Tájékozatlan módszerek | ||
Tájékozott módszerek | ||
Parancsikonok | ||
Minimálisan átívelő fa | ||
Egyéb |