Algoritmuselmélet 7. el ˝ oadás
Katona Gyula Y.
Budapesti M ˝uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz.
I. B. 137/b
kiskat@cs.bme.hu
2002 Március 11.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 1
Múltkori animációk
Java animáció: Hash-elés Java animáció: Huffman-fa
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
Nem bet ˝unként kódól, hanem a szöveg bizonyos szavaiból szótárat épít. =⇒ S
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
Nem bet ˝unként kódól, hanem a szöveg bizonyos szavaiból szótárat épít. =⇒ S
• az egybet ˝us szavak, azaz Σ elemei mind benne vannak S-ben;
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
Nem bet ˝unként kódól, hanem a szöveg bizonyos szavaiból szótárat épít. =⇒ S
• az egybet ˝us szavak, azaz Σ elemei mind benne vannak S-ben;
• ha egy szó benne van a szótárban, akkor annak minden kezd ˝odarabja is benne van;
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
Nem bet ˝unként kódól, hanem a szöveg bizonyos szavaiból szótárat épít. =⇒ S
• az egybet ˝us szavak, azaz Σ elemei mind benne vannak S-ben;
• ha egy szó benne van a szótárban, akkor annak minden kezd ˝odarabja is benne van;
• a szótárban tárolt szavaknak fix hosszúságú kódjuk van; az x ∈ S szó kódját c(x) jelöli.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 2
A Lempel–Ziv–Welch-módszer
A. Lempel és J. Ziv, 1970; T. Welch 1984
Használja: GIF, v.42bis, compress; ZIP, ARJ, LHA
Nem bet ˝unként kódól, hanem a szöveg bizonyos szavaiból szótárat épít. =⇒ S
• az egybet ˝us szavak, azaz Σ elemei mind benne vannak S-ben;
• ha egy szó benne van a szótárban, akkor annak minden kezd ˝odarabja is benne van;
• a szótárban tárolt szavaknak fix hosszúságú kódjuk van; az x ∈ S szó kódját c(x) jelöli.
Gyakorlatban a kódok hossza ∼12-15 bit.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
• nincs optimalizálás, de a gyakorlatban jól m ˝uködik
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
• nincs optimalizálás, de a gyakorlatban jól m ˝uködik
A szótár egyik szokásos tárolási módja a szófa adatszerkezet.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
• nincs optimalizálás, de a gyakorlatban jól m ˝uködik
A szótár egyik szokásos tárolási módja a szófa adatszerkezet.
Ha az olvasás során egy x ∈ S szót találunk, aminek a következ ˝o Y bet ˝uvel való folytatása már nincs S-ben, akkor c(x)-et kiírjuk a kódolt szövegbe.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
• nincs optimalizálás, de a gyakorlatban jól m ˝uködik
A szótár egyik szokásos tárolási módja a szófa adatszerkezet.
Ha az olvasás során egy x ∈ S szót találunk, aminek a következ ˝o Y bet ˝uvel való folytatása már nincs S-ben, akkor c(x)-et kiírjuk a kódolt szövegbe.
Az xY szót felvesszük az S szótárba. A szó c(xY ) kódja a legkisebb még eddig az S-ben nem szerepl ˝o kódérték lesz.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 3
LZW kódolás
• az összenyomni kívánt szöveget S-beli szavak egymásutánjára bontjuk
• a szavakat a szótárbeli kódokkal helyettesítjük
• Az eredeti szöveg olvasásakor egyid ˝oben épül, b ˝ovül az S szótár
• nincs optimalizálás, de a gyakorlatban jól m ˝uködik
A szótár egyik szokásos tárolási módja a szófa adatszerkezet.
Ha az olvasás során egy x ∈ S szót találunk, aminek a következ ˝o Y bet ˝uvel való folytatása már nincs S-ben, akkor c(x)-et kiírjuk a kódolt szövegbe.
Az xY szót felvesszük az S szótárba. A szó c(xY ) kódja a legkisebb még eddig az S-ben nem szerepl ˝o kódérték lesz.
Ezután az Y bet ˝uvel kezd ˝od ˝oen folytatjuk a bemeneti szöveg olvasását.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
(1) Ha az el ˝oz ˝o olvasási kísérlet sikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, és álljunk meg.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
(1) Ha az el ˝oz ˝o olvasási kísérlet sikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, és álljunk meg.
(2) Ha a zK szó is S-ben van, akkor z ← zK, és menjünk vissza (0)-ra.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
(1) Ha az el ˝oz ˝o olvasási kísérlet sikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, és álljunk meg.
(2) Ha a zK szó is S-ben van, akkor z ← zK, és menjünk vissza (0)-ra.
(3) Különben (azaz ha zK 6∈ S) írjuk ki c(z)-t, tegyük a zK szót S-be. Legyen z ← K, majd menjünk vissza (0)-ra.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
(1) Ha az el ˝oz ˝o olvasási kísérlet sikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, és álljunk meg.
(2) Ha a zK szó is S-ben van, akkor z ← zK, és menjünk vissza (0)-ra.
(3) Különben (azaz ha zK 6∈ S) írjuk ki c(z)-t, tegyük a zK szót S-be. Legyen z ← K, majd menjünk vissza (0)-ra.
A c(x) kódok rögzített hosszúságúak. Ha például ez a hosszúság 12 bit, akkor az S szótárba összesen 4096 szó kerülhet. =⇒
ALGORITMUSELMÉLET 7. EL ˝OADÁS 4
Legyen z egy szó típusú változó, K egy bet ˝u típusú változó. A z változó
értéke kezdetben az összenyomni szánt állomány els ˝o bet ˝uje. Végig teljesül, hogy z ∈ S.
(0) Olvassuk a bemen ˝o állomány következ ˝o bet ˝ujét K-ba.
(1) Ha az el ˝oz ˝o olvasási kísérlet sikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, és álljunk meg.
(2) Ha a zK szó is S-ben van, akkor z ← zK, és menjünk vissza (0)-ra.
(3) Különben (azaz ha zK 6∈ S) írjuk ki c(z)-t, tegyük a zK szót S-be. Legyen z ← K, majd menjünk vissza (0)-ra.
A c(x) kódok rögzített hosszúságúak. Ha például ez a hosszúság 12 bit, akkor az S szótárba összesen 4096 szó kerülhet. =⇒
Ha a szótár betelt, nem b ˝ovítünk tovább, úgy folytatjuk.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa
Szótár
a → 1 b → 2 c → 3
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1
0000
Szótár
a → 1 b → 2 c → 3
⇒ ab → 4
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2
0000 0001
Szótár
a → 1 b → 2 c → 3 ab → 4
⇒ ba → 5
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4
0000 0001 0011
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5
⇒ abc → 6
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3
0000 0001 0011 0010
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6
⇒ cb → 7
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5
0000 0001 0011 0010 0100
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7
⇒ bab → 8
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8
0000 0001 0011 0010 0100 1000
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8
⇒ baba → 9
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8 1
0000 0001 0011 0010 0100 1000 0000
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8 baba → 9
⇒ aa → 10
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8 1 10
0000 0001 0011 0010 0100 1000 0000 1001
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8 baba → 9 aa → 10
⇒ aaa → 11
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8 1 10 11
0000 0001 0011 0010 0100 1000 0000 1001 1010
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8 baba → 9 aa → 10 aaa → 11
⇒ aaaa → 12
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8 1 10 11 1 0000 0001 0011 0010 0100 1000 0000 1001 1010 0000
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8 baba → 9 aa → 10 aaa → 11 aaaa → 12
ALGORITMUSELMÉLET 7. EL ˝OADÁS 5
Példa LZW-re
Legyen Σ = {a, b, c} és c(a) = 1, c(b) = 2, c(c) = 3.
ababcbababaaaaaaa 1 2 4 3 5 8 1 10 11 1
0000 0001 0011 0010 0100 1000 0000 1001 1010 0000
Szótár
a → 1 b → 2 c → 3 ab → 4 ba → 5 abc → 6 cb → 7 bab → 8 baba → 9 aa → 10 aaa → 11 aaaa → 12
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
következ ˝o bet ˝u biztos b
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
következ ˝o bet ˝u biztos b c(bab) = 8
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
következ ˝o bet ˝u biztos b c(bab) = 8
ababcbabab
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
következ ˝o bet ˝u biztos b c(bab) = 8
ababcbabab
Java animáció: LZW-kódolás
ALGORITMUSELMÉLET 7. EL ˝OADÁS 6
Dekódolás
Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S-et.
Pl. Ha a kódolt szöveg: 1 2 4 3 5 8 1 10 11 1 és tudjuk, hogy c(a) = 1, c(b) = 2, c(c) = 3 =⇒
Ez els ˝o két jel bet ˝u kódja =⇒ ab
√
ab nem volt a kezdeti S-ben, de az eleje igen; =⇒ a kódoló algoritmus ezt c(ab) = 4 értékkel S-be tette =⇒ abab =⇒
ba volt a következ ˝o szó, ami S-be került =⇒ c(ba) = 5 . . . Ha itt tartunk
1 2 4 3 5 8 1 10 11 1 ababcba
a→ 1 b→ 2 c→ 3 ab→ 4 ba→ 5 abc→ 6 cb→ 7
=⇒
a 8-as kódú szó ba∗ alakú,
következ ˝o bet ˝u biztos b c(bab) = 8
ababcbabab
Java animáció: LZW-kódolás Laczay Bálint féle GIF animáció
ALGORITMUSELMÉLET 7. EL ˝OADÁS 7
Gráfalgoritmusok
• irányított gráfok: G = (V, E)
ALGORITMUSELMÉLET 7. EL ˝OADÁS 7
Gráfalgoritmusok
• irányított gráfok: G = (V, E)
• irányított él, irányított út, irányított kör
ALGORITMUSELMÉLET 7. EL ˝OADÁS 7
Gráfalgoritmusok
• irányított gráfok: G = (V, E)
• irányított él, irányított út, irányított kör
• élsúlyok: c(e) — lehetnek negatívak is
ALGORITMUSELMÉLET 7. EL ˝OADÁS 7
Gráfalgoritmusok
• irányított gráfok: G = (V, E)
• irányított él, irányított út, irányított kör
• élsúlyok: c(e) — lehetnek negatívak is
J
H G E
K D
F
I C
B
A L
3
4
8
4 9 6
9 0
17 8 9
3
6
2
7
3
8
6
11
5
ALGORITMUSELMÉLET 7. EL ˝OADÁS 8
Adjacencia-mátrix
Definíció. A G = (V, E) gráf adjacencia-mátrixa (vagy szomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i, j] =
0 ha (i, j) 6∈ E, 1 ha (i, j) ∈ E.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 8
Adjacencia-mátrix
Definíció. A G = (V, E) gráf adjacencia-mátrixa (vagy szomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i, j] =
0 ha (i, j) 6∈ E, 1 ha (i, j) ∈ E.
Irányítatlan gráfok esetén a szomszédossági mátrix szimmetrikus lesz (azaz A[i, j] = A[j, i] teljesül minden i, j csúcspárra).
ALGORITMUSELMÉLET 7. EL ˝OADÁS 8
Adjacencia-mátrix
Definíció. A G = (V, E) gráf adjacencia-mátrixa (vagy szomszédossági mátrixa) a következ ˝o – a V elemeivel indexelt – n-szer n-es mátrix:
A[i, j] =
0 ha (i, j) 6∈ E, 1 ha (i, j) ∈ E.
Irányítatlan gráfok esetén a szomszédossági mátrix szimmetrikus lesz (azaz A[i, j] = A[j, i] teljesül minden i, j csúcspárra).
v4 5
1
1
1
−1 v3 3
v1 v5
5 v2
A =
0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0
ALGORITMUSELMÉLET 7. EL ˝OADÁS 9
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i, j] =
0 ha i = j,
c(i, j) ha i 6= j és (i, j) éle G-nek,
∗ különben.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 9
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i, j] =
0 ha i = j,
c(i, j) ha i 6= j és (i, j) éle G-nek,
∗ különben.
v4 5
1
1
1
−1 v3 3
v1 v5
5 v2
C =
0 5 ∗ 1 ∗
∗ 0 ∗ ∗ −1
∗ 1 0 ∗ ∗
∗ ∗ 1 0 5
∗ ∗ 3 ∗ 0
ALGORITMUSELMÉLET 7. EL ˝OADÁS 9
Súlyozott adjacencia-mátrix
Ha költségek is vannak =⇒
C[i, j] =
0 ha i = j,
c(i, j) ha i 6= j és (i, j) éle G-nek,
∗ különben.
v4 5
1
1
1
−1 v3 3
v1 v5
5 v2
C =
0 5 ∗ 1 ∗
∗ 0 ∗ ∗ −1
∗ 1 0 ∗ ∗
∗ ∗ 1 0 5
∗ ∗ 3 ∗ 0
Hátránya =⇒ a mérete (n2 tömbelem) teljesen független az élek számától.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
Az i ∈ V csúcs listájában tároljuk az i-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
Az i ∈ V csúcs listájában tároljuk az i-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Az i listáján egy élnek a lista egy eleme (cellája) felel meg.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
Az i ∈ V csúcs listájában tároljuk az i-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Az i listáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
r r r r
- - -
?
1
i
n - r r r
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella
-
?
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
Az i ∈ V csúcs listájában tároljuk az i-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Az i listáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
r r r r
- - -
?
1
i
n - r r r
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella
-
?
Az (i, j) élnek megfelel ˝o cella tartalmazza a j sorszámot, a c(i, j) súlyt (ha van), egy mutatót a következ ˝o cellára, és esetleg még egyet az el ˝oz ˝ore is.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 10
Éllistás megadás
G = (V, E) gráf minden csúcsához egy lista tartozik.
Az i ∈ V csúcs listájában tároljuk az i-b ˝ol kimen ˝o éleket, és ha kell, ezek súlyát is.
Az i listáján egy élnek a lista egy eleme (cellája) felel meg.
- -
jc(i,j)
r r r r
- - -
?
1
i
n - r r r
1-b ˝ol kimen ˝o élek cellái
egy tipikus cella
-
?
Az (i, j) élnek megfelel ˝o cella tartalmazza a j sorszámot, a c(i, j) súlyt (ha van), egy mutatót a következ ˝o cellára, és esetleg még egyet az el ˝oz ˝ore is.
Tárigény: n + e cella, Irányítatlan gráfoknál:
n + 2e cella
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
Legrövidebb u v út =⇒ egy olyan u v út, melynek a hossza minimális a G-beli u v utak között.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
Legrövidebb u v út =⇒ egy olyan u v út, melynek a hossza minimális a G-beli u v utak között.
u és v csúcsok (G-beli) d(u, v) távolsága:
— 0, ha u = v;
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
Legrövidebb u v út =⇒ egy olyan u v út, melynek a hossza minimális a G-beli u v utak között.
u és v csúcsok (G-beli) d(u, v) távolsága:
— 0, ha u = v;
— ∞, ha nincs u v út
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
Legrövidebb u v út =⇒ egy olyan u v út, melynek a hossza minimális a G-beli u v utak között.
u és v csúcsok (G-beli) d(u, v) távolsága:
— 0, ha u = v;
— ∞, ha nincs u v út
— egyébként pedig a legrövidebb u v út hossza.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 11
A legrövidebb utak problémája
Legyen adott egy G = (V, E) irányított gráf a c(f), f ∈ E élsúlyokkal.
Feladat. Mekkora a legrövidebb út egy adott pontból egy másik adott pontba?
Feladat. Mekkora a legrövidebb út egy adott pontból az összes többibe?
Feladat. Mekkora a legrövidebb út bármely két pont között?
A G gráf egy u-t v-vel összeköt ˝o (nem feltétlenül egyszer ˝u) u v irányított útjának a hossza az úton szerepl ˝o élek súlyainak összege.
Legrövidebb u v út =⇒ egy olyan u v út, melynek a hossza minimális a G-beli u v utak között.
u és v csúcsok (G-beli) d(u, v) távolsága:
— 0, ha u = v;
— ∞, ha nincs u v út
— egyébként pedig a legrövidebb u v út hossza.
Vigyázat, itt u és v nem felcserélhet ˝o: ha az egyik csúcs valamilyen távol van a másiktól, akkor nem biztos, hogy a másik is ugyanolyan távol van az
egyikt ˝ol!
ALGORITMUSELMÉLET 7. EL ˝OADÁS 12
Dijkstra módszere
Feladat. A legrövidebb utak problémája (egy forrásból):
Adott egy G = (V, E) irányított gráf, a c : E → R+ nemnegatív érték ˝u súlyfüggvény, és egy s ∈ V csúcs (a forrás). Határozzuk meg minden v ∈ V -re a d(s, v) távolságot.
D[ ] =⇒
• Egy a G csúcsaival indexelt tömb
ALGORITMUSELMÉLET 7. EL ˝OADÁS 12
Dijkstra módszere
Feladat. A legrövidebb utak problémája (egy forrásból):
Adott egy G = (V, E) irányított gráf, a c : E → R+ nemnegatív érték ˝u súlyfüggvény, és egy s ∈ V csúcs (a forrás). Határozzuk meg minden v ∈ V -re a d(s, v) távolságot.
D[ ] =⇒
• Egy a G csúcsaival indexelt tömb
• az eljárás során addig megismert legrövidebb s v utak hossza
ALGORITMUSELMÉLET 7. EL ˝OADÁS 12
Dijkstra módszere
Feladat. A legrövidebb utak problémája (egy forrásból):
Adott egy G = (V, E) irányított gráf, a c : E → R+ nemnegatív érték ˝u súlyfüggvény, és egy s ∈ V csúcs (a forrás). Határozzuk meg minden v ∈ V -re a d(s, v) távolságot.
D[ ] =⇒
• Egy a G csúcsaival indexelt tömb
• az eljárás során addig megismert legrövidebb s v utak hossza
• Fels ˝o közelítése a keresett d(s, v) távolságnak
ALGORITMUSELMÉLET 7. EL ˝OADÁS 12
Dijkstra módszere
Feladat. A legrövidebb utak problémája (egy forrásból):
Adott egy G = (V, E) irányított gráf, a c : E → R+ nemnegatív érték ˝u súlyfüggvény, és egy s ∈ V csúcs (a forrás). Határozzuk meg minden v ∈ V -re a d(s, v) távolságot.
D[ ] =⇒
• Egy a G csúcsaival indexelt tömb
• az eljárás során addig megismert legrövidebb s v utak hossza
• Fels ˝o közelítése a keresett d(s, v) távolságnak
• A közelítést lépésr ˝ol lépésre finomítjuk, végül d(s, v)-t érjük el.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 13
Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott:
C[v, w] =
0 ha v = w,
c(v, w) ha v 6= w és (v, w) éle G-nek,
∞ különben.
Kezdetben D[v] := C[s, v] minden v ∈ V csúcsra.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 13
Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott:
C[v, w] =
0 ha v = w,
c(v, w) ha v 6= w és (v, w) éle G-nek,
∞ különben.
Kezdetben D[v] := C[s, v] minden v ∈ V csúcsra.
Válasszuk ki ezután az s csúcs szomszédai közül a hozzá legközelebbit, vagyis egy olyan x ∈ V \ {s} csúcsot, melyre D[x] minimális
ALGORITMUSELMÉLET 7. EL ˝OADÁS 13
Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott:
C[v, w] =
0 ha v = w,
c(v, w) ha v 6= w és (v, w) éle G-nek,
∞ különben.
Kezdetben D[v] := C[s, v] minden v ∈ V csúcsra.
Válasszuk ki ezután az s csúcs szomszédai közül a hozzá legközelebbit, vagyis egy olyan x ∈ V \ {s} csúcsot, melyre D[x] minimális
Biztos, hogy az egyetlen (s, x) élb ˝ol álló út egy legrövidebb s x út, (az élsúlyok nemnegatívak!).
ALGORITMUSELMÉLET 7. EL ˝OADÁS 13
Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott:
C[v, w] =
0 ha v = w,
c(v, w) ha v 6= w és (v, w) éle G-nek,
∞ különben.
Kezdetben D[v] := C[s, v] minden v ∈ V csúcsra.
Válasszuk ki ezután az s csúcs szomszédai közül a hozzá legközelebbit, vagyis egy olyan x ∈ V \ {s} csúcsot, melyre D[x] minimális
Biztos, hogy az egyetlen (s, x) élb ˝ol álló út egy legrövidebb s x út, (az élsúlyok nemnegatívak!).
A KÉSZ halmaz azokat a csúcsokat tartalmazza, amelyeknek s-t ˝ol való távolságát már tudjuk.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 13
Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott:
C[v, w] =
0 ha v = w,
c(v, w) ha v 6= w és (v, w) éle G-nek,
∞ különben.
Kezdetben D[v] := C[s, v] minden v ∈ V csúcsra.
Válasszuk ki ezután az s csúcs szomszédai közül a hozzá legközelebbit, vagyis egy olyan x ∈ V \ {s} csúcsot, melyre D[x] minimális
Biztos, hogy az egyetlen (s, x) élb ˝ol álló út egy legrövidebb s x út, (az élsúlyok nemnegatívak!).
A KÉSZ halmaz azokat a csúcsokat tartalmazza, amelyeknek s-t ˝ol való távolságát már tudjuk.
=⇒ x-et betehetjük (s mellé) a KÉSZ halmazba.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 14
Ezek után módosítsuk a többi csúcs D[w] értékét, ha az eddig ismertnél rövidebb úton el lehet érni oda x-en keresztül, azaz ha
D[x] + C[x, w] < D[w].
s
x
w
C [x, w ]
ALGORITMUSELMÉLET 7. EL ˝OADÁS 14
Ezek után módosítsuk a többi csúcs D[w] értékét, ha az eddig ismertnél rövidebb úton el lehet érni oda x-en keresztül, azaz ha
D[x] + C[x, w] < D[w].
s
x
w
C [x, w ]
Újra válasszunk ki a v ∈ V \ KÉSZ csúcsok közül egy olyat, amelyre D[v]
minimális.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 14
Ezek után módosítsuk a többi csúcs D[w] értékét, ha az eddig ismertnél rövidebb úton el lehet érni oda x-en keresztül, azaz ha
D[x] + C[x, w] < D[w].
s
x
w
C [x, w ]
Újra válasszunk ki a v ∈ V \ KÉSZ csúcsok közül egy olyat, amelyre D[v]
minimális.
Ezen csúcs D[ ]-értéke már az s-t ˝ol való távolságát tartalmazza.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 14
Ezek után módosítsuk a többi csúcs D[w] értékét, ha az eddig ismertnél rövidebb úton el lehet érni oda x-en keresztül, azaz ha
D[x] + C[x, w] < D[w].
s
x
w
C [x, w ]
Újra válasszunk ki a v ∈ V \ KÉSZ csúcsok közül egy olyat, amelyre D[v]
minimális.
Ezen csúcs D[ ]-értéke már az s-t ˝ol való távolságát tartalmazza.
Majd megint a D[ ]-értékeket módosítjuk, és így tovább, míg minden csúcs be nem kerül a KÉSZ halmazba.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 15
Dijkstra algoritmusa adjacencia-mátrixszal
(1) KÉSZ := {s}
for minden v ∈ V csúcsra do
D[v] := C[s, v] (∗ a d(s, v) távolság els ˝o közelítése ∗)
ALGORITMUSELMÉLET 7. EL ˝OADÁS 15
Dijkstra algoritmusa adjacencia-mátrixszal
(1) KÉSZ := {s}
for minden v ∈ V csúcsra do
D[v] := C[s, v] (∗ a d(s, v) távolság els ˝o közelítése ∗) (2) for i := 1 to n − 1 do begin
Válasszunk olyan x ∈ V \ KÉSZ csúcsot, melyre D[x] minimális.
Tegyük x-et a KÉSZ-be.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 15
Dijkstra algoritmusa adjacencia-mátrixszal
(1) KÉSZ := {s}
for minden v ∈ V csúcsra do
D[v] := C[s, v] (∗ a d(s, v) távolság els ˝o közelítése ∗) (2) for i := 1 to n − 1 do begin
Válasszunk olyan x ∈ V \ KÉSZ csúcsot, melyre D[x] minimális.
Tegyük x-et a KÉSZ-be.
(3) for minden w ∈ V \ KÉSZ csúcsra do
D[w] := min{D[w], D[x] + C[x, w]} (∗ d(s, w) új közelítése ∗) end
ALGORITMUSELMÉLET 7. EL ˝OADÁS 15
Dijkstra algoritmusa adjacencia-mátrixszal
(1) KÉSZ := {s}
for minden v ∈ V csúcsra do
D[v] := C[s, v] (∗ a d(s, v) távolság els ˝o közelítése ∗) (2) for i := 1 to n − 1 do begin
Válasszunk olyan x ∈ V \ KÉSZ csúcsot, melyre D[x] minimális.
Tegyük x-et a KÉSZ-be.
(3) for minden w ∈ V \ KÉSZ csúcsra do
D[w] := min{D[w], D[x] + C[x, w]} (∗ d(s, w) új közelítése ∗) end
Definíció. különleges út: egy s z irányított út különleges, ha a z végpontot kivéve minden pontja a KÉSZ halmazban van. A különleges úttal elérhet ˝o
pontok éppen a KÉSZ-b ˝ol egyetlen éllel elérhet ˝o pontok.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
(c) Küls ˝o (vagyis w ∈ V \ KÉSZ) pontokra D[w] a legrövidebb különleges s w utak hossza.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
(c) Küls ˝o (vagyis w ∈ V \ KÉSZ) pontokra D[w] a legrövidebb különleges s w utak hossza.
Bizonyítás: (a) Indukcióval
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
(c) Küls ˝o (vagyis w ∈ V \ KÉSZ) pontokra D[w] a legrövidebb különleges s w utak hossza.
Bizonyítás: (a) Indukcióval (2) el ˝ott
√
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
(c) Küls ˝o (vagyis w ∈ V \ KÉSZ) pontokra D[w] a legrövidebb különleges s w utak hossza.
Bizonyítás: (a) Indukcióval (2) el ˝ott
√
Tegyük fel, hogy igaz a j-edik iteráció után.
Belátjuk, hogy igaz a j + 1-edik iteráció után is.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 16
Tétel. A (2) ciklus minden iterációs lépése után érvényesek a következ ˝ok:
(a) KÉSZ pontjaira D[v] a legrövidebb s v utak hossza.
(b) Ha v ∈ KÉSZ, akkor van olyan d(s, v) hosszúságú (más szóval
legrövidebb) s v út is, amelynek minden pontja a KÉSZ halmazban van.
(c) Küls ˝o (vagyis w ∈ V \ KÉSZ) pontokra D[w] a legrövidebb különleges s w utak hossza.
Bizonyítás: (a) Indukcióval (2) el ˝ott
√
Tegyük fel, hogy igaz a j-edik iteráció után.
Belátjuk, hogy igaz a j + 1-edik iteráció után is.
Tegyük fel, hogy az algoritmus a j + 1. iterációs lépésben az x csúcsot választja a KÉSZ-be.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
Indirekt: mi van, ha D[x] nem a d(s, x) távolságot jelöli, azaz van ennél rövidebb s x út?
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
Indirekt: mi van, ha D[x] nem a d(s, x) távolságot jelöli, azaz van ennél rövidebb s x út?
Ezen út „eleje" különleges =⇒ D[y] ≤ d(x, s) < D[x]
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
Indirekt: mi van, ha D[x] nem a d(s, x) távolságot jelöli, azaz van ennél rövidebb s x út?
Ezen út „eleje" különleges =⇒ D[y] ≤ d(x, s) < D[x]
(b) Elég x-re ⇐= KÉSZ korábbi pontjaira az indukciós feltevésb ˝ol
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
Indirekt: mi van, ha D[x] nem a d(s, x) távolságot jelöli, azaz van ennél rövidebb s x út?
Ezen út „eleje" különleges =⇒ D[y] ≤ d(x, s) < D[x]
(b) Elég x-re ⇐= KÉSZ korábbi pontjaira az indukciós feltevésb ˝ol
Láttuk, hogy d(s, x) = D[x], ez egy különleges s x út hossza volt a j + 1.
iteráció el ˝ott (itt a (c)-re vonatkozó indukciós feltevést használtuk)
ALGORITMUSELMÉLET 7. EL ˝OADÁS 17
x s
y
Indirekt: mi van, ha D[x] nem a d(s, x) távolságot jelöli, azaz van ennél rövidebb s x út?
Ezen út „eleje" különleges =⇒ D[y] ≤ d(x, s) < D[x]
(b) Elég x-re ⇐= KÉSZ korábbi pontjaira az indukciós feltevésb ˝ol
Láttuk, hogy d(s, x) = D[x], ez egy különleges s x út hossza volt a j + 1.
iteráció el ˝ott (itt a (c)-re vonatkozó indukciós feltevést használtuk) annak végeztével az út minden pontja KÉSZ-beli lesz.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 18
x
w
s
ALGORITMUSELMÉLET 7. EL ˝OADÁS 18
x
w s
(c) A j + 1. iteráció el ˝ott
D[w] = min
v∈KÉSZ\{x}
{d(s, v) + C[v, w]}.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 18
x
w s
(c) A j + 1. iteráció el ˝ott
D[w] = min
v∈KÉSZ\{x}
{d(s, v) + C[v, w]}.
Utána D[w] = min
v∈KÉSZ
{d(s, v) + C[v, w]}.
ALGORITMUSELMÉLET 7. EL ˝OADÁS 18
x
w s
(c) A j + 1. iteráció el ˝ott
D[w] = min
v∈KÉSZ\{x}
{d(s, v) + C[v, w]}.
Utána D[w] = min
v∈KÉSZ
{d(s, v) + C[v, w]}.
=⇒ Elég megnézni, hogy D[w] vagy d(s, x) + C[x, w] nagyobb