3.6 KiB
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 dokonceO(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 kA[j], a_{i} = (j, I_{i}), I_{i} \geq 0
- tj.
A_{i}[j] = A_{i-1}[j] + I_{i}
, kdeA_{i}
je stav signálu po shlédnuté $i$-té položky ve streamu - více
a_{i}
může postupně inkrementovat jedenA[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 updatyA[j], a_{i} = (j, U_{i})
- tj.
A_{i}[j] = A_{i-1}[j] + U_{i}
, kdeU_{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