Suoratoistoalgoritmi on algoritmi datasarjan käsittelemiseksi yhdellä tai pienellä määrällä kulkua .
Stream-algoritmit ratkaisevat ongelmia, joissa dataa saapuu peräkkäin ja suuria määriä. Esimerkki on verkkoliikenteen analyysi reitittimen puolella . Tällaiset ongelmat asettavat luonnollisia rajoituksia käytettävissä olevalle muistille (paljon vähemmän kuin syöttödatan koko) ja prosessointiaikaan kullekin sekvenssin elementille suoratoistoalgoritmeissa. Usein tietojen käsittely on mahdollista vain yhdellä kertaa.
Tiukat aika- ja muistirajoitukset tekevät usein mahdottomaksi ratkaista tutkittavaa ongelmaa tarkasti. Virtausalgoritmit ovat yleensä todennäköisyyspohjaisia ja antavat likiarvon tarkalle vastaukselle.
Vaikka tällaisia algoritmeja tarkasteltiin 1980-luvun ensimmäisen puoliskon teoksissa [1] [2] , suoratoistoalgoritmin käsite virallistettiin ensin Alonin , Matiasin ( eng. Yossi Matias ) ja Szegedin ( eng. Mario ) teoksissa. Szegedy ) vuonna 1996 [3] . Vuonna 2005 kirjoittajat palkittiin Gödel-palkinnolla heidän perustavanlaatuisesta panoksestaan suoratoistoalgoritmeihin .
Vuonna 2005 otettiin käyttöön puolisuoratoistoalgoritmin käsite [ 4 ] algoritmeina, jotka käsittelevät saapuvan virran vakiona tai logaritmisena.[ selventää ] passien lukumäärä.
Virtatietomallissa katsotaan, että osa tai kaikki prosessoitavan syöttödatan joukko ei ole käytettävissä satunnaiskäyttöä varten : syöttödata saapuu peräkkäin ja jatkuvasti yhdessä tai useammassa virrassa. Tietovirrat voidaan esittää järjestetyllä pistejonolla ("päivitykset"), joihin pääsee järjestyksessä ja vain kerran tai rajoitetun määrän kertoja.
Monet ketjutusjulkaisut pitävät tietokonetilastojen tehtävänä tietojen jakelussa, joka on liian suuri tehokkaaseen varastointiin.[ määritä ] . Tämän luokan ongelmia varten oletetaan, että vektorissa (nolla-alustettu ) on säikeessä jonkin verran "päivityksiä". Tällaisten algoritmien tavoitteena on laskea funktioita, jotka käyttävät huomattavasti vähemmän tilaa kuin vaatisi vektorin täydellisen esityksen . Tällaisten tietojen päivittämiseen on olemassa kaksi yleistä mallia: " kassakone " ja "kääntöportti" ( eng . turnstile ).
"Cash"-mallissa jokainen "päivitys" esitetään muodossa ja vektoria muokataan siten, että se kasvaa jollain positiivisella kokonaisluvulla . Erikoistapaus on tapaus (vain yksi yksikkö saa lisätä).
"Kääntöportti"-mallissa jokainen "päivitys" esitetään muodossa ja vektoria muokataan siten, että se kasvaa jollain positiivisella tai negatiivisella kokonaisluvulla . Tiukassa mallissa millään hetkellä ei voi olla negatiivinen.
Useissa lähteissä "slide-window" -mallia tarkastellaan lisäksi. Tässä mallissa kiinnostava funktio lasketaan rajoitetun ulottuvuuden ikkunan yli virtatiedoista, elementtejä ikkunan lopusta ei oteta huomioon ennen kuin uusi data virrasta tulee tilalle.
Nämä algoritmit eivät huomioi vain datan taajuusominaisuuksiin liittyviä kysymyksiä, vaan myös monia muita. Monet graafien ongelmat ratkaistaan sillä ehdolla, että graafin vierekkäisyysmatriisi ladataan etukäteen jossain tuntemattomassa järjestyksessä. Joskus päinvastoin on tarpeen ratkaista tietojen järjestyksen arvioinnin ongelma, esimerkiksi laskea käänteisten arvojen lukumäärä virrassa ja löytää suurin kasvava sekvenssi.
Suoratoistoalgoritmien pääominaisuudet:
Näillä algoritmeilla on paljon yhteistä online-algoritmien kanssa, koska algoritmin on tehtävä päätös ennen kuin kaikki tiedot ovat saatavilla, mutta eroja on. Erityisesti in-line-algoritmeilla on kyky viivyttää päätösten tekemistä, kunnes datasekvenssin pisteiden ryhmä saapuu, kun taas online-algoritmien on tehtävä päätökset sekvenssin jokaisen uuden pisteen saapuessa.
Jos algoritmi on likimääräinen, niin vastauksen tarkkuus on toinen indikaattori. Algoritmin tarkkuus esitetään usein arvona , mikä tarkoittaa, että algoritmi saavuttaa vähemmän virhettä todennäköisyydellä .
Virtausalgoritmeilla on suuri merkitys esimerkiksi tietokoneverkkojen valvonta- ja hallintatehtävissä , sillä niiden avulla voidaan nopeasti estää ylivuodot (jälkivirtojen seuranta , lukumäärän ja odotettavissa olevan keston arvioiminen) [ ] Myös suoratoistoalgoritmeja voidaan käyttää tietokannoissa, esimerkiksi arvioimaan kokoa taulukon liitosoperaation jälkeen .
Taajuushetki vektorissa on määritelty .
Ensimmäinen hetki on taajuuksien yksinkertainen summa (eli kokonaisluku). Toinen kohta on hyödyllinen laskettaessa datan tilastollisia parametreja, kuten Gini-kerrointa . määritellään useimmin esiintyvän elementin taajuudeksi.
Myös taajuusmomenttien arvioinnin kysymyksiä tutkitaan.
Tehtävänä on löytää useimmin esiintyvä elementti tietovirrasta. Tässä pätevät seuraavat algoritmit:
Trendit tietovirrassa tehdään yleensä seuraavassa järjestyksessä: yleisimmät elementit ja niiden taajuudet määritetään jonkin yllä olevista algoritmeista[ selventää ] <--algoritmit raskaiden elementtien löytämiseen? ja jos tämä osio siirretään alemmas?-->, ja sitten suurin nousu edelliseen ajankohtaan verrattuna on trendi. Tätä varten käytetään eksponentiaalista liukuvaa keskiarvoa ja erilaisia normalisointeja [6] . Se käyttää O(ε² + log d)-avaruutta ja O(1) pahimman tapauksen päivitystä yleiselle hash-funktiolle r-smart-riippumattomien tiivistefunktioiden perheestä, jossa r = Ω(log(1/ε)/log log(1) / ε))[ määritä ] .
Empiirinen entropiaestimaatti taajuuksien joukolle määritellään , jossa [7] .
Verkkokoneoppimisen päätehtävänä on kouluttaa malli (esimerkiksi luokitin) yhdellä kertaa koulutussarjan läpi; ennustavaa tiivistystä ja gradienttia sen
Yksilöllisten elementtien lukumäärän laskeminen tietovirrassa (hetki ) on toinen asia[ selventää ] hyvin tutkittu ongelma. Ensimmäisen algoritmin ehdottivat Flajolet ja Martin [2] . Vuonna 2010 löydettiin asymptoottisesti optimaalinen algoritmi [8] .