Algoritmus streamování je algoritmus pro zpracování sekvence dat v jednom nebo malém počtu průchodů.
Streamové algoritmy řeší problémy, kdy data přicházejí postupně a ve velkém objemu. Příkladem je analýza síťového provozu na straně routeru . Takové problémy ukládají přirozená omezení na dostupnou paměť (mnohem menší než je velikost vstupních dat) a dobu zpracování pro každý prvek sekvence u streamovacích algoritmů. Zpracování dat je často možné pouze v jednom průchodu.
Přísná omezení času a paměti často znemožňují exaktní řešení zkoumaného problému. Algoritmy toku jsou obvykle pravděpodobnostní a poskytují aproximaci přesné odpovědi.
Ačkoli se o takových algoritmech uvažovalo v pracích první poloviny 80. let [1] [2] , koncept streamovacího algoritmu byl poprvé formalizován v práci Alona , Matiase ( eng. Yossi Matias ) a Szegediho ( eng. Mario Szegedy ) v roce 1996 [3] . V roce 2005 byli autoři oceněni Gödelovou cenou za zásadní přínos k algoritmům streamování .
V roce 2005 byl představen koncept semi-streamingového algoritmu [ 4 ] jako algoritmy, které zpracovávají příchozí proud v konstantním nebo logaritmickém režimu.[ upřesnit ] počet průchodů.
V datovém modelu toku se má za to, že část nebo celá sada vstupních dat, která je třeba zpracovat, není k dispozici pro náhodný přístup : vstupní data přicházejí postupně a nepřetržitě v jednom nebo více tocích. Datové toky mohou být reprezentovány uspořádanou sekvencí bodů („aktualizace“), ke kterým lze přistupovat v daném pořadí a pouze jednou nebo v omezeném počtu.
Mnoho publikací s vlákny považuje za úkol počítačové statistiky distribuce dat, která je příliš velká pro efektivní ukládání.[ specifikovat ] . Pro tuto třídu problémů se předpokládá, že vektor (nulově inicializovaný ) má v proudu určitý počet "aktualizací". Cílem takových algoritmů je vypočítat funkce s použitím výrazně menšího prostoru, než by vyžadovalo kompletní reprezentaci vektoru . Existují dva obecné modely pro aktualizaci těchto dat: " pokladna " a " turniket " ( angl . turniket ).
V "hotovostním" modelu je každá "aktualizace" reprezentována ve tvaru a vektor je upraven tak, že se zvýší o nějaké kladné celé číslo . Zvláštní případ je případ (je povoleno vložit pouze jednu jednotku).
V modelu "turniket" je každá "aktualizace" reprezentována ve tvaru a vektor je upraven tak, že se zvětší o nějaké kladné nebo záporné celé číslo . V přísném modelu nemůže být v žádném okamžiku negativní.
V řadě zdrojů se navíc uvažuje s modelem „slide-window“. V tomto modelu je zájmová funkce počítána přes okno omezené dimenzionality z dat toku, prvky z konce okna se neberou v úvahu, dokud je nenahradí nová data z toku.
Tyto algoritmy berou v úvahu nejen problémy související s frekvenčními charakteristikami dat, ale také řadu dalších. Mnoho problémů na grafech se řeší za podmínky, že matice sousednosti grafu je předem načtena v nějakém neznámém pořadí. Někdy je naopak nutné vyřešit problém s odhadem pořadí dat, například spočítat počet převrácených hodnot v proudu a najít největší rostoucí sekvenci.
Hlavní vlastnosti streamovacích algoritmů:
Tyto algoritmy mají mnoho společného s online algoritmy , protože algoritmus se musí rozhodnout dříve, než jsou k dispozici všechna data, ale existují rozdíly. In-line algoritmy mají zejména schopnost zpozdit rozhodování, dokud nepřijde skupina bodů v posloupnosti dat, zatímco online algoritmy se musí rozhodovat při příchodu každého nového bodu v posloupnosti.
Pokud je algoritmus přibližný, pak je dalším ukazatelem přesnost odpovědi. Přesnost algoritmu je často reprezentována jako hodnota , což znamená, že algoritmus dosáhne menší chyby s pravděpodobností .
Streamové algoritmy mají velký význam v úlohách monitorování a správy počítačových sítí, např. jejich pomocí lze rychle zabránit přetečení (sledování obřích toků odhadování počtu a předpokládané doby přetečení) [ ] Algoritmy streamování lze také použít v databázích, například k odhadu velikosti po operaci spojení tabulky .
Moment té frekvence ve vektoru je definován jako .
První moment je prostý součet frekvencí (tedy celkový počet). Druhý bod je užitečný pro výpočet statistických parametrů dat, jako je Giniho koeficient . definována jako frekvence nejčastěji se vyskytujícího prvku.
Studovány jsou také otázky odhadu frekvenčních momentů.
Úkolem je najít nejčastěji se vyskytující prvek v datovém toku. Zde platí následující algoritmy:
Trendování v datovém toku se obvykle provádí v následujícím pořadí: nejčastější prvky a jejich frekvence jsou určeny na základě jednoho z výše uvedených algoritmů.[ objasnit ] <--algoritmy pro hledání těžkých prvků? a pokud se tato sekce posune níže?-->, a pak se největší nárůst vzhledem k předchozímu časovému bodu zaznamená jako trend. K tomu se používá exponenciální klouzavý průměr a různé normalizace [6] . Používá prostor O(ε² + log d) a aktualizaci O(1) v nejhorším případě pro univerzální hašovací funkci z rodiny nezávislých hašovacích funkcí r-smart s r = Ω(log(1/ε)/ log log(1 / ε))[ specifikovat ] .
Empirický odhad entropie přes soubor frekvencí je definován jako , kde [7] .
Hlavním úkolem online strojového učení je trénovat model (například klasifikátor) jedním průchodem trénovací sadou; k jeho používá prediktivní hašování a gradient
Dalším je počítání počtu jedinečných prvků v datovém toku (moment ) .[ objasnit ] dobře prostudovaný problém. První algoritmus navrhli Flajolet a Martin [2] . V roce 2010 byl nalezen asymptoticky optimální algoritmus [8] .