Пређи на садржај

Хант-МекИлоријев алгоритам

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

У рачунарству, Хант-МекИлројев алгоритам тражи решење за проблем најдужег заједничког подниза. Био је један оф првих нехеуристичких алгоритама који је коришћен у дифф рутини. Чак и данас, варијације овог алгоритма се могу наћи у системима за контролу верзија, вики претраживачима, и молекуларно филогенетичком истраживачком софтверу.

Само истраживање које је пратило верзију Униx дифф рутине, коју је написао Даглас МекИлрој, објављено је 1976 под називом "Алгоритам за диференцијално упоређивање фајлова". На тези је радио и Џејмс V. Хант, који је направио оригиналан прототип diff рутине.[1]

Алгоритам[уреди | уреди извор]

Хунт-МекИлројев алгоритам је модификација основне идеје тражења најдужег заједничког подниза. Алгоритам је модификован тако да има мању временску и просторну сложеност када ради са типичним уносима.

Основни алгоритам за тражење најдужег подниза[уреди | уреди извор]

Алгоритам[уреди | уреди извор]

Нека је Аи и-ти елемент првог подниза.

Нека је Бј ј-ти елемент другог подниза.

Нека је Пиј дужина најдужег заједничког подниза за првих и елемената првог подниза и првих ј елемената другог подниза.

Пример[уреди | уреди извор]

Нека су А и Б низови.

Табела која показује рекурзивне кораке основног алгоритма за налажење најдужег заједничког подниза.

А се састоји из 3 елемента:

  • А1 = а
  • А2 = б
  • А3 = ц

Б се састоји из 3 елемнта:

  • Б1 = а
  • Б2 = ц
  • Б3 = б

Кораци које би алгоритам извршио при раду да нађе најдужи заједнички подниз су приказани у дијаграму слике. Алгоритам који ово ради је свеукупно 2 реда дугачак.

Сложеност[уреди | уреди извор]

Овај алгоритам има, за најгори случај, сложеност (погледати нотацију велико О)где је м број елемената у низу А и н број елемената у низу Б. Хант-МекИлројев алгоритам временску сложеност побољшава на у најгорем случају а просторну сложеност на , где је за просечан случај још ефикаснији.

Неопходна поклапања[уреди | уреди извор]

к-кандидати[уреди | уреди извор]

Хант-МекИлројев алгоритам само разматра нешто што су аутори назвали к-кандидатима. К-кандидати су парови индекса (и,ј) такви да:

  • Аи = Бј
  • Пиј > маx(Пи-1,ји,ј-1)

Друга ставка претпоставља својства за к-кандидате:

  • Постоји заједнички подниз дужине к за првих и елемената у низу А и првих ј елемената у низу Б.
  • Не постоји заједнички подниз дужине к за мање од и елемената у низу А и мање од ј елемената у низу Б.

Повезивање к-кандидата[уреди | уреди извор]

Дијаграм који показује како к-кандидати смањују време и простор потребно за налажење најдужег заједничког подниза.

Да би се направио најдужи заједнички подниз из скупа к-кандидата потребно је направити мрежу са елементима оба низа на осама. К-кандидати су означени на ивицама матрице. Подниз може да се формира тако што спајамо тачке пресека у координатама, где је било какво повећање у и, праћено повећањем у ј.

Ово је илустровано на дијаграму са десне стране.

Црне тачке су оне које би биле разматране од стране основног алгоритма, и црне линије су оне које врше повезивање кандидата дужине 3.

Црвене тачке су оне које се разматрају Хант-МекИлројевим алгоритмом и црвена линија је линија која формира подниз дужине 3.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ Хунт, Јамес W.; МцИлроy, M. Доуглас (1976). „Ан Алгоритхм фор Дифферентиал Филе Цомпарисон” (ПДФ). Цомпутинг Сциенце Тецхницал Репорт. Белл Лабораториес. 41.