A streaming algoritmus egy adatsor feldolgozására szolgáló algoritmus egy vagy kis számú lépésben.
Az adatfolyam-algoritmusok olyan problémákat oldanak meg, amelyekben az adatok szekvenciálisan és nagy mennyiségben érkeznek. Példa erre a hálózati forgalom elemzése az útválasztó oldalán . Az ilyen problémák természetes korlátozásokat írnak elő a rendelkezésre álló memóriára (sokkal kisebb, mint a bemeneti adatok mérete) és a feldolgozási időre a streaming algoritmusok sorozatának minden elemére vonatkozóan. Az adatfeldolgozás gyakran csak egy menetben lehetséges.
Az idő és a memória szigorú korlátozása gyakran lehetetlenné teszi a vizsgált probléma pontos megoldását. Az áramlási algoritmusok általában valószínűségiek, és közelítést adnak a pontos válaszhoz.
Bár az 1980-as évek első felében foglalkoztak ilyen algoritmusokkal [1] [2] , a streaming algoritmus fogalmát először Alon , Matias ( eng. Yossi Matias ) és Szegedi ( eng. Mario ) munkáiban formalizálták. Szegedy ) 1996 -ban [3] . 2005-ben a szerzőket Gödel-díjjal jutalmazták a streaming algoritmusokhoz való alapvető hozzájárulásukért .
2005-ben bevezették a félig streaming algoritmus fogalmát [ 4 ] , mint olyan algoritmusokat, amelyek a bejövő adatfolyamot konstans vagy logaritmikus formában dolgozzák fel.[ pontosítás ] passzok száma.
Az adatfolyam-adatmodellben figyelembe veszik, hogy a feldolgozandó bemeneti adatok egy része vagy egésze nem áll rendelkezésre véletlenszerű hozzáféréshez : a bemeneti adatok szekvenciálisan és folyamatosan érkeznek egy vagy több adatfolyamban. Az adatfolyamok rendezett pontsorozattal ("frissítésekkel") ábrázolhatók, amelyek sorrendben és csak egyszer vagy korlátozott számban érhetők el.
Sok szálfűző publikáció a hatékony tároláshoz túl nagy adateloszlásra vonatkozó számítógépes statisztika feladatát tekinti.[ adja meg ] . Ennél a problémaosztálynál feltételezzük, hogy a vektornak (nulla inicializált ) van bizonyos számú "frissítés" az adatfolyamban. Az ilyen algoritmusok célja olyan függvények kiszámítása, amelyek lényegesen kevesebb helyet igényelnek, mint amennyi a vektor teljes reprezentációjához szükséges . Két általános modell létezik az ilyen adatok frissítésére: „ pénztárgép ” és „forgókapu” ( eng . turnstile ).
A "cash" modellben minden "frissítés" a formában van ábrázolva, és a vektor úgy módosul, hogy valamely pozitív egész számmal növekszik . Egy speciális eset az eset (csak egy egység beillesztése megengedett).
A "forgókerekes" modellben minden "frissítés" formában van ábrázolva, és a vektor úgy módosul, hogy valamely pozitív vagy negatív egész számmal növekszik . Egy szigorú modellben az adott időpontban nem lehet negatív.
Számos forrásban a „slide-window” modellt is figyelembe veszik. Ebben a modellben az érdeklődési függvényt egy korlátozott dimenziójú ablakon számítják ki az adatfolyam adataiból, az ablak végén lévő elemeket nem veszik figyelembe, amíg az adatfolyamból származó új adatok át nem veszik a helyüket.
Ezek az algoritmusok nemcsak az adatok gyakorisági jellemzőivel kapcsolatos kérdéseket veszik figyelembe, hanem számos más kérdést is. A gráfokkal kapcsolatos számos probléma megoldható olyan feltételek mellett, hogy a gráf szomszédsági mátrixát valamilyen ismeretlen sorrendben előre betöltjük. Néha éppen ellenkezőleg, meg kell oldani az adatok sorrendjének becslésének problémáját, például meg kell számolni az inverz értékek számát az adatfolyamban, és meg kell találni a legnagyobb növekvő sorozatot.
A streaming algoritmusok főbb jellemzői:
Ezeknek az algoritmusoknak sok közös vonásuk van az online algoritmusokkal , mivel az algoritmusnak döntést kell hoznia, mielőtt az összes adat elérhető lenne, de vannak különbségek. Az in-line algoritmusok különösen képesek késleltetni a döntések meghozatalát addig, amíg egy adatsorozat pontcsoportja meg nem érkezik, míg az online algoritmusoknak döntéseket kell hozniuk a sorozat minden új pontjának megérkezésekor.
Ha az algoritmus hozzávetőleges, akkor a válasz pontossága egy másik mutató. Egy algoritmus pontosságát gyakran értékként adják meg , ami azt jelenti, hogy az algoritmus kevesebb hibát fog elérni , -os valószínűséggel .
Az adatfolyam-algoritmusok nagy jelentőséggel bírnak a számítógépes hálózatok felügyeletének és menedzselésének feladataiban , így például eszközükkel gyorsan megelőzhető a túlcsordulás (óriásfolyamok követése , túlcsordulások számának és várható időtartamának becslése) [ ] Emellett adatfolyam-algoritmusok használhatók adatbázisokban, például a méret becslésére egy tábla-illesztési művelet után .
A vektor th frekvencianyomatéka a következőképpen van definiálva .
Az első momentum a frekvenciák egyszerű összege (azaz a teljes szám). A második pont az adatok statisztikai paramétereinek, például a Gini-együttható kiszámításához hasznos . a leggyakrabban előforduló elem gyakoriságaként határozzuk meg.
A frekvencianyomatékok becslésének kérdéseit is tanulmányozzuk.
A feladat az adatfolyam leggyakrabban előforduló elemének megtalálása. Itt a következő algoritmusok érvényesek:
Az adatfolyamban a trendelés általában a következő sorrendben történik: a leggyakrabban előforduló elemeket és azok gyakoriságát a fenti algoritmusok valamelyike alapján határozzuk meg[ pontosítás ] <--algoritmusok nehéz elemek megtalálására? és ha ezt a szakaszt lejjebb helyezzük?-->, akkor trendként az előző időponthoz viszonyított legnagyobb növekedést jegyezzük meg. Ehhez exponenciális mozgóátlagot és különféle normalizálásokat használnak [6] . O(ε² + log d) szóközt és O(1) legrosszabb eset frissítést használ egy univerzális hash függvényhez az r-smart független hash függvények családjából, ahol r = Ω(log(1/ε)/ log log(1) / ε))[ adja meg ] .
Egy empirikus entrópiabecslést egy frekvenciahalmazra a következőképpen definiálunk: , ahol [7] .
Az online gépi tanulás fő feladata egy modell (például egy osztályozó) betanítása egy menetben a képzési készleten keresztül; prediktív kivonatolást és gradienst használnak
Az adatfolyamban lévő egyedi elemek számának megszámlálása (pillanat ) egy másik dolog[ pontosítás ] egy jól tanulmányozott probléma. Az első algoritmust Flajolet és Martin javasolta [2] . 2010-ben találtak egy aszimptotikusan optimális algoritmust [8] .