1.9 KiB
1.9 KiB
In-place a in situ algoritmy
In-place algoritmus
- narozdíl od data stream algoritmu se předpokládá vstup v poli
- transformuje datové struktury s užitím malé,
O(1)
dodatečné paměti - vstup během chodu programu obvykle přepsán výstupem
Příklady
- otočení řetězce
In situ algoritmus
- někdy do in-place řazeny také algoritmy, které potřebují kromě vstupního pole
O(\log n)
extra paměť - pro omezená data sice pointer potřebuje
O(1)
paměť, ale pro libovolně velká data potřebujeO(\log n)
bitů pro specifikaci indexů do seznamu délkyn
- obvykle se toto ale ignoruje - tyto algoritmy někdy označovány jako in situ
Výhody in-place a in situ
- jde zpracovat větší datové množiny
- větší lokalita reference - vhodné pro paměťové hierarchie
- méně náchylné k selhání - nevyžaduje velké objemy paměti
- hodně velké datové množiny často na discích - pomalý náhodný přístup, levná dodatečná paměť, lokalita reference pak důležitější než objem dostatečné paměti
Příklady
- Willardův 2D dělicí strom
- konvexní obálky
- Grahamovo prohledávání
In-place a in situ sorting
- spojité pole
- konstantní čas na přístup a prohození, dlouhý čas na posuvy
- pokud ignorujeme
O(\log n)
na pointery:- heapsort - ano, konstantní dodatečná paměť
- quicksort - in situ,
O(\log n)
paměť na rekurzi - mergesort - ne
- zřetězené seznamy
- vyhledávání podle indexu
O(n)
- quicksort a heapsort
- nutné drastické modifikace, aby alespoň
O(n^2)
- pro tento druh algoritmů zřetěz. seznamy nevhodné
- nutné drastické modifikace, aby alespoň
- mergesort
O(n \log n)
čas,O(\log n)
dodatečná paměť- krok merge se sřetězenými seznamy lehčí než s poli
- mergesort s poli - dobrá lokalita reference, pro data na disku lepší než jiné algoritmy
- vyhledávání podle indexu