FAV-ZCU/KIV PRO/06. In-place a in situ algoritmy.md

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řebuje O(\log n) bitů pro specifikaci indexů do seznamu délky n - 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

  1. 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
  2. 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é
    • 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