In-place algoritmus
In-place algoritmus je algoritmus, který transformuje datové struktury za pomocí malého a především konstantního množství paměti navíc. Předpokládá se, že veškeré zpracování dat proběhne v prostoru, kde jsou uložena vstupní data. Opak těchto algoritmů je not-in-place nebo také out-of-place algoritmus.
Příklad
Mějme a
, n - prvkové pole čísel. Úkolem je zreorganizovat pole tak, aby obsahovalo prvky v opačném pořadí. Nabízející se metodou je vytvořit pomocné pole b
, v němž se postupně vytvoří reorganizovaná verze vstupního pole. Ta je pak zkopírována do původního pole a .
function reverse(a[0..n - 1]) allocate b[0..n - 1] for i from 0 to n - 1 b[n − 1 − i] := a[i] return b
Tento algoritmus ale potřbuje O(n) pracovní paměti pro pole b. Proto to není in-place algoritmus.
Úlohu lze ale řešit i lépe. Veškeré změny lze provádět přímo na vstupních datech. Zde konkrétně stačí jedna pomocná proměnná,která umožní vyměňovat čísla přímo v poli.
function reverse_in_place(a[0..n-1]) for i from 0 to floor((n-2)/2) tmp := a[i] a[i] := a[n − 1 − i] a[n − 1 − i] := tmp
Tento algoritmus už má jen konstantní požadavky na paměť bez ohledu na velikost vstupu. Jedná se tedy o in-place algoritmus.
Třídící algoritmy
Jednou z nejčastějších aplikací in-place algoritmů jsou algoritmy řazení. Z používaných algoritmů jsou některé in-place a jiné ne.