Viterbi-algoritmi on algoritmi sopivimman tilaluettelon löytämiseksi (kutsutaan Viterbi-poluksi ), joka Markov-ketjujen yhteydessä saa todennäköisimmän tapahtuneen tapahtumasarjan.
Se on dynaaminen ohjelmointialgoritmi . Sitä käytetään Viterbi-konvoluutiodekoodausalgoritmissa .
Algoritmia ehdotti Andrew Viterbi vuonna 1967 algoritmiksi verkkojen kautta lähetetyn konvoluutiokoodin dekoodaamiseksi kohinalla. [1] Algoritmia on käytetty laajalti GSM- ja CDMA -matkapuhelinten, puhelinmodeemien ja langattomien 802.11 - verkkojen konvoluutiokoodien dekoodaamiseen . Sitä käytetään myös laajasti puheentunnistuksessa , puhesynteesissä , laskennallisessa lingvistiikassa ja bioinformatiikassa . Esimerkiksi puheentunnistuksessa äänisignaali havaitaan tapahtumien sarjana ja tekstirivi on akustisen signaalin "piilotettu merkitys". Viterbi-algoritmi löytää todennäköisimmän tekstirivin annetulle signaalille.
Algoritmi tekee useita oletuksia:
Olkoon piilotettu Markovin malli (HMM) tilaavaruudella , jossa on mahdollisten eri verkkotilojen lukumäärä. Samalla tilat, jotka verkko hyväksyy, ovat näkymättömiä havainnolle. Merkitään verkon senhetkisellä tilalla . Verkon lähdössä näkyy tällä hetkellä havainnointiin näkyvä arvo , jossa on mahdollisten erilaisten havaittujen arvojen määrä lähdössä. Olkoon alkutodennäköisyys sille, että verkko on tilassa , ja olkoon verkon siirtymisen todennäköisyydet tilasta tilaan .
Tarkastellaan sekvenssiä verkon lähdössä . Sitten havaitun sekvenssin todennäköisin verkkotilojen sarja voidaan määrittää käyttämällä seuraavia rekursiivisia suhteita: [2]
Tässä on todennäköisimmän ensimmäisiä havaittuja arvoja vastaavien tilojen sarjan todennäköisyys, joka päättyy tilaan . Viterbi-polku voidaan löytää käyttämällä osoittimia muistamaan, mikä tila esiintyi toisessa yhtälössä. Antaa olla funktio, joka palauttaa arvon , jota käytetään laskettaessa jos , tai jos . Sitten
Tässä käytetään vakiomääritelmää arg max .
Tämän algoritmin monimutkaisuus on .