Hant-MekIlorijev algoritam

С Википедије, слободне енциклопедије

U računarstvu, Hant-MekIlrojev algoritam traži rešenje za problem najdužeg zajedničkog podniza. Bio je jedan of prvih neheurističkih algoritama koji je korišćen u diff rutini. Čak i danas, varijacije ovog algoritma se mogu naći u sistemima za kontrolu verzija, viki pretraživačima, i molekularno filogenetičkom istraživačkom softveru.

Samo istraživanje koje je pratilo verziju Unix diff rutine, koju je napisao Daglas MekIlroj, objavljeno je 1976 pod nazivom "Algoritam za diferencijalno upoređivanje fajlova". Na tezi je radio i Džejms V. Hant, koji je napravio originalan prototip diff rutine.[1]

Algoritam[уреди | уреди извор]

Hunt-MekIlrojev algoritam je modifikacija osnovne ideje traženja najdužeg zajedničkog podniza. Algoritam je modifikovan tako da ima manju vremensku i prostornu složenost kada radi sa tipičnim unosima.

Osnovni algoritam za traženje najdužeg podniza[уреди | уреди извор]

Algoritam[уреди | уреди извор]

Neka je Ai i-ti element prvog podniza.

Neka je Bj j-ti element drugog podniza.

Neka je Pij dužina najdužeg zajedničkog podniza za prvih i elemenata prvog podniza i prvih j elemenata drugog podniza.

Primer[уреди | уреди извор]

Neka su A i B nizovi.

Tabela koja pokazuje rekurzivne korake osnovnog algoritma za nalaženje najdužeg zajedničkog podniza.

A se sastoji iz 3 elementa:

  • A1 = a
  • A2 = b
  • A3 = c

B se sastoji iz 3 elemnta:

  • B1 = a
  • B2 = c
  • B3 = b

Koraci koje bi algoritam izvršio pri radu da nađe najduži zajednički podniz su prikazani u dijagramu slike. Algoritam koji ovo radi je sveukupno 2 reda dugačak.

Složenost[уреди | уреди извор]

Ovaj algoritam ima, za najgori slučaj, složenost (pogledati notaciju veliko O)gde je m broj elemenata u nizu A i n broj elemenata u nizu B. Hant-MekIlrojev algoritam vremensku složenost poboljšava na u najgorem slučaju a prostornu složenost na , gde je za prosečan slučaj još efikasniji.

Neophodna poklapanja[уреди | уреди извор]

k-kandidati[уреди | уреди извор]

Hant-MekIlrojev algoritam samo razmatra nešto što su autori nazvali k-kandidatima. K-kandidati su parovi indeksa (i,j) takvi da:

  • Ai = Bj
  • Pij > max(Pi-1,j,Pi,j-1)

Druga stavka pretpostavlja svojstva za k-kandidate:

  • Postoji zajednički podniz dužine k za prvih i elemenata u nizu A i prvih j elemenata u nizu B.
  • Ne postoji zajednički podniz dužine k za manje od i elemenata u nizu A i manje od j elemenata u nizu B.

Povezivanje k-kandidata[уреди | уреди извор]

Dijagram koji pokazuje kako k-kandidati smanjuju vreme i prostor potrebno za nalaženje najdužeg zajedničkog podniza.

Da bi se napravio najduži zajednički podniz iz skupa k-kandidata potrebno je napraviti mrežu sa elementima oba niza na osama. K-kandidati su označeni na ivicama matrice. Podniz može da se formira tako što spajamo tačke preseka u koordinatama, gde je bilo kakvo povećanje u i, praćeno povećanjem u j.

Ovo je ilustrovano na dijagramu sa desne strane.

Crne tačke su one koje bi bile razmatrane od strane osnovnog algoritma, i crne linije su one koje vrše povezivanje kandidata dužine 3.

Crvene tačke su one koje se razmatraju Hant-MekIlrojevim algoritmom i crvena linija je linija koja formira podniz dužine 3.

Vidi još[уреди | уреди извор]

Reference[уреди | уреди извор]

  1. ^ Hunt, James W.; McIlroy, M. Douglas (1976). „An Algorithm for Differential File Comparison” (PDF). Computing Science Technical Report. Bell Laboratories. 41.