Delo z nizi. Poletna šola 2014 Programiranje v višji prestavi. Univerza v Ljubljani Fakulteta za računalništvo in informatiko.

Podobni dokumenti
Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Anže Pratnemer Analiza algoritmov za iskanje podnizov s pomočjo sistema ALGator DIPLOMS

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Microsoft Word - M docx

Microsoft PowerPoint - Java_spremenljivke

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Datum in kraj

Excel 2016

resitve.dvi

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

Microsoft PowerPoint - OAPS1- Uvod.ppt

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Teorija kodiranja in kriptografija 2013/ AES

PMJ, XPath

Sistemi Daljinskega Vodenja Vaja 3 Matej Kristan Laboratorij za Strojni Vid Fakulteta za elektrotehniko, Univerza v Ljubl

Microsoft Word - M docx

Microsoft Word - Seštevamo stotice.doc

Uvod ABECEDA A a B b C c Č č D d E e F f G g H h I i J j K k L l M m N n O o P p R r S s Š š T t U u V v Z z Ž ž ČRKA GLAS ABECEDA S ZA ZAČETEK ŠTEVIL

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

eAsistent izpis

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Vaja04_Ver02

Spoznajmo PowerPoint 2013

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis

Microsoft Word - CNC obdelava kazalo vsebine.doc

Microsoft Word - M docx

Diapozitiv 1

Microsoft Word - UP_Lekcija04_2014.docx

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0

ARS1

_ _BDA_CapitalSports_CS-Timer.indd

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Strojna oprema

resitve.dvi

GOALS

Microsoft Word - avd_vaje_ars1_1.doc

PowerPointova predstavitev

Mere kompleksnih mrež (angl. Network Statistics) - Seminarska naloga pri predmetu Izbrana poglavja iz diskretne matematike

DZS, d. d. Spoštovani, pred vami je vzorčno poglavje dnevnih priprav. Priprave so uporabnikom na voljo v celoti in v obliki, ki omogoča urejanje in pr

Watch 40_MT40X_UM_SL.pdf

Navodila za uporabo Mini snemalnik

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

MERJENJE GORIŠČNE RAZDALJE LEČE

EKVITABILNE PARTICIJE IN TOEPLITZOVE MATRIKE Aleksandar Jurišić Politehnika Nova Gorica in IMFM Vipavska 13, p.p. 301, Nova Gorica Slovenija Štefko Mi

Microsoft Word - CN-BTU4 Quick Guide_SI

DSI 2019

ELEKTROTEHNIŠKI VESTNIK 80(4): , 2013 IZVIRNI ZNANSTVENI ČLANEK Graditev in analiza grafov slovenskih besed Uroš Čibej Univerza v Ljubljani, Fa

predstavitev fakultete za matematiko 2017 A

LiveActive

Microsoft PowerPoint - Objekti_gradnja.ppt

FAKULTETA ZA STROJNIŠTVO Matematika 2 Pisni izpit 9. junij 2005 Ime in priimek: Vpisna št: Zaporedna številka izpita: Navodila Pazljivo preberite bese

eAsistent izpis

Diapozitiv 1

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

7. VAJA A. ENAČBA ZBIRALNE LEČE

VAJE RID 1 (4), program PTI, šol

Uradni list Republike Slovenije Št. 17 / / Stran 2557 Verzija: v1.0 Datum: Priloga 1: Manevri in tolerance zadovoljive izurjeno

CelotniPraktikum_2011_verZaTisk.pdf

Diapozitiv 1

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in računalništvo Enopredmetna matematika IZPIT IZ VERJETNOSTI IN STA

1

resitve.dvi

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Diapozitiv 1

Microsoft PowerPoint - Glasbena teorija 1

lenses PRIROČNIK za uporabo kontaktnih leč Sentina

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

ANALITIČNA GEOMETRIJA V RAVNINI

PowerPointova predstavitev

Microsoft Word - propozicije_mnogoboj.doc

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

PowerPoint Presentation

Podatkovni model ER

Mladi za napredek Maribora srečanje DOLŽINA»SPIRALE«Matematika Raziskovalna naloga Februar 2015

SESTAVA VSEBINE MATEMATIKE V 6

Slide 1

Delavnica Načrtovanje digitalnih vezij

Diapozitiv 1

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

(Slovenian) DM-HB Navodila za trgovce CESTNO MTB Treking Mestno izletniško/ udobno kolo URBANO ŠPORTNO E-BIKE HB-M3050 FH-M3050 HB-MT200 FH-MT2

PowerPoint Presentation

UČNA PRIPRAVA - ŠPORTNA VZGOJA Kandidatki: L. P., D. V. Didaktik: mag. Č.M. Učitelj: prof. B. V. Datum: Šola: OŠ Franca Rozmana Staneta Ra

eAsistent izpis

Diapozitiv 1

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Microsoft Word - M _mod..docx

SLO - NAVODILO ZA UPORABO IN MONTAŽO Št

BDV-N890W/BDV-N790W

Microsoft PowerPoint - MSPO_4_DiagramiVpliva.pptx

Microsoft Word doc

DES

Vektorji - naloge za test Naloga 1 Ali so točke A(1, 2, 3), B(0, 3, 7), C(3, 5, 11) b) A(0, 3, 5), B(1, 2, 2), C(3, 0, 4) kolinearne? Naloga 2 Ali toč

1. izbirni test za MMO 2018 Ljubljana, 16. december Naj bo n naravno število. Na mizi imamo n 2 okraskov n različnih barv in ni nujno, da imam

Diapozitiv 1

Transkripcija:

Univerza v Ljubljani Fakulteta za računalništvo in informatiko Poletna šola 2014 Programiranje v višji prestavi

Notacija S vhodni niz znakov ali besedilo (ang. string) N dolžina niza (število znakov) Σ abeceda σ velikost abecede 1 Pozor: Dejanska velikost niza v pomnilniku je lahko drugačna (null-delimited nizi, različna kodiranja znakov)

Notacija S vhodni niz znakov ali besedilo (ang. string) N dolžina niza (število znakov) Σ abeceda σ velikost abecede Primer: S = BANANA N 1 = 6 Σ = {B, A, N} σ = 3 1 Pozor: Dejanska velikost niza v pomnilniku je lahko drugačna (null-delimited nizi, različna kodiranja znakov)

Oblike besedil: Strukturirana: Besedilo je sestavljeno iz več besed. Običajno tudi iščemo po besedah. (programska koda, angleščina, slovenščina) Nestrukturirana: Besedilo nima jasnih besed ali pa je veliko besed sestavljank. (nemščina, človeški genom, glasba)

Oblike besedil: Strukturirana: Besedilo je sestavljeno iz več besed. Običajno tudi iščemo po besedah. (programska koda, angleščina, slovenščina) Nestrukturirana: Besedilo nima jasnih besed ali pa je veliko besed sestavljank. (nemščina, človeški genom, glasba) Problemi pri strukturiranih besedilih: Ali se beseda P (ang. pattern) nahaja v besedilu? Kje in kolikokrat se beseda ponovi? Ali se katera koli beseda začne na P? Ali je P koren katere koli besede? Ali je P pripona katere koli besede?

Oblike besedil: Strukturirana: Besedilo je sestavljeno iz več besed. Običajno tudi iščemo po besedah. (programska koda, angleščina, slovenščina) Nestrukturirana: Besedilo nima jasnih besed ali pa je veliko besed sestavljank. (nemščina, človeški genom, glasba) Problemi pri strukturiranih besedilih: Ali se beseda P (ang. pattern) nahaja v besedilu? Kje in kolikokrat se beseda ponovi? Ali se katera koli beseda začne na P? Ali je P koren katere koli besede? Ali je P pripona katere koli besede? Problemi pri nestrukturiranih besedilih: Ali se vzorec P pojavi v besedilu? Kje in kolikokrat se vzorec pojavi?

Kako iskati Kako iščemo?

Kako iskati Kako iščemo? Odvisno od scenarija!

Kako iskati Kako iščemo? Odvisno od scenarija! Besedilo ves čas isto, vzorci se menjajo. Vzorec ves čas isti, besedilo se menja.

Kako iskati Kako iščemo? Odvisno od scenarija! Besedilo ves čas isto, vzorci se menjajo. Vzorec ves čas isti, besedilo se menja. Ideja: V prvem primeru najprej indeksiramo besedilo, kar traja nekaj časa, vendar bo iskanje po kazalu (in ne neposredno po besedilu) potem bistveno hitreje. V drugem primeru porabimo nekaj časa, da spravimo vzorec v obliko, s katero bi hitreje iskali po besedilu.

Hranjenje Kako shraniti strukturirano besedilo tako, da bomo lahko hitro iskali po njem?

Hranjenje Kako shraniti strukturirano besedilo tako, da bomo lahko hitro iskali po njem? Ideja: Slovar, ki preslika iskan ključ na mesta pojavitev ključa v besedilu. Kaj točno uporabiti?

Hranjenje Kako shraniti strukturirano besedilo tako, da bomo lahko hitro iskali po njem? Ideja: Slovar, ki preslika iskan ključ na mesta pojavitev ključa v besedilu. Kaj točno uporabiti? Dvojiško iskalno drevo

Hranjenje Kako shraniti strukturirano besedilo tako, da bomo lahko hitro iskali po njem? Ideja: Slovar, ki preslika iskan ključ na mesta pojavitev ključa v besedilu. Kaj točno uporabiti? Dvojiško iskalno drevo Zgoščevalna tabela

Hranjenje Kako shraniti strukturirano besedilo tako, da bomo lahko hitro iskali po njem? Ideja: Slovar, ki preslika iskan ključ na mesta pojavitev ključa v besedilu. Kaj točno uporabiti? Dvojiško iskalno drevo Zgoščevalna tabela Številsko drevo

Dvojiško iskalno drevo (ang. Binary search tree)

Dvojiško iskalno drevo (ang. Binary search tree) Ideja: Iskalno drevo, vozlišča hranijo nize, manjši niz je tisti, ki je po abecedi (leksikografsko) pred drugim.

Dvojiško iskalno drevo (ang. Binary search tree) Ideja: Iskalno drevo, vozlišča hranijo nize, manjši niz je tisti, ki je po abecedi (leksikografsko) pred drugim. ključ vrednost urar 3 avto 5 ura 2 5 avto pes 1 urar 3 2 urnik 0 ura 0 urnik pesem 4 pes 1 pesem 4

Dvojiško iskalno drevo (ang. Binary search tree) Ideja: Iskalno drevo, vozlišča hranijo nize, manjši niz je tisti, ki je po abecedi (leksikografsko) pred drugim. ključ vrednost urar 3 avto 5 ura 2 5 avto pes 1 urar 3 2 urnik 0 ura 0 urnik pesem 4 pes 1 pesem 4 Pozor: Če imamo nize že zložene v tabelo po abecedi, potem namesto iskanja po drevesu iščemo kar po tabeli bisekcija!

Zgoščevalna tabela (ang. Hash table) Zgoščeno vrednost izračunamo za vsako besedo v vhodnem besedilu. Nato vstavimo besedo kot običajni element (npr. število) v zgoščevalno tabelo.

Zgoščevalna tabela (ang. Hash table) Zgoščeno vrednost izračunamo za vsako besedo v vhodnem besedilu. Nato vstavimo besedo kot običajni element (npr. število) v zgoščevalno tabelo. Rabin-Karpova zgoščevalna funkcija: H = c 1 a k 1 + c 2 a k 2 +... + c k a 0

Zgoščevalna tabela (ang. Hash table) Zgoščeno vrednost izračunamo za vsako besedo v vhodnem besedilu. Nato vstavimo besedo kot običajni element (npr. število) v zgoščevalno tabelo. Rabin-Karpova zgoščevalna funkcija: H = c 1 a k 1 + c 2 a k 2 +... + c k a 0 Primer zgoščene vrednosti za a = 2: URAR, dolžina je k = 4 U je 20. črka, R je 17. črka, A pa 0. črka po abecedi: 20 2 3 + 17 2 2 + 0 2 1 + 17 2 0 = 160 + 68 + 17 = 245 Pozor: Če želimo hraniti več pojavitev niza, potrebujemo multimap.

Zgoščevalna tabela nadal. (ang. Hash table) Vzemimo velikost polja M = 8.

Zgoščevalna tabela nadal. (ang. Hash table) Vzemimo velikost polja M = 8. H( avto ) = 136 mod 8 = 0 H( ura ) = 114 mod 8 = 2 H( urar ) = 245 mod 8 = 5 H( urnik ) = 534 mod 8 = 6 H( pes ) = 86 mod 8 = 0 H( pesem ) = 364 mod 8 = 0

Zgoščevalna tabela nadal. (ang. Hash table) Vzemimo velikost polja M = 8. 0 1 2 3 4 5 6 7 avto ura 5 2 urar 3 urnik 0 pes 1 pesem 4 ključ avto ura urar urnik pes pesem vrednost 5 2 3 0 1 4

Številsko drevo (ang. trie) Problem iskalnih dreves in zgoščevalne tabele: Ni mogoče iskati po začetkih besed (npr. search-as-you-type).

Številsko drevo (ang. trie) Problem iskalnih dreves in zgoščevalne tabele: Ni mogoče iskati po začetkih besed (npr. search-as-you-type). Rešitev: Številsko drevo hrani besede od korena navzdol, razbite po črkah. 5 a v t o p e s e 1 2 3 a r u r n i ključ avto ura urar urnik pes pesem vrednost 5 2 3 0 1 4 m 4 k 0

Stisnjeno številsko drevo (ang. compressed trie) Izboljšava: Namesto svojega vozlišča za vsako črko, vozlišča z enim naslednikom združimo.

Stisnjeno številsko drevo (ang. compressed trie) Izboljšava: Namesto svojega vozlišča za vsako črko, vozlišča z enim naslednikom združimo. 5 avto pes 1 ur em 4 2 3 a r nik ključ avto ura 0 urar urnik pes pesem vrednost 5 2 3 0 1 4

Programiranje številskih dreves Kako predstaviti vozlišče? 1 class TrieNode { 2 string str ; 3 void * value ; 4? children ; 5 };

Programiranje številskih dreves Kako predstaviti vozlišče? 1 class TrieNode { 2 string str ; 3 void * value ; 4? children ; 5 }; Do otrok dostopamo prek: povezanega seznama,

Programiranje številskih dreves Kako predstaviti vozlišče? 1 class TrieNode { 2 string str ; 3 void * value ; 4? children ; 5 }; Do otrok dostopamo prek: povezanega seznama, polje kazalcev v velikosti abecede σ,

Programiranje številskih dreves Kako predstaviti vozlišče? 1 class TrieNode { 2 string str ; 3 void * value ; 4? children ; 5 }; Do otrok dostopamo prek: povezanega seznama, polje kazalcev v velikosti abecede σ, trojiškega iskalnega drevesa,

Programiranje številskih dreves povezan seznam Vozlišče ima kazalec na prvega otroka in na sorojenca. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode * child ; 5 TrieNode * sibling ; 6 };

Programiranje številskih dreves povezan seznam Vozlišče ima kazalec na prvega otroka in na sorojenca. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode * child ; 5 TrieNode * sibling ; 6 }; ključ AC AG CA TC vrednost 1 4 5 12 child A sibling C T C G A C 1 4 5 12

Programiranje številskih dreves s poljem Vsako vozlišče vsebuje polje σ kazalcev na otroke. Do otroka dostopamo neposredno z indeksom njegove črke. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode children [ ALPHABET ]; 5 };

Programiranje številskih dreves s poljem Vsako vozlišče vsebuje polje σ kazalcev na otroke. Do otroka dostopamo neposredno z indeksom njegove črke. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode children [ ALPHABET ]; 5 }; ključ AC AG CA TC vrednost 1 4 5 12 A C T A C G T C G A C 1 4 5 12

Programiranje številskih dreves TST Trojiško iskalno drevo (ang. Ternary Search Trie) je kompromis obeh prejšnjih metod: hranimo le kazalce na otroke, ki obstajajo, iskanje pa poteka z bisekcijo. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode * eq; 5 TrieNode * ls; 6 TrieNode * gt; 7 };

Programiranje številskih dreves TST Trojiško iskalno drevo (ang. Ternary Search Trie) je kompromis obeh prejšnjih metod: hranimo le kazalce na otroke, ki obstajajo, iskanje pa poteka z bisekcijo. 1 class TrieNode { 2 string str ; 3 void * value ; 4 TrieNode * eq; 5 TrieNode * ls; 6 TrieNode * gt; 7 }; ključ AC AG CA TC vrednost 1 4 5 12 A ls eq C gt T 1 C 4 G 5 A 12 C

Priponsko drevo (ang. Suffix tree) Številsko drevo omogoča iskanje po začetkih besed. Kaj pa po korenu ali priponi?

Priponsko drevo (ang. Suffix tree) Številsko drevo omogoča iskanje po začetkih besed. Kaj pa po korenu ali priponi? Priponsko drevo je stisnjeno številsko drevo, ki hrani vse predpone (ali besed).

Priponsko drevo (ang. Suffix tree) Številsko drevo omogoča iskanje po začetkih besed. Kaj pa po korenu ali priponi? Priponsko drevo je stisnjeno številsko drevo, ki hrani vse predpone (ali besed). 1 2 3 4 5 6 7 8 9 10 11 12 S=ABRAKADABRA$

Priponsko drevo (ang. Suffix tree) Številsko drevo omogoča iskanje po začetkih besed. Kaj pa po korenu ali priponi? Priponsko drevo je stisnjeno številsko drevo, ki hrani vse predpone (ali besed). 1 2 3 4 5 6 7 8 9 10 11 12 S=ABRAKADABRA$ 1 $ 12 2 A$ 11 3 ABRA$ 8 4 ABRAKADABRA$ 1 5 ADABRA$ 6 6 AKADABRA$ 4 7 BRA$ 9 8 BRAKADABRA$ 2 9 DABRA$ 7 10 KADABRA 5 11 RA$ 10 12 RAKADABRA$ 13

Priponsko drevo (ang. Suffix tree) Številsko drevo omogoča iskanje po začetkih besed. Kaj pa po korenu ali priponi? Priponsko drevo je stisnjeno številsko drevo, ki hrani vse predpone (ali besed). 1 2 3 4 5 6 7 8 9 10 11 12 S=ABRAKADABRA$ 1 $ 12 2 A$ 11 3 ABRA$ 8 4 ABRAKADABRA$ 1 5 ADABRA$ 6 6 AKADABRA$ 4 7 BRA$ 9 8 BRAKADABRA$ 2 9 DABRA$ 7 10 KADABRA 5 11 RA$ 10 12 RAKADABRA$ 13 11 8 $ B RA $ 12 KA D A B RA $ D A B RA $ 6 KA D A B RA $ 1 4 $ A B RA $ 9 D A B RA $ 7 KA D A B RA $ 2 KA D A B RA $ 5 RA 10 $ KA D A B RA $ 3

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA Vaja: Koliko časa potrebujemo?

drsečim (ang. sliding window) S: P: NA DREVESU RASTEJO BANANE. BANANA Vaja: Koliko časa potrebujemo? Vsaj N primerjav znakov, če se vedno že prvi znak okna ne ujema in NM/2, če je vsak M-ti znak zgrešitev. npr. S =AAABAAABAAABAAAB in P =AAAA.

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera.

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera. Prva zgrešitev se pojavi, ko je okno na poziciji i = 0 in znaku j = 3, če štejemo od 0 dalje.

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera. Prva zgrešitev se pojavi, ko je okno na poziciji i = 0 in znaku j = 3, če štejemo od 0 dalje. Ideja: Namesto, da premaknemo okno za 1 znak naprej, ga premaknemo za 4 znake naprej, saj znaka B sploh nimamo v vzorcu!

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera. Prva zgrešitev se pojavi, ko je okno na poziciji i = 0 in znaku j = 3, če štejemo od 0 dalje. Ideja: Namesto, da premaknemo okno za 1 znak naprej, ga premaknemo za 4 znake naprej, saj znaka B sploh nimamo v vzorcu! Algoritem: Zgradimo tabelo, ki hrani število znakov, ki jih lahko preskočimo glede na trenutni znak.

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera. Prva zgrešitev se pojavi, ko je okno na poziciji i = 0 in znaku j = 3, če štejemo od 0 dalje. Ideja: Namesto, da premaknemo okno za 1 znak naprej, ga premaknemo za 4 znake naprej, saj znaka B sploh nimamo v vzorcu! Algoritem: Zgradimo tabelo, ki hrani število znakov, ki jih lahko preskočimo glede na trenutni znak. Primera: Vzorec AAAA: vedno lahko preskočimo kar vse 4 znake, če se pojavi kateri koli znak A na vhodu.

Boyer-Moorov algoritem Imejmo S =AAABAAABAAABAAAB in P =AAAA iz prejšnjega primera. Prva zgrešitev se pojavi, ko je okno na poziciji i = 0 in znaku j = 3, če štejemo od 0 dalje. Ideja: Namesto, da premaknemo okno za 1 znak naprej, ga premaknemo za 4 znake naprej, saj znaka B sploh nimamo v vzorcu! Algoritem: Zgradimo tabelo, ki hrani število znakov, ki jih lahko preskočimo glede na trenutni znak. Primera: Vzorec AAAA: vedno lahko preskočimo kar vse 4 znake, če se pojavi kateri koli znak A na vhodu. Vzorec ABAB: če se pojavi B na vhodu in pričakujemo A, potem preskočimo le en znak. Isto velja obratno. Če je na vhodu kateri koli drug znak, preskočimo 4 znake.

Boyer-Moorov algoritem preskočna tabela Preskočna tabela vsebuje indekse najbolj desnih pojavitev vseh možnih znakov abecede Σ. P = B A N A N A

Boyer-Moorov algoritem preskočna tabela Preskočna tabela vsebuje indekse najbolj desnih pojavitev vseh možnih znakov abecede Σ. P = B A N A N A 0 1 2 3 4 5

Boyer-Moorov algoritem preskočna tabela Preskočna tabela vsebuje indekse najbolj desnih pojavitev vseh možnih znakov abecede Σ. P = B A N A N A Σ: 0 1 2 3 4 5 A B C D E... M N O...

Boyer-Moorov algoritem preskočna tabela Preskočna tabela vsebuje indekse najbolj desnih pojavitev vseh možnih znakov abecede Σ. P = B A N A N A Σ: 0 1 2 3 4 5 A -1-1 1 1 3 3 5 B -1 0 0 0 0 0 0 C -1-1 -1-1 -1-1 -1 D -1-1 -1-1 -1-1 -1 E -1-1 -1-1 -1-1 -1... M -1-1 -1-1 -1-1 -1 N -1-1 -1 2 2 4 4 O -1-1 -1-1 -1-1 -1...

Boyer-Moorov algoritem preskočna tabela Preskočna tabela vsebuje indekse najbolj desnih pojavitev vseh možnih znakov abecede Σ. P = B A N A N A Σ: 0 1 2 3 4 5 right[c] A -1-1 1 1 3 3 5 5 B -1 0 0 0 0 0 0 0 C -1-1 -1-1 -1-1 -1-1 D -1-1 -1-1 -1-1 -1-1 E -1-1 -1-1 -1-1 -1-1... M -1-1 -1-1 -1-1 -1-1 N -1-1 -1 2 2 4 4 4 O -1-1 -1-1 -1-1 -1-1...

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu.

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej.

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej.

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej.

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: S: P: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej. NA DREVESU RASTEJO BANANE. BANANA

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: S: P: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej. NA DREVESU RASTEJO BANANE. BANANA

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: S: P: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej. NA DREVESU RASTEJO BANANE. BANANA

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: S: P: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej. NA DREVESU RASTEJO BANANE. BANANA

Boyer-Moorov algoritem nadal. Iskanje: Okno postavimo na začetek i = 0 in preverjamo znake od desne proti levi j = P 1: S: P: Če se znak c v besedilu ujema z znakom v oknu, nadaljujemo s preverjanjem naslednjega znaka v oknu in besedilu. Če se c ne ujema in je right[c]= 1, potem premakni okno za P znakov naprej. Če se c ne ujema in right[c] 1, potem premaknemo okno za j right[c] znakov. V primeru, da bi bila vrednost negativna, okno premaknemo za 1 znak naprej. NA DREVESU RASTEJO BANANE. BANANA

Rabin-Karpov algoritem Uporabimo znanje iz zgoščevalnih tabel:

Rabin-Karpov algoritem Uporabimo znanje iz zgoščevalnih tabel: 1. Najprej izračunamo zgoščeno vrednost vzorca H P.

Rabin-Karpov algoritem Uporabimo znanje iz zgoščevalnih tabel: 1. Najprej izračunamo zgoščeno vrednost vzorca H P. 2. Postavimo okno na začetek i = 0 in izračunamo zgoščeno vrednost znakov pod H S.

Rabin-Karpov algoritem Uporabimo znanje iz zgoščevalnih tabel: 1. Najprej izračunamo zgoščeno vrednost vzorca H P. 2. Postavimo okno na začetek i = 0 in izračunamo zgoščeno vrednost znakov pod H S. 3. Če H S = H P, preverimo vse znake pod, da se prepričamo o enakosti, in vrnemo mesto pojavitve.

Rabin-Karpov algoritem Uporabimo znanje iz zgoščevalnih tabel: 1. Najprej izračunamo zgoščeno vrednost vzorca H P. 2. Postavimo okno na začetek i = 0 in izračunamo zgoščeno vrednost znakov pod H S. 3. Če H S = H P, preverimo vse znake pod, da se prepričamo o enakosti, in vrnemo mesto pojavitve. 4. Če H S H P, se premaknemo za en znak naprej, izračunamo novo zgoščeno vrednost znakov pod H S in gremo na korak 3.

Rabin-Karpov algoritem nadal. Ideja: Če imamo pametno zgoščevalno funkcijo, nam ni treba prebrati ponovno vseh znakov pod, ampak le dodamo zgoščeno vrednost novega znaka in odstranimo zgoščeno vrednost najstarejšega znaka. Tako pohitrimo iskanje.

Rabin-Karpov algoritem nadal. Ideja: Če imamo pametno zgoščevalno funkcijo, nam ni treba prebrati ponovno vseh znakov pod, ampak le dodamo zgoščeno vrednost novega znaka in odstranimo zgoščeno vrednost najstarejšega znaka. Tako pohitrimo iskanje. Robin-Karpova zgoščevalna funkcija: H = c 1 a P 1 + c 2 a P 2 +... + c P a 0

Rabin-Karpov algoritem nadal. Ideja: Če imamo pametno zgoščevalno funkcijo, nam ni treba prebrati ponovno vseh znakov pod, ampak le dodamo zgoščeno vrednost novega znaka in odstranimo zgoščeno vrednost najstarejšega znaka. Tako pohitrimo iskanje. Robin-Karpova zgoščevalna funkcija: H = c 1 a P 1 + c 2 a P 2 +... + c P a 0 Ko pride nov znak c, odstranimo najstarejši znak c old in izračunamo nov H = H a c old a P + c

Levenshteinova razdalja ali urejevalna razdalja δ med dvema nizoma S 1 in S 2 je najmanjše število vstavljanj, brisanj ali zamenjav posameznih znakov, da spremenimo S 1 v S 2.

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j]

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko:

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 N 2 A 3 N 4 A 5 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 A 3 N 4 A 5 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 N 4 A 5 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 A 5 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 4 3 2 2 1 2 A 5 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 4 3 2 2 1 2 A 5 5 4 3 2 2 1 S 6

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 4 3 2 2 1 2 A 5 5 4 3 2 2 1 S 6 6 5 4 3 3 2

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 4 3 2 2 1 2 A 5 5 4 3 2 2 1 S 6 6 5 4 3 3 2 Levenshteinova razdalja se nahaja spodnjem desnem kotu δ( S 1, S 2 ).

Izračun Levenshteinove razdalje Formula za izračun razdalje S 1 [0..i] in S 2 [0..j]: δ(i 1, j) + 1 δ(i, j 1) + 1 δ(i, j) = min δ(i 1, j 1) + 1 če S 1 [i] S 2 [j] δ(i 1, j 1) če S 1 [i] = S 2 [j] Izračun razdalje se naredi z Levenshteinovo matriko: B A N A N A 0 1 2 3 4 5 6 A 1 1 1 2 3 4 5 N 2 2 2 1 2 3 4 A 3 3 2 2 1 2 3 N 4 4 3 2 2 1 2 A 5 5 4 3 2 2 1 S 6 6 5 4 3 3 2 Levenshteinova razdalja se nahaja spodnjem desnem kotu δ( S 1, S 2 ). Pot nam pove, katere ukaze je potrebno izvesti.

Najdaljši skupni podniz (longest common substr.) Za izračun najdaljšega skupnega podniza lahko uporabimo priponsko drevo obeh nizov in pogledamo najgloblje skupno vozlišče.

Najdaljši skupni podniz (longest common substr.) Za izračun najdaljšega skupnega podniza lahko uporabimo priponsko drevo obeh nizov in pogledamo najgloblje skupno vozlišče. Lahko pa uporabimo matriko, podobno Levenshteinovi, le da spremenimo pogoj: LCSuff (S 1 [1..i], S 2 [1..j]) = { LCSuff (S1 [1..i 1], S 2 [1..j 1]) + 1 če S 1 [i] = S 2 [j] 0 sicer

Najdaljši skupni podniz (longest common substr.) Za izračun najdaljšega skupnega podniza lahko uporabimo priponsko drevo obeh nizov in pogledamo najgloblje skupno vozlišče. Lahko pa uporabimo matriko, podobno Levenshteinovi, le da spremenimo pogoj: LCSuff (S 1 [1..i], S 2 [1..j]) = { LCSuff (S1 [1..i 1], S 2 [1..j 1]) + 1 če S 1 [i] = S 2 [j] 0 sicer B A N A N A 0 0 0 0 0 0 0 A 0 0 1 0 1 0 1 N 0 0 0 2 0 2 0 A 0 0 1 0 3 0 3 N 0 0 0 2 0 4 0 A 0 0 0 0 3 0 5 S 0 0 0 0 0 0 0

Najdaljše skupno podzaporedje (LCS) Najdaljše skupno podzaporedje (ang. longest common subsequence) je podobno najdaljšemu skupnemu podnizu, le da se lahko med posameznimi znaki, ki so prisotni v obeh nizih, vrinjeni tudi tuji znaki.

Najdaljše skupno podzaporedje (LCS) Najdaljše skupno podzaporedje (ang. longest common subsequence) je podobno najdaljšemu skupnemu podnizu, le da se lahko med posameznimi znaki, ki so prisotni v obeh nizih, vrinjeni tudi tuji znaki. LCS(S 1 [1..i], S 2 [1..j]) = LCS(S 1 [1..i 1], S 2 [1..j 1]) + 1 če S 1 [i] = S 2 [j] max(lcs(s 1 [1..i], S 2 [1..j 1]), LCS(S 1 [1..i 1], S 2 [1..j]) če S 1 [i] S 2 [j])

Najdaljše skupno podzaporedje (LCS) Najdaljše skupno podzaporedje (ang. longest common subsequence) je podobno najdaljšemu skupnemu podnizu, le da se lahko med posameznimi znaki, ki so prisotni v obeh nizih, vrinjeni tudi tuji znaki. LCS(S 1 [1..i], S 2 [1..j]) = LCS(S 1 [1..i 1], S 2 [1..j 1]) + 1 če S 1 [i] = S 2 [j] max(lcs(s 1 [1..i], S 2 [1..j 1]), LCS(S 1 [1..i 1], S 2 [1..j]) če S 1 [i] S 2 [j]) B A N A N A 0 0 0 0 0 0 0 A 0 0 1 1 1 1 1 N 0 0 1 2 2 2 2 A 0 0 1 2 3 3 3 N 0 0 1 2 3 4 4 A 0 0 1 2 3 4 5 S 0 0 1 2 3 4 5

BK-drevo Burkhard-Kellerjevo drevo se uporablja pri črkovalnikih in je uporabno za iskanje podobnih besed.

BK-drevo Burkhard-Kellerjevo drevo se uporablja pri črkovalnikih in je uporabno za iskanje podobnih besed. Gradnja: Začnemo s poljubnim pojmom. Nato dodamo novo geslo tako, da izračunamo urejevalno razdaljo D med trenutnim vozliščem in novim geslom. Če povezava v smeri razdalje ne obstaja, novo geslo pripnemo obstoječemu vozlišču. Sicer sledimo povezavi in izračunamo urejevalno razdaljo med novim vozliščem in našim geslom.

BK-drevo Burkhard-Kellerjevo drevo se uporablja pri črkovalnikih in je uporabno za iskanje podobnih besed. Gradnja: Začnemo s poljubnim pojmom. Nato dodamo novo geslo tako, da izračunamo urejevalno razdaljo D med trenutnim vozliščem in novim geslom. Če povezava v smeri razdalje ne obstaja, novo geslo pripnemo obstoječemu vozlišču. Sicer sledimo povezavi in izračunamo urejevalno razdaljo med novim vozliščem in našim geslom. Iskanje najbolj podobnih besed z urejevalno razdaljo δ: Začnemo pri korenu in izračunamo urejevalno razdaljo D med iskanim geslom in trenutnim vozliščem. Če je D δ, potem izpišemo trenutno vozlišče. Preiskujemo tiste otroke, ki imajo razdaljo D δ ali D + δ.

BK-drevo nadal. gesla ura urar urnik avto pes pesem

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura 1 urar

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura 1 urar 3 urnik

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura 1 urar 3 4 urnik avto

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura 1 urar 3 4 urnik 5 pes avto

BK-drevo nadal. gesla ura urar urnik avto pes pesem ura 1 urar 3 4 urnik 5 pes 5 avto pesem

BK-drevo nadal. gesla ura urar urnik avto pes pesem D=2 ura 1 urar D=1 iskanje: ira, δ=2 3 4 5 urnik avto pesem D=4 D=4 D=3 5 pes D=5

Vaje in Naloge Vaje: S pomočjo urejanja (npr. quicksort) uredi vnešene nize po abecedi. Sprogramiraj številsko drevo, ki podpira operaciji vstavljanja in iskanja. Sprogramiraj BK-drevo, ki podpira operaciji vstavljanja in iskanja. Sprogramiraj Edit Distance, Longest Common Substring in Longest Common Subsequence s pomočjo dinamičnega programiranja. UVa naloge: 499 What s The Frequency, Kenneth? 454 Anagrams 164 String Computer - Edit distance 290 Palindroms smordnilap 335 Processing MX Records 455 Periodic Strings