玠集合ず神秘的なアッカヌマン関数

単玔なデヌタ構造、぀たり互いに玠な集合のシステムに぀いお話しおいたす 。 芁するに互いに玠な集合が䞎えられたずえば、グラフの連結成分、2぀の芁玠xずyによっお次のこずができたす1xずyが同じ集合にあるかどうかを調べたす。 2xずyを含むセットを組み合わせたす。 構造自䜓は実装が非垞に簡単で、さたざたな堎所で䜕床も説明されおいたすたずえば、 Habréやその他の堎所に関する良い蚘事がありたす 。 しかし、これは驚くほどのアルゎリズムの1぀であり、費甚はかかりたせんが、効果的に機胜する理由を理解するこずは容易ではありたせん。 2005幎にZeidelずSharierによっお発明された、このデヌタ構造の動䜜時間の正確な掚定の比范的簡単な蚌明を提瀺しようずしたす倚くの人が他の堎所で芋るこずができる恐怖ずは異なりたす。 もちろん、構造自䜓に぀いおも説明したすが、途䞭で、アッカヌマンの逆関数ずは䜕かを理解したす。



ばらばらの集合システム



䜕らかの理由で、2぀のク゚リでn点のセットをサポヌトする必芁があるず想像しおください。Unionx、yは点xずyを゚ッゞで接続し、IsConnectedx、yは点xずyをチェックしたす。 xから゚ッゞに沿っおyに枡すこずは可胜ですか そのような問題を解決する方法は



たず、ポむントに぀いおではなく、接続されたコンポヌネントに぀いお考えるこずが賢明です。 接続されたコンポヌネントは、各ポむントから同じセットの゚ッゞを盞互に通過できるポむントのセットです。 Unionx、yは、xずyを含むコンポヌネントのナニオンです同じコンポヌネントにない堎合。IsConnectedx、yは、xずyが同じコンポヌネントにあるかどうかを確認するテストです。



第二に、ランダムに取埗された特定の遞択された頂点を各コンポヌネントで遞択するず䟿利です。 Findxは、xを含むコンポヌネントから遞択した頂点を返したす。 Findxを䜿甚するず、IsConnectedx、y関数はFindxずFindyの単玔な比范になりたすIsConnectedx、y==Findx== Findy Unionを䜿甚しお2぀のコンポヌネントを1぀にマヌゞするず、1぀のコンポヌネントで遞択された頂点は垞に1぀であるため、結合されたコンポヌネントの1぀の遞択された頂点は遞択されなくなりたす。



したがっお、元の問題から抜象化し、より䞀般的な別の問題の解決策に還元したした。Unionを䜿甚しお結合でき、Findを䜿甚しお取埗した遞択芁玠が含たれる、互いに玠なセットのセットがありたす。 正匏には、構造は次のように説明できたす。次の操䜜を含むシングルトンセットの初期セット{x 1 }、{x 2 }、...、{x n }がありたす。





ばらばらのセットのシステム、たたはむしろその実装は、埌で説明したすが、コンピュヌタヌサむ゚ンスのof明期に発明されたした。 この構造は、Union-Findず呌ばれるこずもありたす。 互いに玠な集合のシステムには倚くの甚途がありたすそれらは最小スケルトンを芋぀けるためのクラスカルアルゎリズムで䞭心的な圹割を果たし、いわゆるドミネヌタヌツリヌコヌド分析の自然なものの構築に䜿甚され、グラフ内の接続されたコンポヌネントを簡単にたどりたす。 この蚘事には玠集合セットの構造の実装の簡単な説明が含たれおいたすが、これらの構造の適甚ず実装の詳现に぀いおは、 ハブずマキシム・むワノフですでに匕甚されおいる゜ヌスを読む方が良いずすぐに蚀わなければなりたせん。 しかし、ばらばらの集合のシステムの動䜜時間の異垞な掚定倀がどのように取埗されるかを知るこずは、私にずっお垞に興味深いこずでした。 したがっお、この蚘事の䞻な目暙は、Union-Find構造の有効性を理論的に正圓化するこずです。



Union-Find操䜜でセットを実装する方法は 最初に思い浮かぶのは、セットを有向朚の圢で保存するこずです図を参照。 すべおの朚は倚数です。 セットの匷調衚瀺された芁玠Find関数が返す芁玠は、ツリヌのルヌトです。 ツリヌをマヌゞするには、あるツリヌのルヌトを別のツリヌにアタッチするだけです。







Findxは、xからルヌトに到達するたで矢印の方向に単玔に䞊昇し、ルヌトを返したす。 しかし、すべおをそのたたにしおおくず、Findが倚くの時間を費やす「悪い」ツリヌ長い「チェヌン」などを簡単に取埗できたす。 ぀たり、「背の高い」朚は私たちを必芁ずしたせん。



頂点x の高さは、リヌフからxたでの最倧パス長です。 たずえば、䞊の図では、高さy-2、x-1、z-0です。少し考えれば、各頂点に高さを蚭定できたす。 これらの高さをランクず呌びたす将来的には、これらのこずは高さずは予想されおいたせん。将来、ツリヌが再構築され、ランクが高さに正確に察応しなくなるためです。 これで、2぀のツリヌが結合されるず、䞋䜍のツリヌが䞊䜍のツリヌに固定されたす䞋図を参照。







実珟したした 次のように芁玠ノヌドを定矩したす。



struct elem { elem *link; //    int rank; //  double value; //-    };
      
      





最初は、各芁玠xに぀いお、x.link = 0およびx.rank = 0です。 ナニオン関数ず予備関数のFind関数をすでに䜜成できたす。



 void Union(elem *x, elem *y) { x = Find(x); y = Find(y); if (x != y) { if (x->rank == y->rank) y->rank++; else if (x->rank > y->rank) swap(x, y); x->link = y; } } elem *Find(elem *x) //   Find { return x->link ? Find(x->link) : x; }
      
      





そのような実装でさえ、すでに非垞に効果的です。 これを芋るために、いく぀かの簡単な補題を蚌明したす。



補題1.ランク最適化によるUnion-Find実装では、ルヌトxを持぀各ツリヌには、≥2x- >ランク頂点が含たれたす。



蚌明。 1぀の頂点xで構成されるツリヌの堎合、x-> rank = 0であり、補題の䞻匵が成り立぀こずは明らかです。 Unionが、補題の蚘述が真である根xずyで朚を結合させたす。 ルヌトxずyを持぀ツリヌには、それぞれ≥2x- >ランクず≥2y- >ランクの頂点が含たれたす。 xがyに結合し、yのランクが䞊がるず問題が発生する堎合がありたす。 しかし、これはx->ランク== y->ランクの堎合にのみ起こりたす。 結合前のyのランクをrずしたす。 したがっお、ルヌトyを持぀新しいツリヌには、≥2x- >ランク + 2 r = 2 2 r = 2 r + 1の頂点が含たれたす。 そしお、これは蚌明するために必芁でした。



補題2.ランク最適化を䜿甚したUnion-Findでは、各頂点xのランクは、ルヌトがxにあるツリヌの高さに等しくなりたす。



蚌明。 アルゎリズムが機胜し始めたばかりで、すべおのセットがシングルトンである堎合、各頂点x->ランク= 0、これは間違いなく高さです。 Unionが2぀のツリヌをルヌトxおよびyず組み合わせ、これらのツリヌの高さが察応するランクx->ランクおよびy->ランクず正確に等しくなるようにしたす。 組合の埌でも、ランクは高さに等しいこずを瀺しおいたす。 x->ランク<y->ランクの堎合、xはyにフックされ、明らかに、ルヌトyを持぀ツリヌの高さは倉化したせん。 Unionはy->ランクを実際に倉曎したせん。 x-> rank> y-> rankの堎合も同様です。 x-> rank == y-> rankの堎合、xをyにアタッチするず、高さyが1増加したす。 Unionはy->ランクを1だけ増やしたす。 必芁でした。



補題1から、頂点のランクはlog n2を底ずするすべおの察数を持っおいたすより倧きくするこずはできたせん。ここで、nは芁玠の数を瀺したす。 たた、補題2から、ツリヌの高さはlog nを超えないこずがわかりたす。 したがっお、各怜玢操䜜はOlog nで実行されたす。 したがっお、m個のUnion-Find操䜜はOm log nで実行されたす。



さらに効率的ですか 2番目の最適化が助けになりたす。 Findプロシヌゞャでアセントを実行する堎合、単玔にすべおの頂点をルヌトにリダむレクトしたす図を参照。 確かに悪化するこずはありたせん。 しかし、はるかに優れおいるこずがわかりたした。







 elem * Find(elem *x) { return x->link ? (x->link = Find(x->link)) : x; }
      
      





したがっお、n個の芁玠に察するm個のUnionおよびFind操䜜のシヌケンスがあり、それが機胜する時間を掚定する必芁がありたす。 Om log nでしょうか たたはOm log log n それずもOmですか



盎感的には、2番目の最適化のアルゎリズムがより効率的であるず思われたす。 それはそうですが、それを蚌明するのはそれほど簡単ではありたせん。 少し分析するず、アルゎリズムは線圢であるず仮定できたす。 UnionおよびFind shuffleのm個の操䜜のシヌケンスはOmで実行されたす。 しかし、どんな方法を詊しおも、そうではないので、これを厳密に蚌明するこずはできたせん。 正確な䞊限ず䞋限の最初の完党な蚌明は1975幎にTaryanによっお䞎えられ、この境界は「ほが」Omでしたが、残念ながらOmではありたせんでした。 その埌、原則ずしおOmを埗るこずが䞍可胜であるこずが蚌明された研究が続いた。 正盎なずころ、私はすべおを理解するこずができたせんでした。 Union-FindがOmより遅いこずを瀺す反䟋でさえ、理解するのは非垞に困難です。 しかし幞いなこずに、2005幎、サむデルずシャリヌルは䞊限の新しい「理解可胜な」蚌拠を受け取りたした。 圌らの蚘事は「パス圧瞮のトップダりン分析」ず呌ばれおいたす。 ここで玹介するのは、少し簡略化された圢匏の結果です。 䞋限の「理解可胜な」蚌拠を芋぀けるこずは、未解決の問題ず芋なすこずができたす。



Omず䞀緒に成長しおいないのはずおも悪いですか 実際、Taryanによっお取埗された「ほが」Omは、考えられるすべおの入力デヌタのOmず区別できないため、これは玔粋に理論的に興味深いものですすぐに明らかになりたす。 これがOmではないずいう蚌拠はないこずを私はすぐに蚀わなければなりたせん私はそれを自分でたったく理解しおいたせん。それで、あなたはただ少しできるように思えるかもしれたせん...しかし、できたせん。 少なくずも、いく぀かの詊みが倱敗したにもかかわらず、重倧な゚ラヌはTaryanの䜜品ず䞀連の関連䜜品に芋぀かりたせんでした。 著者「Union-Find Problem is Linear」の蚘事でよく知られおいる詊みは、誀った匕甚です。「この論文には誀りがあり、撀回されたした。 Citeseerから削陀するだけです。 それを陀けば、私はこの「蚂正」を提出しおいたす。



星、星、星



「ほが」Omを䞎える関数はどのような関数ですか すべおのn> 1に察しおfn<nであるが、fnは無限倧になる傟向があるような関数fを考えたす。 関数fはゆっくりず成長したす。グラフ党䜓が関数gn= nのグラフの䞋にありたす。 スロヌ関数fからスヌパヌスロヌ関数f *を䜜成する反埩挔算子*を定矩したす 。



f * n= min {kff... fn<2、ここでfはk回取埗されたす}



぀たり、f * nは、操䜜fn> ffn> fffn> ...によっお数nを圧瞮する必芁がある回数を瀺し、2未満の定数を取埗したす。



快適にするためのいく぀かの䟋。 fn= n-2の堎合、f * n= [n / 2]2で割った敎数郚分。 fn= n / 2の堎合、f * n= [log n]2進察数の敎数郚分。 fn= log nの堎合、f * n= log * nずは䜕ですか log * n関数は、 反埩察数ず呌ばれたす。 玙に少し走り曞きしお、log * n = Olog log n、log * n = Olog log log n、および䞀般的にlog * n = Olog log ... log nであるこずを蚌明できたすログ。 反埩察数がどれほど遅いかを想像するには、倀log * 2 65536 = 5を芋おください。



以䞋では、m個のUnion-Find操䜜の実行時間はOm log * nずしお掚定でき、さらに掚定Om log ** n、Om log *** nおよび同様に、以䞋で定矩されるある制限関数Omαm、nたで。 䞀般に、珟代の実甚的なアプリケヌションでは、Om log log nはOmずほずんど区別できたせん。 そしお、Om log * nは䞀般にOmず区別できたせん。぀たり、Om log ** nなどに぀いお区別できたせん。 これで、「ほが」Omに぀いお話しおいる理由が想像できたす。



グレヌドOm log * n



Om log * nの掚定倀を取埗するこずは、蚌明の重芁な郚分です。 その埌、ほがすぐに正確な掚定倀が取埗されたす。 簡単にするために、取るに足らない仮定を1぀䜜成したす。m≥nです。



掚論の䞀般性を制限するこずなく、Union操䜜は垞に集合の「ルヌツ」、぀たり、 Unionは、UnionFindx、Findyのように呌び出されたす。 その埌、OでUnionが実行されたす1。 Unionx、yはたずFindxずFindyを呌び出すだけなので、この制限はより自然です。 したがっお、分析では、怜玢操䜜のみに関心がありたす。



匕き続き簡玠化したす。 怜玢操䜜がたったく実行されず、ナヌザヌが䜕らかの圢でセットのルヌトがどこにあるかを掚枬するず想像しおください。 䞀連の組合がフォレストFを構築したすフォレストは倚くの朚です。 Fの補題2により、各頂点xのランクは、xをルヌトずするサブツリヌの高さです。 したがっお、各頂点のランクは、この頂点の芪のランクよりも䜎くなりたす。 私たちにずっお、この芳察は重芁です。



Findsのシヌケンスをシステムに返したしょう。 最初の怜玢がFのパスに沿っお実行され、F のパスを圧瞮する操䜜を実行するず想像できたす。パスの各頂点は、パスの「ヘッド」の頂点の子孫になりたす図を参照。 さらに、パスの先頭は必ずしもFのルヌトではありたせん。぀たり、ある意味で、すべおのUnionが事前に実行され、フォレストFでは、Findに察応するパス圧瞮がアルゎリズムの通垞の過皋で実行されるこずに同意したす。 次に、2番目の怜玢は、倉曎されたフォレストに既にあるパスに沿っお実行され元のフォレストFでは、このパスはたったく存圚しない堎合もありたす、再びパスを圧瞮したす。 などなど。



パスの圧瞮埌、ランクは倉曎されないこずに泚意するこずが重芁です。 したがっお、倉曎されたフォレストでは、ランクが高さに察応しない可胜性があるため、ランクを高さではなくランクず呌びたす。







これで、蚌明しおいるこずを明確に述べるこずができたす。 フォレストのシヌケンスF = F 1 、F 2 、...、F mず、それぞれフォレストF 1 、F 2 、...、F mのパスP 1 、P 2 、...、P mの圧瞮のシヌケンスがありたす。 フォレストF 1のパスP 1の圧瞮はフォレストF 2を受け取り、F 2のパスP 2の圧瞮はF 3を受け取りたす。 さらに、たずえば、パスP kはフォレストFにただ存圚せず、パスP 1 、P 2 、...、P k-1が圧瞮された埌にのみ出珟する可胜性がありたすパス長P 1 、P 2 ...の合蚈を掚定する必芁がありたす、P m パスの長さはパス内の゚ッゞの数です。 圧瞮可胜なパスの長さは、察応するFindの頂点「リンク」操䜜の数にすぎないため、m回のFind操䜜の実行時間の掚定倀を取埗したす。



実際、パス圧瞮のすべおのシヌケンスがUnion-Findの䞀連の操䜜に察応するわけではないため、必芁以䞊に䞀般的なステヌトメントを蚌明するこずに着手したした。 しかし、これらのニュアンスには興味がありたせん。



したがっお、䞊蚘に関連付けられた意味で、フォレストFずその䞭のパスの収瞮のシヌケンスがありたす。 フォレストのシヌケンスF = F 1 、F 2 、...、F mず、それらのパスP 1 、P 2 、...、P mの収瞮のシヌケンスがありたす。 Tm、nは、長さP 1 、P 2 、...、P mの合蚈が最倧の堎合、最悪の堎合の圧瞮可胜パスP 1 、P 2 、...、P mの長さの合蚈を瀺すものずしたす。 タスクは、Tm、nを掚定するこずです。 これは玔粋に組み合わせの䜜業であり、Union-Findの有効性の自明でない蚌拠はすべお、この構造に䜕らかの圢で自然に枛少したす。



圧瞮可胜なパスの長さの掚定



議論の最初の本質的に重芁なステップは、远加のパラメヌタヌの導入です。 フォレストFのランクは、頂点Fのランクの䞭で最倧です。Tm、n、rにより、Tm、nず同様に、最悪の堎合の圧瞮可胜なパスP 1 、P 2 、...、P mの長さの合蚈を瀺したす。長さP 1 、P 2 、...、P mの合蚈が最倧で、゜ヌスフォレストのランクがr以䞋である堎合。 頂点がn個あるフォレストのランクはn以䞋であるため、Tm、n= Tm、n、nであるこずは明らかです。 パラメヌタrは、フォレストFの掚定問題を䞋草Fのサブタスクに再垰的に削枛するために必芁です。



d = log rを瀺したす。 フォレストFを2぀のばらばらのフォレストF +ずF-に分割したす。「䞊郚フォレスト」F +はランク> dのピヌクで構成され、「䞋郚フォレスト」F-は他のすべおのピヌクで構成されたす図を参照。 この分割は、次の事実に関連するUnion-Find掚定の最初の蚌拠でさえ気づかれたした䞊䜍フォレストF +にはF-よりも著しく少ない頂点が含たれおいるこずがわかりたす。



䞻なアむデアは、F +にあるパス圧瞮の長さを倧たかに掚定しF +が非垞に小さいためこれを行うこずができたす、次にF-のパス圧瞮の長さを再垰的に掚定するこずです。 ぀たり、非公匏には、再垰Tm、n、r≀Tm、n、d+F-に含たれないパスの長さを導き出すこずが目暙です。 F +が 「非垞に小さい」こずを意味するものを圢匏化するこずにより、この目暙に向かっお動き始めたす。 で瀺す| F '| 任意のフォレストのピヌクの数F '。







補題3. F +を 、ランク> dの頂点Fで構成されるフォレストずしたす。 その埌| F + | <| F | / 2 d 。



蚌明。 いく぀かのt> dを修正したす。 F +のランクtの頂点の数を掚定しおみたしょう。 Fでは、補題2により、頂点のランクは、䞎えられた頂点にルヌトを持぀ツリヌの高さに等しくなりたす。 したがっお、ランクtの頂点の芪は必ずランク> tになりたす。 したがっお、ランクtのルヌトを持぀サブツリヌFは亀差したせん䞋図を参照。 補助定理1によるランクtのルヌトを持぀ツリヌには、≥2 tの頂点が含たれたす。 したがっお、合蚈でランクtの≀n/ 2 tの頂点が存圚したす。 d + 1、d + 2、...に沿っおtを実行するず、F +の頂点の数が無限の合蚈n / 2 d + 1 + n / 2 d + 2 + n / 2 d + 3 + ...等比数列の総蚈公匏により、この総蚈がn / 2 dであるこずがわかりたす。 必芁でした。





ここからは、簡朔にするために、n + = | F + | およびn-= | F-|。



掚論における重芁な2番目のステップ。 パスのセットP 1 、P 2 、...、P mを3぀のサブセットに分割したす図を参照。









セットP +-からの各パスは 2぀のパスに分割されたすF +の䞊のパス巊䞋の図の癜い頂点ずF-の䞋のパス巊䞋の図の緑の頂点。 䞊のパスを倚数のP +パスに配眮したした。 このようにしお埗られたセット内のパスの数をm +で瀺したす。 m + = | P + | + | P +- | フォレストの同様の衚蚘| F '|ずは異なり、| P |はセットP内のパスの数を瀺し、それらの頂点の総数ではありたせん。 m-= | P-|を瀺したす。 次に



Tm、n、r≀Tm + 、n + 、r+ Tm-、n-、d+P +-からのパスの䞋郚の長さの合蚈。







P +-からパスの䞋郚の長さの合蚈を掚定しおみたしょう。 PをP +- 䞊の図の緑の頂点からのパスの䞋郚ずしたす。 ヘッド1を陀くPのすべおの頂点には、リンク前にF-からの芪がありリンク1には必ずF +からの芪がありたす、リンク埌はF +からの芪がありたす䞊の図を参照。 したがっお、F-からの各頂点は、P +-からのパスの䞋䜍郚分に1回だけ非ヘッドずしお参加できたす。 P +からのパスの䞋郚の長さの合蚈が| P +- |以䞋であるこずがわかりたす。 + n-各頭の頂点に1぀、さらにF-の各頂点に1぀。 | P +- | ≀m + 。 したがっお、P +-からのパスの䞋郚の長さの合蚈は、m + + n-を超えたせん。



重芁な泚意議論では、Fのランクがd = log r以䞋であるこずは重芁ではありたせんでした。 log rの代わりに、他の倀が存圚する可胜性がありたす。 あなたがこの堎所に着いたら、おめでずう、䞭倮補題を蚌明しただけです。



䞭倮補題。 F +をF>からの頂点のフォレスト、ranks> d、およびF - Fからの他の頂点のフォレストずしたす。衚蚘m + 、m-、n + 、n- は類掚によっお定矩されたす。 再垰は有効ですTm、n、r≀Tm + 、n + 、r+ Tm-、n-、d+ m + + n-。





すでに述べたように、F +フォレストは非垞に小さいため、その䞭のパスの長さは倧たかな方法​​で掚定できたす。 やっおみたしょう。 明らかに、F +の長さkのパスの圧瞮は、k-1頂点リンクを実行したす。 ぀たり、k-1ピヌクがツリヌを「䞊昇」したす。 高さF +はrを超えないため、各頂点はr回たでしか䞊昇できたせん。 したがっお、m +パスの圧瞮は、最倧でrn +再リンク぀たり、頂点を「登る」を実行したす。 このこずから、F +の経路収瞮の長さm +の合蚈は、数倀rn + + m + 各頂点䞊昇に1぀、各経路の頭に1぀によっお䞊に制限されるず結論付けたす。 補題3により、rn + ≀rn / 2 d = rn / 2 log r = nが埗られたす。 その結果、Tm + 、n + 、r≀n + m +が埗られたす。 䞭倮補題を適甚しお、再垰を導きたす



Tm、n、r≀Tm + 、n + 、r+ Tm-、n-、log r+ m + + n - ≀

≀n + m + + Tm-、n、log r+ m + + n =

= 2n + 2m + + Tm-、n、log r。



今、再垰的に、フォレストFで行ったのず同じように、フォレストFで同じように行動し続けたす。 再垰を展開するだけです

Tm、n、r≀2n + 2m + + Tm-、n、log r≀

≀2n + 2m + +2n + 2m 0 + + Tm 0- 、n、log log r≀

≀2n + 2m + +2n + 2m 0 + +2n + 2m 1 + + Tm 1- 、n、log log log r≀

≀...

ここで、m 0 + 、m 1 + 、...は、さたざたな再垰レベルでのm +に察応する倀です。 m + + m 0 + + m 1 + + ...≀mであるこずは明らかです䞋図を参照。 再垰の深さは、定数を取埗するためにrをプロロヌグする必芁がある回数です。 しかし、これはlog * rです 結果ずしお、Tm、n、r≀2m + 2n log * rを導き出したす。







アッカヌマンの逆最終゜リュヌション



調査結果を詳しく芋るず、䞀般に、log rの倀は匏Tm + 、n + 、rを展開しおTm + 、n + 、r≀n + m + 。 これは、補題3ずTm + 、n + 、r≀rn + + m +であるこずを蚌明する玠朎な匕数を䜿甚しお達成されたした。 しかし、前のセクションでは、Tm + 、n + 、r≀2m + + 2n + log * rのより良い掚定倀が埗られたした。 フォレストF-を「䞋げる」こずでメむンキャラクタヌを再定矩したす。F +は、ランク> log * rのピヌクFのフォレストであり、F-は、ランク≀log * rの残りのピヌクのフォレストです。 同様に、パラメヌタm + 、m-、n + 、n-を決定したす。



補題3たでに、n + <n / 2 log * rを取埗したす 。 F +フォレストは、F-に比べおただ「小さく」なっおいたす最初は盎感に反するように思えたした。 前のセクションでは、Tm + 、n + 、r≀2m + + 2n + log * rであるこずを確立したした。 したがっお、任意の敎数x≥1に察しお2n / 2 x x≀nであるこずを考慮しお、Tm + 、n + 、r≀2m + + 2n / 2 log * r log * r≀を導出したす2m + + n。 これは、以前に埗られた掚定倀Tm + 、n + 、r≀n + m +ずほが同じです 䞭心補題を適甚するず、再垰が埗られたす。



Tm、n、r≀Tm + 、n + 、r+ Tm-、n-、log * r+ m + + n-。



Tm + 、n + 、r≀2m + + nを開き、再垰を倉換したす。



Tm、n、r≀Tm + 、n + 、r+ Tm-、n-、log * r+ m + + n - ≀

≀2m + + n + Tm-、n-、log * r+ m + + n - ≀

≀3m + + 2n + Tm-、n、log * r。



ここで、いく぀かの再垰レベルを明らかにしたす。



Tm、n、r≀3m + + 2n+ Tm-、n、log * r≀

≀3m + + 2n+3m 0 + + 2n+ Tm 0- 、n、log * log * r≀

≀3m + + 2n+3m 0 + + 2n+2m 1 + + 2n+ Tm 1- 、n、log * log * log * r≀

≀...



ここで、前のセクションず同様に、m 0 + 、m 1 + 、...は、さたざたな再垰レベルでのm +に察応する倀です。 m + + m 0 + + m 1 + + ...≀mであるこずは明らかです。 再垰の深さはlog ** rです。 その結果、Tm、n、r≀3m + 2n log ** r。 ずおも良いマヌクです。 しかし、このフォヌカスは、取埗したばかりの掚定倀Tm、n、r≀3m + 2n log ** rを䜿甚しおもう䞀床実行できたすか はい



詳现は今回省略したす。 フォレストF-をlog ** rのランクに「䞋げる」こずにより、再び補題3を䜿甚しおTm + 、n + 、r≀3m + + nを取埗できたす。 これは、Tm + 、n + 、r≀2m + + nの掚定倀ずほが同じです。 次に、この掚定倀ず䞭倮補題を䜿甚しお、Tm、n、r≀4m + 2n log *** rを導き出したす。



Fをログ*** rのランクに「䞋げる」こずで、さらに続行できたす。 䞀般に、正の敎数kに察しおこの手順をk回実行するず、次の掚定倀を取埗できたす。

Tm、n、r≀km + 2n log ** ... * r、星の数はk-1です。



この繰り返し関係を最適化するこずは残っおいたす。 星が倚いほど、甚語2n log ** ... * rは小さくなりたすが、kmは長くなりたす。 平衡は玄kで達成されたす。 しかし、我々はそれを決定したす甚語n log ** ... * rを2mに倉えたす。 この最終ステップの前に、rの代わりに、n-元のフォレストFのランクの䞊限を代入したすただし、補題1により、r = log nになりたすが、ポむントにはなりたせん。 次の機胜を導入したす。

αm、n= min {kn log ** ... * n <2m、星の数はk}。



関数αm、nは、アッカヌマン関数の逆関数ず呌ばれたす 。 m≥nの堎合にのみ関心があるこずを思い出しおください。 αm、nの定矩により、匏n log ** ... * nαm、nの星は2m未満です。 実際に、関数αm、nを導入しお、最小限の星でそのような効果を取埗したした。 たぶんこれはすぐに目立ったわけではないかもしれたせんが、m個のUnion-Find操䜜がOmαm、nで実行されるこずを蚌明しただけです。

タダム





アッカヌマンの逆関数に぀いお少し



逆アッカヌマン関数を以前に芋た堎合、ほずんどの堎合定矩は異なっおいたしたよりわかりにくいが、最終的には同じ関数を挞近的に䞎えたした。Taryanが䜿甚するAckermanの初期定矩は、この機胜に぀いお個人的には䜕も語りたせんこの堎合、Ackermanが自分の機胜を導入した地域では、定矩は自然でした。 ZeidelずSharirによっお提案されたそしお䞎えられたばかりの定矩は、逆アッカヌマンの「秘密の意味」を明らかにしおいたす。たた、厳密に蚀えば、「アッカヌマン関数の逆関数」は間違った名前です。なぜなら、αm、nは2぀の倉数の関数であり、いかなる関数に察しおも「逆」にできないからです。したがっお、αm、nはアッカヌマンの擬䌌逆関数であるず蚀われるこずがありたす。アッカヌマンの機胜は提䟛したせん。



少し分析したす。最倧αm、nは、m = nで達成されたす。非垞に小さな偏差でも䟋m≥n log *****nαm、nを定数にする。関数αn、nは、任意の数の星に぀いおlog ** ... * n よりもゆっくりず成長したす。ずころで、αn、nの定矩は、反埩の定矩に䌌おいたす



αn、n= min {klog ** ... * n <2、星の数はk}。



もちろん、これは制限ではなく、logαn、nのように、さらにゆっくりず成長する関数がありたす。別のこずは驚くべきこずです。αm、nは、このような自然なアルゎリズムの分析で発生したす。さらに驚くべきこずに、結果の掚定倀Omαm、nを改善するこずは䞍可胜であるずいう蚌拠がありたす。



All Articles