(Dijkstra’s algorithm & Huffman code) week 9

39
(Dijkstra’s algorithm & Huffman code) – week 9

Transcript of (Dijkstra’s algorithm & Huffman code) week 9

Page 1: (Dijkstra’s algorithm & Huffman code) week 9

(Dijkstra’s algorithm & Huffman

code) – week 9

Page 2: (Dijkstra’s algorithm & Huffman code) week 9

• Algoritma greedy merupakan metode yang paling populer untuk memecahkan persoalanoptimasi.

• Persoalan optimasi (optimization problems):

➔ persoalan mencari solusi optimum.

• Hanya ada dua macam persoalan optimasi:

1. Maksimasi (maximization)

2. Minimasi (minimization)

Page 3: (Dijkstra’s algorithm & Huffman code) week 9

Contoh persoalan optimasi:

( Persoalan Penukaran Uang):

Diberikan uang senilai A. Tukar A

dengan koin-koin uang yang ada.

Berapa jumlah minimum koin

yang diperlukan untuk penukaran

tersebut?

➔ Persoalan minimasi

Page 4: (Dijkstra’s algorithm & Huffman code) week 9

Contoh 1: tersedia banyak koin 1, 5, 10, 25

• Uang senilai A = 32 dapat ditukar dengan

banyak cara berikut:

32 = 1 + 1 + … + 1 (32 koin)

32 = 5 + 5 + 5 + 5 + 10 + 1 + 1 (7 koin)

32 = 10 + 10 + 10 + 1 + 1 (5 koin)

… dst

• Minimum: 32 = 25 + 5 + 1 + 1 (4 koin)

Page 5: (Dijkstra’s algorithm & Huffman code) week 9

• Greedy = rakus, tamak, loba, …

• Prinsip greedy: “take what you can get now!”.

• Algoritma greedy membentuk solusi langkah per langkah (step by step).

• Pada setiap langkah, terdapat banyak pilihan yang perlu dieksplorasi.

• Oleh karena itu, pada setiap langkah harus dibuatkeputusan yang terbaik dalam menentukan pilihan.

Page 6: (Dijkstra’s algorithm & Huffman code) week 9

• Pada setiap langkah, kita membuat pilihan optimum

lokal (local optimum)

• dengan harapan bahwa langkah sisanya mengarah ke

solusi optimum global (global optimum).

Page 7: (Dijkstra’s algorithm & Huffman code) week 9

• Algoritma greedy adalah algoritma yang memecahkan masalah langkah per langkah;

pada setiap langkah:

1. mengambil pilihan yang terbaik yang

dapat diperoleh pada saat itu tanpa

memperhatikan konsekuensi ke depan

(prinsip “take what you can get now!”)

2. berharap bahwa dengan memilih optimum

lokal pada setiap langkah akan berakhir

dengan optimum global.

Page 8: (Dijkstra’s algorithm & Huffman code) week 9

• Tinjau masalah penukaran uang:

Strategi greedy:

Pada setiap langkah, pilihlah koin dengan nilai

terbesar dari himpunan koin yang tersisa.

• Misal: A = 32, koin yang tersedia: 1, 5, 10, dan 25

Langkah 1: pilih 1 buah koin 25 (Total = 25)

Langkah 2: pilih 1 buah koin 5 (Total = 25 + 5 = 30)

Langkah 3: pilih 2 buah koin 1 (Total = 25+5+1+1= 32)

• Solusi: Jumlah koin minimum = 4 (solusi optimal!)

Page 9: (Dijkstra’s algorithm & Huffman code) week 9

Elemen-elemen algoritma greedy:

1. Himpunan kandidat, C.

2. Himpunan solusi, S

3. Fungsi seleksi (selection function)

4. Fungsi kelayakan (feasible)

5. Fungsi obyektif

Dengan kata lain:

algoritma greedy melibatkan pencarian sebuah himpunan bagian, S, dari himpunan kandidat, C;

yang dalam hal ini, S harus memenuhi beberapa kriteria yang ditentukan, yaitu menyatakan suatu solusi dan S dioptimisasi oleh fungsi obyektif.

Page 10: (Dijkstra’s algorithm & Huffman code) week 9

Pada masalah penukaran uang:

• Himpunan kandidat (C): himpunan koin yang merepresentasikan nilai 1, 5, 10, 25, paling sedikitmengandung satu koin untuk setiap nilai.

• Himpunan solusi (S): total nilai koin yang dipilih tepatsama jumlahnya dengan nilai uang yang ditukarkan.

• Fungsi seleksi: pilihlah koin yang bernilai tertinggi darihimpunan kandidat yang tersisa.

• Fungsi layak: memeriksa apakah nilai total darihimpunan koin yang dipilih tidak melebihi jumlah uangyang harus dibayar.

• Fungsi obyektif: jumlah koin yang digunakan minimum.

Page 11: (Dijkstra’s algorithm & Huffman code) week 9

Skema umum algoritma greedy:

function greedy(input C: himpunan_kandidat)→ himpunan_kandidat { Mengembalikan solusi dari persoalan optimasi dengan algoritma greedy

Masukan: himpunan kandidat C

Keluaran: himpunan solusi yang bertipe himpunan_kandidat

}

Deklarasi

x : kandidat

S : himpunan_kandidat

Algoritma:

S {} { inisialisasi S dengan kosong }

while (not SOLUSI(S)) and (C {} ) do

x SELEKSI(C) { pilih sebuah kandidat dari C}

C C - {x} { elemen himpunan kandidat berkurang satu }

if LAYAK(S {x}) then

S S {x}

endif

endwhile

{SOLUSI(S) or C = {} }

if SOLUSI(S) then

return S

else

write(’tidak ada solusi’)

endif

• Pada akhir setiap iterasi, solusi yang terbentuk adalah optimum lokal.

• Pada akhir loop while-do diperoleh optimum global.

Page 12: (Dijkstra’s algorithm & Huffman code) week 9

• Warning: Optimum global belum tentu merupakan solusi optimum (terbaik), tetapi sub-optimum atau pseudo-optimum.

• Alasan:

1. Algoritma greedy tidak beroperasi secara menyeluruh

terhadap semua alternatif solusi yang ada

(sebagaimana pada metode exhaustive search).

2. Terdapat beberapa fungsi SELEKSI yang berbeda,

sehingga kita harus memilih fungsi yang tepat jika kita

ingin algoritma menghasilkan solusi optiamal.

• Jadi, pada sebagian masalah algoritma greedy tidak selalu berhasil memberikan solusi yang optimal.

Page 13: (Dijkstra’s algorithm & Huffman code) week 9

• Contoh 2: tinjau masalah penukaran uang.

(a) Koin: 5, 4, 3, dan 1

Uang yang ditukar = 7.

Solusi greedy: 7 = 5 + 1 + 1 ( 3 koin) → tidak optimal

Solusi optimal: 7 = 4 + 3 ( 2 koin)

(b) Koin: 10, 7, 1

Uang yang ditukar: 15

Solusi greedy: 15 = 10 + 1 + 1 + 1 + 1 + 1 (6 koin)

Solusi optimal: 15 = 7 + 7 + 1 (hanya 3 koin)

(c) Koin: 15, 10, dan 1

Uang yang ditukar: 20

Solusi greedy: 20 = 15 + 1 + 1 + 1 + 1 + 1 (6 koin)

Solusi optimal: 20 = 10 + 10 (2 koin)

Page 14: (Dijkstra’s algorithm & Huffman code) week 9

• Algoritma Dijkstra

• Huffman code

• Algoritma Prims & Kruskal

• Knapsack Integer

• …

Page 15: (Dijkstra’s algorithm & Huffman code) week 9

Introduction to Graph Algorithm

Definisi: Dijkstra’s Algorithm

• Algoritma Dijkstra’s merupakan metode umum yang digunakan untuk menyelesaikan masalah “shortest-path”

• Algoritma Dijkstra’s merupakan salah satu contohalgoritma “greedy”

• Algoritma “greedy” menyelesaikan masalah yang ada pada suatu tahap dengan mengerjakan langkahterbaik pada setiap tahapnya.

Page 16: (Dijkstra’s algorithm & Huffman code) week 9

Edsger W. Dijkstra (1930–2002)

• Edsger Wybe Dijkstra was one of the most influential members of computing science's founding generation. Among the domains in which his scientific contributions are fundamental are

• algorithm design

• programming languages

• program design

• operating systems

• distributed processing

In addition, Dijkstra was intensely interested in teaching, and in the

relationships between academic computing science and the software

industry. During his forty-plus years as a computing scientist, which included

positions in both academia and industry, Dijkstra's contributions brought

him many prizes and awards, including computing science's highest honor,

the ACM Turing Award.

Sumber: http://www.cs.utexas.edu/users/EWD/

Page 17: (Dijkstra’s algorithm & Huffman code) week 9

procedure Dijkstra (input G: weighted_graph, input a: intial_vertex, output L : array [1..n] of real)

{ Mencari lintasan terpendek dari simpul a ke semua simpul lain di dalam graf berbobot G.

Masukan: graf-berbobot yang terhubung, G = (V, E) dengan V= n

Luaran: L[1..n], L[i] berisi panjang terpendek dari simpul a ke simpul vi }

{ himpunan solusi untuk mencatat simpul-simpul yang sudah dipilih di dalam tur }

Deklarasi:

i : integer

u, v : vertex

S : set of vertex

Algoritma

for i1 to n

L(vi)

endfor

L(a) 0 { jarak dari a ke a adalah 0 }

S { }

for k 1 to n do

u pilih simpul yang belum terdapat di dalam S dan memiliki L(u) minimum

S S {u} { masukkan u ke dalam S }

for semua simpul v yang tidak terdapat di dalam S

{ update jarak yang baru dari a ke v }

{ jarak dari a ke u ditambah bobot sisi dari u ke v lebih kecil dari jarak a ke v }

{ jarak dari a ke v yang baru diganti dengan L(u) + G(u, v) }

if L(u) + G(u, v) < L(v) then

L(v) L(u) + G(u, v)

endif

endfor

enfor20

Page 18: (Dijkstra’s algorithm & Huffman code) week 9

(Sumber: Rosen, Discrete Mathematics and Its Application, 7th Edition)

Page 19: (Dijkstra’s algorithm & Huffman code) week 9

Penyelesaian:

Page 20: (Dijkstra’s algorithm & Huffman code) week 9

Jadi, lintasan terpendek (dimulai dari lintasan yang bobot terkecil) dari:a ke c adalah a, c dengan bobot = 2a ke b adalah a, c, b dengan bobot = 3a ke d adalah a, c, b, d dengan bobot = 8a ke e adalah a, c, b, d, e dengan bobot = 10a ke z adalah a, c, b, d, e, z dengan bobot = 13

Page 21: (Dijkstra’s algorithm & Huffman code) week 9

28Mencari lintasan terpendek dari router asal ke router tujuan dapat diartikansebagai menentukan lintasan terpendek dari simpul asal ke simpul tujuan didalam jaringan komputer.

Router 1

Page 22: (Dijkstra’s algorithm & Huffman code) week 9

29

Router Asal Router Tujuan Lintasan Terpendek

1 1 -

2 1, 4, 2

3 1, 4, 6, 3

4 1, 4

5 1, 4, 2, 5

6 1, 4, 6

2 1 2, 4, 1

2 -

3 2, 4, 6, 3

4 2, 4

5 2, 5

6 2, 4, 6

3 1 3, 6, 4, 1

2 3, 6, 4, 2

3 -

4 3, 6, 4

5 3, 5

6 3, 6

4 1 4, 1

2 4, 2

3 4, 6, 2

4 4, 6, 3

5 4, 2, 5

6 4, 6

Router 1

Page 23: (Dijkstra’s algorithm & Huffman code) week 9

30

Router1

Page 24: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

Dari Teori Shannon :

Sebuah source data dapat dikodekan dengan rata-rata

panjang kode mendekati entropy dari source data

Tahun 1952 D.A.Huffman mengajukan teknik encoding

untuk menghasilkan panjang kode terpendek dari suatu

source data dengan memanfaatkan probabilitasnya.

Page 25: (Dijkstra’s algorithm & Huffman code) week 9

Sejarah Huffman Code’s

Diciptakan oleh David A. Huffman pada tahun 1951 sebagai tugas kuliah ketika di Massachusetts Institute of Technology (MIT).

Dosen pengajar Huffman (bernama Robert M. Fano) menawarkan kepada para mahasiswanya bahwa siapa saja yang dapat menulis sebuah artikel tentang membangun pohon biner yang efisien akan mendapatkan nilai bagus tanpa harus menempuh ujian.

Setelah lama mencoba dan hampir menyerah, Huffman akhirnya menemukan sebuah metode untuk membangun pohon biner berdasarkan frekuensi.

Tekniknya kemudian diakui sebagai teknik yang paling efisien, melebihi teknik buatan sang dosen sendiri.

Binary Tree (pohon biner) yang dibuat oleh Huffman (disebut sebagai Huffman Tree) adalah dasar dari kompresi data dengan format ZIP yang kita kenal sekarang.

Teknik ini juga dipakai sebagai salah satu algoritma penyusun format file gambar JPEG dan format file musik populer MP3.

Jadi, bila kita sekarang bisa mendengarkan MP3 player kita sambil berkegiatan, salah satu faktor yang membuat teknologi ini ada adalah algoritma Huffman.

Page 26: (Dijkstra’s algorithm & Huffman code) week 9

Algoritma dalam pseudo code

1. Hitunglah probabilitas dari setiap simbol yang ada

2. Pasangkan setiap <simbol,probabilitas> dengan node

3. Temukan 2 buah node dengan probabilitas terendah kemudian

buatkah node parent dengan probabilitas gabungan dari 2

anaknya

4. Berikan label untuk cabang dari anak ke parent dengan 0 dan 1

(sebaiknya konsisten)

5. Update node (node anak diabaikan), lalu periksa jumlah node

yang ada, bila jumlah node > 1 maka ulangi langkah 3

6. Untuk menemukan kode setiap simbol, lakukan traverse dari root

ke leaf, (label branch yang dilalui akan menjadi kode untuk leaf)

Algoritma Huffman Code’s

Page 27: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

Misalkan:

Data = “hello world”

Code:

h → 000

e → 001

l → 010

o → 011

<space> → 100

w → 101

r → 110

d→ 111

‘binary code’ adalah cara untuk

merepresentasikan data (seperti gambar,

musik atau text)

Page 28: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

Kita akan meng’coding’ suatu pesan text dengan menggunakan huruf. Kita dapat memilih

‘code’ untuk setiap huruf yang ada dengan menggunakan 3 bit untuk setiap karakter nya

(ada 8 karakter).

Code:

h → 000

e → 001

l → 010

o → 011

<space> → 100

w → 101

r → 110

d→ 111

“hello world” → 000 001 010 010

011 100 101 011 110 111

Encode:

11 karakter x 3 bit = 33 bit

Page 29: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

Frekuensi

kemunculan:

H → 1

E → 1

L → 3

O → 2

_ → 1

W → 1

R → 1

D → 1

P. Queue

H → 1

E → 1

_ → 1

W → 1

R → 1

D → 1

O → 2

L → 3

1. Hapus dua item yang berada di paling atas

P. Queue

_ → 1

W → 1

R → 1

D → 1

O → 2

L → 3

2. Gabungkan keduanya kedalam bentuk tree

HE

H E

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi HE = frekuensi H + frekuensi E

Urutan dalam queue adalah

karakter dengan nilai

frekuensi terkecil sampai

terbesar

Page 30: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

P. Queue

_ → 1

W → 1

R → 1

D → 1

O → 2

HE → 2

L → 3

1. Hapus dua item yang berada di paling atas

P. Queue

R → 1

D → 1

O → 2

HE →2

L → 3

2. Gabungkan keduanya kedalam bentuk tree

_W

_ W

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi _W = frekuensi _ + frekuensi W

Page 31: (Dijkstra’s algorithm & Huffman code) week 9

P. Queue

R → 1

D → 1

O → 2

HE → 2

_W → 2

L → 3

Huffman Code’s

P. Queue

O → 2

HE → 2

_W → 2

L → 3

2. Gabungkan keduanya kedalam bentuk tree

RD

R D

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi RD = frekuensi R + frekuensi

1. Hapus dua item yang berada di paling atas

Page 32: (Dijkstra’s algorithm & Huffman code) week 9

P. Queue

O → 2

HE → 2

_W → 2

RD → 2

L → 3

Huffman Code’s

P. Queue

_W → 2

RD → 2

L → 3

2. Gabungkan keduanya kedalam bentuk tree

OHE

O HE

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi OHE = frekuensi O + frekuensi HE

1. Hapus dua item yang berada di paling atas

H E

Page 33: (Dijkstra’s algorithm & Huffman code) week 9

P. Queue

_W → 2

RD → 2

L → 3

OHE → 4

P. Queue

L → 3

OHE → 4

2. Gabungkan keduanya kedalam bentuk tree

_WR

D

_

WRD

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi _WRD = frekuensi _W + frekuensi RD

R D

1. Hapus dua item yang berada di paling atas

Huffman Code’s

_ W

Page 34: (Dijkstra’s algorithm & Huffman code) week 9

P. Queue

L → 3

OHE → 4

_WRD →

4

Huffman Code’s

P. Queue

_WRD →

42. Gabungkan keduanya kedalam bentuk tree

LOHE

L OHE

3. Masukkan kembali item yang telah

dikombinasikan kedalam queue

Frekuensi LOHE = frekuensi L + frekuensi OHE

O HE

1. Hapus dua item yang berada di paling atas

H E

Page 35: (Dijkstra’s algorithm & Huffman code) week 9

P. Queue

_WRD →

4

LOHE → 7

Huffman Code’s

2. Gabungkan keduanya kedalam bentuk tree

LOHE

L OHE

O HE

H E

1. Hapus dua item yang berada di paling atas

P. Queue

_WR

D

_

WRD

R D_ W

_WR

DLOH

E

Page 36: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

LOHE

L OHE

O HE

H E

_WR

D

_

WRD

R D_ W

_WR

DLOH

E

Page 37: (Dijkstra’s algorithm & Huffman code) week 9

Generate Huffman Code’s

LOHE

L OHE

O HE

H E

_WR

D

_

WRD

R D_ W

_WR

DLOH

E0 1

0 1

0 0

0

0

0

1

1

1

11

Telusuri

kebawah

R = 010

Page 38: (Dijkstra’s algorithm & Huffman code) week 9

Panjang 2 bit:

L = 10

Panjang 3 bit:

_ = 000

W = 001

R = 010

D = 011

O = 110

Panjang 4 bit:

H = 1110

E = 1111

Huffman Code’sCODE:

Page 39: (Dijkstra’s algorithm & Huffman code) week 9

Huffman Code’s

Hasil kompresi:

H = 4 bit

E = 4 bit

L = 2 bit

L = 2 bit

O = 3 bit

_ = 3 bit

W = 3 bit

O = 3 bit

R = 3 bit

L = 2 bit

D = 3 bit

Total jumlah bit hasil kompresi

adalah:

32 bit

Dimana sebelum kompresi

memori yang dibutuhkan

untuk menyimpan file text

HELLO_WORD adalah

sejumlah 33 bit.