FAV-ZCU/KIV PRO/05. Data stream algoritmy.md

3.6 KiB

Data stream algoritmy

  • streaming algorithm - vstupem proud dat přicházející postupně po jedné položce
  • zaměženy na minulost - spočítat nějakou funkci dat
  • oproti tomu online algoritmy - jak naše rozhodnutí ovlivní budoucnost
  • vypadá snadné, ale nemáme místo na všechna data, jen O(\log n) nebo dokonce O(1) paměti
  • data stream - data přicházejí rychle, takže
    • obtížné předat je programu všechna
    • obtížné spočítat složitější funkce na velkých částech vstupu
    • obtížné je dočasně nebo trvale ukládat
  • neformálně: streaming zahrnuje
    • malý počet průchodů daty (obvykle jeden)
    • sublineární paměť
    • sublineární čas na výpočet (někdy)
  • podobné dynamickým, online, aproximačním nebo randomizovaným algoritmům, ale s více omezeními
  • nesměšovat s algoritmy pro vnější paměť
    • tam data v souborech, pomalé, ale přes všechny potíže se k nim lze dostat opakovaně, ukládat atd.

Jak zvládat taková data?

  • paralelizace
    • často vysoce paralelizovatelné úlohy, kromě ukládání
  • řízení datové rychlosti vzorkováním
    • experimenty s částicemi s vysokou energií v CERNu (TB/s dat redukováno HW v reálném čase na GB/s)
  • zaokrouhlení datových struktur na bloky
    • např. hledání podvodů v telefonní síti - užití grafu až do velikosti 1 dne a srovnávání s přechozím dnem
  • hierarchická detailní analýza
  • kladení si imaginativních otázek
    • může přinést nová řešení

Aplikace

  • sítě
    • např. routery - sledují pakety, cca milión za sekundu, moc velké na uložení, ale chceme spočítat např. kam jdou, kde odmítány služby atd.
  • databáze
    • sledování updatů a dotazů, chceme statistiku, např. které položky nejčastěji požadovány atd.

Typická úloha

  • stream permutovaných čísel z \{1\dots n\}, jedno vyřazeno, uhodnutí které

Data stream modely

Vstupní data a_{1}, a_{2}, \dots přicházejí sekvenčně, prvek po prvku, a popisují signál A, 1D funkci A:[1\dots N] \to R.

Modely se liší způsobem popisu A.

Time Series Model

  • a_{i} = A[i], objevují se v rostoucím pořadí i
  • vhodný model pro časové pospoupnosti, kde např. sledujeme provoz na IP adrese každých 5 minut, objem burzovních obchodů každou minutu apod.

Cash Register Model

  • a_{i} jsou inkrementy k A[j], a_{i} = (j, I_{i}), I_{i} \geq 0
  • tj. A_{i}[j] = A_{i-1}[j] + I_{i}, kde A_{i} je stav signálu po shlédnuté $i$-té položky ve streamu
  • více a_{i} může postupně inkrementovat jeden A[j]
  • patrně nejpopulárnější model pro aplikace typu monitorování IP adres, které přistupují k webserveru - mohou přistupovat vícekrát

Turnstile Model

  • a_{i} jsou updaty A[j], a_{i} = (j, U_{i})
  • tj. A_{i}[j] = A_{i-1}[j] + U_{i}, kde U_{i} může být kladné i záporné
  • nejobecnější model pro apliakce typu sledování cestujících v podzemce - turniket sleduje přicházející i odcházející
  • vhodné pro plně dynamické úlohy
  • těžké získat nějaké řešení v tomto modelu
  • někdy A_{i}[j] \geq 0 - strict Turnstile model
    • tj. lidé odcházejí jen tím turniketem, kterým přišli
  • naopak non-strict Turnstile model
    • A_{i}[j] < 0 pro nějaké i: např. signál nad rozdílem dvou cash registerových streamů

Příklady

  • náhodné vzorkování s rezervoárem
  • iceberg queries
  • počet vzájemně různých položek
  • konstrukce shluků (clusterů) bodů

Data stream řešení

  • sticky sampling
  • lossy counting

Zlepšení

  • sample and count
  • lossy counting