Дисјунктни-сет (структура података) — разлика између измена
Садржај обрисан Садржај додат
Нема описа измене |
м Разне исправке; козметичке измене |
||
Ред 1:
{{МАТФ032014}}
[[
[[
Дисјунктни-сет
Алгоритам за проналажење скупова је алгоритам који обавља две корисне операције на такве структуре података:
# Пронађи: Одређује у ком се подскупу налази неки елемент. Ово може да се користи за одређивање да ли су два елемента у истом подскупу.
# Унија: Спаја два подскупа у један подскуп.
Још једна битна операција је НаправиСкуп, која прави скуп који се састоји од задајућег елемента, другачије назван "синглтон".
У циљу прецизније дефинисати ове операције, потребан је неки начин представљања.Један уобичајен приступ је да изаберете фиксни елемент сваког скупа,
који ће бити представник тог скупа, да представља скуп као целину. Затим, Пронађи(к) враћа представника скупа у ком се налази к,
а Унија узима представнике два скупа као своје аргументе.
'''<big>Дисјунктни-сет у повезаним листама</big>'''
Једноставан приступ креирању Дисјунктни-сет структури је да се створи
за свог представника. НаправиСкуп креира листу
пролази листу уназад од датог елемента на врху листе. Ово се може избећи, укључујући у сваком чвору повезане листе показивач на почетак (чело) листе.
Онда је операцији Пронађи потребно константно време, јер овај показивач показује директно на представника скупа. Међутим, Унија сада мора да ажурира
сваки елемент у листи и сада је њој потребно линеарно време.
Ред 41:
xRoot.parent := yRoot
У овом наивном облику, овај приступ није ништа бољи од приступа повезаних листа, јер дрво може да буде веома
Први начин који се зове унија по ранковима је да се увек мање дрво надовезује на корен већег дрвета. У контексту овог алгоритма, термин ранк се користи уместо дубине.
Дрвећа са једним елементом су дефинисана да им је ранк 0 и када год се два дрвета која имају исти ранк "р" споје, резултат ранка је "р+1".
Само применом ове технике најгоре време извршавања је О(лог н) за било коју од 3 наведене операције (НаправиСкуп, Унија или Пронађи).
Ред 66:
xRoot.rank := xRoot.rank + 1
Ове две технике комплеметнирају једна другу. Прмењују се заједно време за рад је само <math>O(\alpha(n))</math>, where <math>\alpha(n)</math> is the [[inverse function|inverse of the function]] <math>n = f(x) = A(x,x)</math>, and <math>A</math>
У ствари, ово је [[асимптотски оптималан]] : [[Michael Fredman|Fredman]] и Saks су показали 1989. да <матх> \ омега (\ алпха (н)) </ матх> речи морају бити приступљене '' било ''ком дисјунктном-скупу структура података по операцији у просеку <ref> {{ Citation |first=M. |last=Fredman |authorlink=Michael Fredman |first2=M. |last2=Saks |title=The cell probe complexity of dynamic data structures |journal=Proceedings of the Twenty-First Annual ACM Symposium on Theory of Computing |pages=345–354 |date=May 1989 |quote=Theorem 5: Any CPROBE(log ''n'') implementation of the set union problem requires Ω(''m'' α(''m'', ''n'')) time to execute ''m'' Find's and ''n''−1 Union's, beginning with ''n'' singleton sets. }} </ref>
Ред 78:
Док су идеје које су се користиле у дисјунктивним-сет шумама дуго били познате, [[Robert Tarjan]] је био први који је доказао горње границе (и ограничена верзију доње границе) у смислу инверзности [[Ackermann function]], 1975. <ref>{{cite journal |last1=Tarjan |first1=Robert Endre |author1-link=Robert E. Tarjan |year=1975 |title=Efficiency of a Good But Not Linear Set Union Algorithm |journal=Journal of the ACM |volume=22 |issue=2 |pages=215–225 |url=http://portal.acm.org/citation.cfm?id=321884 |doi=10.1145/321879.321884 }}</ref>
До тода, најбоља граница за време по операцији, доказано од стране [[John Hopcroft|Hopcroft]] и [[Jeffrey Ullman|Ullman]],<ref>{{cite journal |last1=Hopcroft |first1=J. E. |author1-link=John Hopcroft |last2=Ullman |first2=J. D. |author2-link=Jeffrey Ullman |year=1973 |title=Set Merging Algorithms |journal=SIAM Journal on Computing |volume=2 |issue=4 |pages=294–303 |doi=10.1137/0202024}}</ref>
био је доказ
[[Robert E. Tarjan|Tarjan]] и [[Jan van Leeuwen|Van Leeuwen]] су такође развили један
2007. Године Sylvain Conchon и Jean-Christophe Filliâtre су развили ''упорну структуру података'' [[persistent data structure|persistent]]
верзија структуре података дисјунктних-сет шума, омогућавајући претходну верзију структуре да се ефикасно задрже, формализовају његову
== Повезани линкови ==
|