Processing math: 100%
Ask Your Question
1

Insert O(1) && ExtractMedian O(1)

asked Dec 9 '14

Ondřej Máca gravatar image

updated Dec 10 '14

Miro Hrončok gravatar image

V zadání je: "Dokažte, že nemůže existovat datová struktura, která má operace Insert a ExtractMedian, jejichž složitost je v nejhorším případě O(1)." Stačilo by říct, že extractMedian lze provést v O(1) jen v poli, které je vždy seřazené a při vkládání je tedy potřeba všechny prvky posunou v O(n) čase? Nebo jak to říct lépe?

Comments

A proč by to muselo být zrovna pole? Klidně to může být nějaký strom a pak vkládání je logaritmické a medián pořád O(1).

Viktor Chlumský (Dec 9 '14)

A napadá tě strom, který by mohl mít medián O(1) a insert O(log n)?

Greg (Dec 9 '14)

Jakýkoliv samovyvažovací BVS s tím že si pamatuju kde má prostředek (a ten samozřejmě při insertu v konstantním čase posouvám).

Viktor Chlumský (Dec 9 '14)

tušil jsem, že to půjde i jinak než přes pole, ale nevěděl jsem (a pořád úplně nevím) jak. I proto jsem se zeptal. Ale jak to teda dokázat? Stačí teda říct, že medián se dá nají v O(1) jen pomocí těchto dvou struktur a v ani jednom případě není insert O(1)?

Ondřej Máca (Dec 9 '14)
1

Jestli stačí říct, že znám jenom dva způsoby jak to udělat a proto samozřejmě nemůže existovat žádný lepší? Ne.

Viktor Chlumský (Dec 9 '14)
see more comments

1 Answer

Sort by » oldest newest most voted
2

answered Dec 10 '14

Jasmes gravatar image

updated Dec 10 '14

Tak ta struktura muze mit uplne libovolne uskupeni, o kterem nevime vubec nic, takze argumentace s polem nebo stromem je chybna.

Pro spor uvazujme, ze takovato mnozina opravdu existuje. Vlozime do ni n prvku v case O(n) a pote vsechny vybereme (zase v case O(n)). Tim jsme dostali serazenou posloupnost n prvku v case O(n), coz je spor s tim, ze umime tridit pouze v nlog(n).


Proc neumime tridit rychleji nez nlog(n)? Counting sort je preci O(n)

Na vstupu jsou libovolne prvky, ktere mezi sebou umime pouze porovnavat a zadne jine informace o nich nemame. Tudiz jejich setrideni je zalozeno na Compare&Exchange. Pokud zname pouze toto, neumime je rychleji setridit, nez nlog(n). Proc nlog(n)? Predstavme si, ze mame rozhodovaci strom, kde listy jsou ruzne posloupnosti. Ruznych posloupnosti je n!. Vzhledem k tomu, ze rozhodovaci strom je uplny binarni strom, jeho vyska je log_2(n!). Ze Stirlingovi formule plyne, ze log(n!) je \Omega(nlog(n)).

Proc dostanu setridenou posloupnost?

Median je prvek, ktery je v polovine setridene posloupnosti. Pokud ho vyjmu, pak dalsim medianem musi byt nutne prvek o jedna nalevo nebo napravo od puvodniho medianu. Neboli pokud je a_i median, tak po jeho vyjmuti je medianem prvek a_{i-1} nebo a_{i+1}. Pro poskladani setridene posloupnosti mi tedy staci pridat novy prvek bud na zacatek, nebo na konec. To se da udelat v O(1) case.

link

Comments

No jo, pěkný důkaz, mně nedošlo, že ExtractMedian ten medián zároveň i vyndá, takže jsem došel jenom k tomu, že by struktura řešila v lineárním čase nalezení mediánu, což ale jde. :)

Viktor Chlumský (Dec 10 '14)
add a comment

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: Dec 9 '14

Seen: 191 times

Last updated: Dec 10 '14