Sobes.tech
Junior — Middle

Paaiškinkite Knuth-Morris-Pratt subeilės paieškos algoritmo veikimo principą.

sobes.tech AI

Atsakymas iš AI

Knuth-Morris-Pratt (KMP) algoritmas yra sukurtas ieškoti subeilės tekste linijiniu laiku, išvengiant pasikartojančių simbolių palyginimų.

Pagrindinė idėja yra iš anksto apskaičiuoti subeilės prefikso funkcijų masyvą (arba "π-masyvą"), kuris rodo, kiek simbolių sutampa su subeilės pradžia nesėkmingo palyginimo metu. Tai leidžia nesusitaikius, negrįžti į pradžią tekste, o perkelti subeilę į optimalią poziciją.

Pavyzdys:

  • Tekstas: "ABABDABACDABABCABAB"
  • Ieškoma subeilė: "ABABCABAB"

Algoritmas pirmiausia sukuria prefikso funkciją subeilės, tada pereina per tekstą, lygindamas simbolius. Nesutapimo atveju naudoja prefikso funkciją, kad nustatytų, nuo kurio simbolio tęsti palyginimą, nesikartojant nuo pradžios.

Tai užtikrina O(n + m) sudėtingumą, kur n yra teksto ilgis, m — subeilės ilgis, ir yra efektyvesnis nei naivus paieškos metodas.