Суфиксно стабло

С Википедије, слободне енциклопедије
Суфиксно стабло за стринг BANANA. Сваки подстринг се завршава симболом $. Путање од корена до листа одговарају суфиксима (6 суфикса - 6 путања) A$, NA$, ANA$, NANA$, ANANA$ и BANANA$. Бројеви у листовима означавају почетну позицију одговарајућег суфикса.

Суфиксно стабло представља структуру података која описује интерну структуру стринга (ниске) на врло исцрпан начин. Суфиксно стабло може да се употреби да би се решио проблем тачног тражења за линерано време (постижући исту сложеност у најгорем случају коју су постигли алгоритми КМП (Кнутх-Моррис-Пратт) и Бојер-Мур (Боyер-Мооре), али њихова предност је у могућности примене у алгоритмима линеарне сложености за проблеме са стринговима сложенијим од тачног тражења. Штавише, суфиксна стабла обезбеђују мост између проблема тачног тражења и приближног тражења.

Историја[уреди | уреди извор]

Аутор првог алгоритма за конструкцију суфиксних стабала линеарне временске сложености је Вајнер (Wеинер) 1973. године, при чему је он за то стабло користио термин стабло позиција. Другачији, и што се тиче штедње простора приликом градње суфиксних стабала бољи алгоритам, дао је МекКрејт (МцЦраигхт) неколико година касније. Након тога, Уконен (Укконен) је развио концептуално другачији линерани алгоритам за изградњу суфиксних стабала који има све предности МекКрејтовог алгоритма (а детаљнија анализа показује да се он може сматрати варијантом МекКрејтовог алгоритма), али нуди много једноставније објашњење.

Ови алгоритми су линеарне временске сложености за азбуке константне дужине, и у најгорем случају имају временску сложеност . Фарах (Фарацх) је 1997. осмислио први алгоритам за конструкцију суфиксних стабала који даје оптималне резултате за азбуке било којих величина. Фарахов алгоритам је постао основа за све новије алгоритаме за конструкцију суфиксних стабала и низова.

Дефиниција[уреди | уреди извор]

Суфиксно стабло за стринг дужине знакова је коренско оријентисано стабло са тачно листова нумерисаних од до . Сваки унутрашњи чвор различит од корена има најмање два сина и свака грана је означена непразним подстрингом за . Никоје две гране које излазе из чвора не могу да имају ознаке гране које почињу истим знаком. Пошто не постоји суфиксно стабло које задовољава дату дефиницију за све стрингове, на се додаје један знак за крај, који није у алфабету, најчешће A$. Овим се осигурава да ни један суфикс коначног стринга не може да буде префикс ни једног другог суфикса. Кључна особина код суфиксних стабала је та, да за сваки лист , конкатенација ознака грана на путу од корена до листа , је једнака суфиксу који почиње на позицији . Односно, да је .

Уопштено суфиксно стабло[уреди | уреди извор]

Уопштено суфиксно стабло је суфиксно стабло за више речи и садржи све суфиксе из те групе речи. Свака реч у оваквом стаблу мора бити завршена различитим терминалним симболом или речју.

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

За азбуке константне величине, сложеност алгоритма суфиксног стабла дужине је . За случај велике азбуке сложеност се повећава на .

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

За суфиксно стабло стринга дужине , или генерализовано суфиксно стабло низа стрингова укупне дужине може се:

  • Претраживати
    • Да ли је стринг дужине подстринг, за време .
    • Пронаћи прво појављивање секвенце стрингова укупне дужине као подстрингова, за време .
    • Пронаћи свих з појављивања секвенце стрингова укупне дужине као подстрингова, за време .
    • Тражити регуларни израз П за време линеарно .
    • За сваки суфикс секвенце , наћи дужину најдужег поклапања префикса из са , за време . Ово се назива статистика поклапања за
  • Тражити својства стрингова
    • Наћи најдужи заједнички подстринг стрингова и за време .
    • Наћи ЛЗW декомпозицију за време .
    • Наћи најдуже понављајуће подстрингове за време .
    • Наћи најпонављаније стрингове одредјене дужине за време .
    • Наћи најкраће стрингове из који се не појављују у , за време , ако постоји таквих стрингова.
    • Наћи најкраће подстрингове који се појављују само једном за време .
    • Наћи, за свако , најкараћи подстринг који се не појављује нигде другде у за време .

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

Суфиксна стабла имају сироку примену у решавању проблема при едитовању и претрази текста, компјутерској биологији и другим областима. Нека од примарних поља примене су:

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

Једно од основних поља примене суфиксних стабала је биоинформатика. Проучавање генома је у највећој мери засновано на претраживању стрингова и налажењу одређених узорака у оквиру њих. Суфиксна стабла се такодје примењују на пољу компресије података и неке врсте ЛЗW компресије користе суфиксна стабла (ЛЗСС).

Конструкција суфиксног стабла[уреди | уреди извор]

Еско Уконен (Еско Укконен) је направио алгоритам за конструкцију суфиксног стабла у линеарном времену који је концептуално најлакши алгоритам за конструкцију у линеарном времену.

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

Основна структура Уконеновог алгоритма[уреди | уреди извор]

Konstruiše stablo 
for i=1 to m-1
begin {faza i+1 }
      for j=1 to i+1
            begin {produženje j}
            Polazeći od korena nalazi se kraj puta označenog sa u tekućem stablu.
            Ako je potrebno, taj put se produžava dodavanjem znaka ,
            i time osigurava da je string u stablu.
      end;
end;

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

Литература[уреди | уреди извор]