2024-01-24 22:17:22 +01:00
|
|
|
# Data stream algoritmy
|
|
|
|
|
|
|
|
- **streaming algorithm** - vstupem proud dat přicházející postupně po jedné položce
|
2024-01-31 16:30:14 +01:00
|
|
|
- zaměřeny na minulost - spočítat nějakou funkci dat
|
2024-01-24 22:17:22 +01:00
|
|
|
|
|
|
|
+ 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
|