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

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

Слика приказује Топ стабло изграђено од фундаменталног стабла(црни чворови). Стабло је према ивицама подељено на јата и на потпуно ново топ-стабло за њих. Попуњени чворови на врху топ-стабла су јата путања, док мали кружни чворови представљају јата листова. Велики кружни чвор представља корен. Велика слова означавају јата, а мала слова означавају чворове.

Алфабетска листа техничких термина

уреди

Гранични чворови

уреди

Видети #Гранична темена

Гранична темена

уреди

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

Спољашња гранична темена

уреди

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

Јато

уреди

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

Јато путање

уреди

Ако   садржи бар једну ивицу, онда се   назива јато путање.

Јато тачке

уреди

Видети јато листа

Јато листа

уреди

Ако   не садржи ни једну ивицу или   има само једно гранично теме онда се   зове јато листа.

Јато ивице

уреди

Јато које садржи само једну ивицу се назива јато ивице.

Лист јата ивице
уреди

Лист у оригиналном јату који је је представљен јатом са само једним граничним теменом назива се лист јата ивице

Путања јата ивице
уреди

Ивица Јата са два гранична темена се зове путања јата ивице.

Унутрашњи чвор

уреди

Чвор у   \   се назива унутрашњи чвор од  

Путања јата

уреди

Пут измедју граничних темена од   се назива путања јата од   и означава се са  

Спојива јата

уреди

Два јата   и   су спојива ако је   једностран скуп(имају тачно један заједнички чвор) и   је јато.

Увод

уреди

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

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


У принципу, стабло   може имати тежину на својим ивицама.

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

Топ стабло може бити иницијализовано у   времену.  

Стога је топ стабло   по (   ) бинарно стабло за које важи

  • Чворови од   су јата од (    );
  • Листови од   су ивице од  
  • Јата родјаци су комшије у смислу да се секу у једном темену и да их спаја јато, које је њихов родитељ.
  • Корен од   је стабло   само себи, са скупом од највише два спољашња гранична темена.

Стабло са само једним теменом има празно топ стабло, а стабло са само једном ивицом је само појединачан чвор.

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

Динамичке операције

уреди

Следеће три операције су доступне кориснику.

  • Повезивање(в, w): Где су   и   темена у различитим стаблима  1 и  2. Операција враћа једно топ стабло које представља  в  w 
  • Пресецање(в, w): Одваја ивицу   од стабла   са топ стаблом   тиме га претворивши у два стабла  в и  w и враћа два топ стабла  в и  w.
  • Откривање(С): Зове се као подрутина за спровођење највише два упита на топ стаблу.   садржи највише два темена. Првобитна спољашња темнена постају нормална темена, а темена од   постају нова спољашња гранична темена топ стабла. Ако   није празно, операција враћа нови корен јата   са   Откривање({в,w}) је неуспешно ако су темена са различитих стабала.

Унутрашње операције

уреди

Ажурирање стабла се спроводи секвенцом од највише   унутрашњих операција, секвенца која се рачуна у даљем   времену. Може се десити да се у току ажурирања стабла јато листа промени у јато путање и обратно. Допуне на топ стаблу се искључиво врше овим унутрашњим операцијама.

  се ажурира позивањем функције дефинисане од стране корисника, повезане са сваком унутрашњом операцијом.

  • Спајање  Овде су   и   интегрисана јата, операција враћа   као родитељско јато од   и   са граничним теменима као граничним теменима од   рачуна   користећи   и  
  • Раздвајање  Овде је   јато корена   Допуњава   и   користећи   и онда брише јато   из  .

Раздвајање се обично спроводи коришћењем чистих  метода које позивају корисничке методе за ажурирање од   и   користећи   и ажурирање   тако да се зна да нема даље потребе за ажурирањем његове деце. Онда је   одбачено без позивања кориснички дефинисаних функција. Чист метод се често користи зе упите који не треба да се раздвајају. Ако раздвајање не користи подрутину чистог метода, а чист метод је потребан, његов ефекат би могао бити постигнут комбиновањем спајања и раздвајања.

Следеће две функције су аналогне двема претходнима и користе се за базна јата.

  • Направи  прави јато   за ивицу   поставља      се рачуна од нуле.
  • Искорени    је ивично јато   Кориснички дефинисана функција се зове за обраду   и онда је јато   обрисно из топ стабла.

Нелокална претрага

уреди

Корисник може да дефинише Изабери  операције које за јато корена (без листова) бира јато једног његовог детета. Црна кутија топ стабла омогућава Тражи  рутину, која организује изабери упите и реорганизује топ стабло(користећи унутрашње операције) тако да проналази једину ивицу у раскрсници свих одабраних јата. Понекад би претрага требала бити ограничена само на путању. Постоји варијанта нелокалне претраге за ову сврху. Ако постоје два спољашња гранична темена у јату корена  , ивица се тражи само на путањи  . Дозвољено је да се ураде следеће измене: Ако је само једно дете јата корена јато путање, бира се по дифолту без позива изабери операције.

Примери нелокалне претраге

уреди

Проналажење и-те ивице на дужем путу од   до   може да се постигне као  =Откривање({в,w}) праћено са Тражи( ) и са одговарајућом операцијом изабери. За спровођење операције изабери користимо глобалну променљиву која представља   и глобалну променљиву која представља   Операција изабери бира јато   са   ако и само ако је дужина од   најмање  . Како би подржала операцију дужина се мора одржавати у  .

Сличан задатак може бити формулисан за граф са ивицама нејединичне дужине. У том случају даљина може да адресира ивицу или теме између две ивице. Могли би дефинисати операцију изабери тако да се ивица која води до темена враћа у другом случају. Ту би се могло дефинисати ажурирање које повећава дужину свих ивица дуж путањом константе. У том случају ажурирања су извршена у константном времену само у јату корена. Чист метод је потребан како би дистрибуирао одложено ажурирање деце. Чист метод би требао бити позван пре него што је функција тражи позвана. Одржавање дужине у   би у том случају захтевало и одржавање јединичних дужина у  .

Проналажење центра стабла које садржи теме   могло би да се постигне било проналажењем бицентралне ивице, било ивице са центром као једном крајњом тачком. Ивица би могла бити нађена као  =Откривање({в}) праћено са Тражи( ) и погодном операцијом изабери. Операција изабери бира између деце     са   дете са већом максималном дистанцом . Како би подржала операцију максимална дистанца у подстаблу јата са граничним теменом треба да буде одржавана у  . То такодје подразумева одржавање дужине путање јата.

Занимљиви резултати и апликације

уреди

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

  • ([СЛЕАТОР I ТАРЈАН 1983]). Можемо одржати динамичку колекцију отежаних стабала у   времену по спајању и раздвајању, који подржавају упите о максималној тежини ивице између било која два темена у   времену.
    • Доказ контуре: Укључује одржавање максималне тежине путање јата на сваком чвору, ако је јато тачке онда је макс_теж( ) иницијализовано као   Кад је јато унија два јата онда је то максимална вредност два спојена јата. Уколико морамо наћи макс_теж између   и   онда радимо   Откривање  и пријавимо макс_теж 
  • ([СЛЕАТОР I ТАРЈАН 1983]). У случају горе наведене апликације такође можемо додати заједничку тежину   свим ивицама на датој путањи   · · ·  у   времену.
    • Доказ контуре: Уводимо тежину која се назива посебном( ) како би била додана свим ивицама у   Што се адекватно одржава ; раздвајање( ) захтева да за свако дете путање   од   поставимо макс_теж(А) := макс_теж( ) + посебна( ) и посебна( ) := посебна( ) + посебна( ). За   := придружити(   ), поставимо макс_теж( ) := макс {маx_wт( ), макс_теж( )} и посебна( ) := 0. Коначно, да би нашли максималну тежину на путањи   · · ·  поставимо   := Откривање  и враћамо макс_теж( ).
  • ([ГОЛДБЕРГ ЕТ АЛ. 1991]). Можемо тражити максималну тежину у фундаменталним стаблима која садрже дато теме   у   времену.
    • Доказ контуре: Ово захтева одржавање додатне информације о максималној тежини негруписане путање ивице у јату под операцијама спајања и раздвајања.
  • Раздаљина између два темена   и   може бити пронађена у   времену као дужина(Открити ).
    • Доказ контуре: Одржаваћемо дужину ( ) путање јата. Дужина се одржава као максимална тежина са тим да ако је   креирано спајањем, дужина( ) је збир дужина чуван у путањама његове деце.
  • Упити везани за пречник стабла и одржавање његових следбеника захтевају   време.
  • Центар и средишња линија могу да се одржавају под операцијама спајања и раздвајања и испитивани нелокалном претрагом у   времену.
  • Граф би могао бити одржаван дозвољавајући ажурирање скупа ивица и постављање упита на ивице са две везе. Амортизована сложеност ажурирања је  . Упити могу бити спроведени још брже. Алгоритам није тривијалан,   користи   простора ([ХОЛМ, ЛИЦХТЕНБЕРГ, ТХОРУП 2000]).
  • Граф би могао бити одржаван дозвољавајући ажурирање скупа ивица и постављање упита на ивице са две везе. Амортизована сложеност ажурирања је  . Упити могу бити спроведени још брже. Алгоритам није тривијалан,   користи   простора ([ХОЛМ, ЛИЦХТЕНБЕРГ, ТХОРУП 2001]).

Имплементација

уреди

Топ стабло може бити имплементирано на много различитих начина. Неки од њих укључују имплементацију која користи такозвану "вишестепену поделу"(топ стабло и динамички алгоритми са графовима, Јаков Холм и Кристијан де Лихтенберг, технички извештај), или чак користе Слеатор-Тарјан с-т стабла (типично са амортизованим временским оквирима).

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

Коришћење вишеспратне партиције

уреди

Свака подела јата стабла   може бити представљена као јато партиције стабла(ЈПС)   заменом сваког јата у дрвету   са ивицом. Ако користимо стратегију П за партиционисање  , онда ће ЈПС бити ЈПСП . Овај поступак се понавља рекурзивно све док не остане само једна ивица.

Можемо приметити да су сви чворови одговарајућег топ стабла   јединствено мапирани у ивицама ове поделе на више нивоа. У овој подели могу постојати неке ивице које не одговарају ниједном чвору у топ стаблу, и то су ивице које представљају једино дете у нивоу испод. Само ивице које одговарају сложеним јатима одговарају чворовима у топ стаблу .

Стратегија поделе је важна док делимо стабло   на јата. Само пажљива стратегија гарантује да ћемо завршити у једној   висини нивоа вишестепеног партиционисања.

  • Број ивица у наредним нивоима треба смањити за константан фактор.
  • Уколико је нижи ниво измењен ажурирањем, онда би требало да буде у стању да ажурира одмах ниво изнад њега, користећи највећи константан број уметања и брисања.

Претходна стратегија патриционисања обезбедјује одрзавање Топ стабла у   времену.

Референце

уреди
  • Алструп, Степхен; Холм, Јацоб; Лицхтенберг, Кристиан Де; Тхоруп, Миккел (2005). „Маинтаининг информатион ин фуллy дyнамиц треес wитх топ треес”. АЦМ Трансацтионс он Алгоритхмс. 1 (2): 243—264. С2ЦИД 1317. дои:10.1145/1103963.1103966. 
  • Холм, Јацоб; Де Лицхтенберг, Кристиан; Тхоруп, Миккел (2001). „Полy-логаритхмиц детерминистиц фуллy-дyнамиц алгоритхмс фор цоннецтивитy, минимум спаннинг трее, 2-едге, анд бицоннецтивитy”. Јоурнал оф тхе АЦМ. 48 (4): 723—760. С2ЦИД 7273552. дои:10.1145/502090.502095. 
  • Доналд Кнутх. Тхе Арт оф Цомпутер Программинг: Фундаментал Алгоритхмс, Тхирд Едитион. Аддисон-Wеслеy. . 1997. ИСБН 978-0-201-89683-1.  Недостаје или је празан параметар |титле= (помоћ). Сецтион 2.3: Треес, пп. 308-423.
  • Тхомас Х. Цормен, Цхарлес Е. Леисерсон, Роналд L. Ривест, анд Цлиффорд Стеин. Интродуцтион то Алгоритхмс, Сецонд Едитион. МИТ Пресс анд МцГраw-Хилл. . 2001. ИСБН 978-0-262-03293-3.  Недостаје или је празан параметар |титле= (помоћ). Сецтион 10.4: Репресентинг роотед треес, пп. 214-217. Цхаптерс 12-14 (Бинарy Сеарцх Треес, Ред-Блацк Треес, Аугментинг Дата Струцтурес), пп. 253-320.

Додатна литература

уреди
  • „Маинтаининг Информатион ин Фуллy Дyнамиц Треес wитх Топ Треес. Алструп ет ал”. арXив:абс/цс.ДС/0310065  Проверите вредност параметра |арxив= (помоћ). 

Спољашње везе

уреди

Шаблон:ЦС-Стабла