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

82 lines
3.6 KiB
Markdown

# 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