Anda di halaman 1dari 8

Nama : Rizqy Faishal Tanjung

NPM : 1406622856

Ceritakan sebanyak2nya apa yang Anda ketahui tentang pendekatan Greedy.

Pendekatan greedy digunakan untuk menyelesaikan optimization problem. Daripada


menghitung setiap sub-problem yang optimal seperti pada dynamic programming, bisa
dilakukan untuk selalu melewati path yang “looks best” optimum di setiap step menuju solusi
dari problem. Greedy mengambil langkah local optimum untuk membangun global solusi.
Karena menggunakan dynamic programming cukup memakan resource yang besar untuk
input yang besar (overkill). Menggunakan greedy tidak selalu menghasilkan hasil yang
paling optimal, tapi setidaknya optimal daripada tidak optimal sama sekali. Beberapa
algoritma cukup sukses menggunakan pendekatan greedy, salah satu contohnya yaitu
Huffman code.

Sebagai contoh dalam coin change problem. Misalkan terdapat uang coin dengan nominal
1,4,5,7 dan kita ingin menukarkan uang 30 dengan coin tadi tetapi dengan jumlah coin yang
minimal. Dengan menggunakan greedy, di setiap langkah akan selalu memilih coin yang
paling besar terlebih dahulu yaitu 7 hingga dengan jumlah 28 dan dua koin bernominal 1.
Sehingga jumlahnya ada 6 buah koin. Padahal terdapat solus yang lebih optimal yaitu 3x7,
5, 4, yang berjumlah 5 koin.

Kasus tidak optimalnya greedy dapat dicapai ketika path yang diambil diawal merupakan
path yang optimal namun path seterusnya aakan menjerumuskan ke hasil yang tidak
optimal. Sehingga akan terjebak dalam suatu local optimum padahal masih ada solusi yang
global minimum.

Ceritakan algoritma kompresi Huffman, apa saja kelebihannya.

Data compression merepresentasikan suatu data ke dalam bentuk yang lebih ringkas atau
pendek dalam suatu ukuran besaran memori dengan cara mengidentifikasi struktur dari data
tersebut. Algoritma data compression dibagi menjadi dua bagian yaitu lossless and lossy
compression. Lossless compression tidak menghilangkan informasi dari data sehingga data
yang sudah terkompres dapat dikembalikan lagi ke dalam kondisi data asli yang
sesungguhnya. Lossy compression mengizinkan untuk menghilangkan informasi dari data
yang asli untuk menghasilkan performa yang maksimal, biasanya data yang sudah
terkompresi menggunakan algoritma lossy compression tidak dapat direkonstruksi lagi ke
dalam bentuk data aslinya. Pada bahasan ini hanya membahas lossless compression
algorithm. Dalam lossless compression meliputi dua tahap yaitu encoding dan decoding.
Encoding merupakan proses transformasi dari data asli ke data yang terkompresi. Decoding
merupakan proses kebalikan dari encoding. Salah satu algoritma lossless yang cukup
terkenal yaitu huffman coding.

Huffman code menggunakan informasi statistik setiap bagian kecil dari data atau biasanya
karakter dalam teks, informasi distribusi karakter tersebut digunakan untuk membangun
model yang menghasilkan prefix codes. Prefix codes merupakan codes dimana suatu
codeword bukan merupakan prefix dari codeword yang lain. Untuk menghasilkan prefix
codes dan compression ratio yang optimal terdapat 2 kondisi yang harus dipenuhi dalam
Huffman codes yaitu:
1. Karakter yang frekuensi kemunculannya besar akan mempunyai codeword yang
pendek
2. Dua simbol yang sama-sama frekuensi kemunculannya kecil akan mempunyai
panjang codewords yang sama.
Huffman code menggunakan struktur data tree dimana setiap leaf nya akan menentukan
karakter yang akan di encode dan path untuk menuju leaf tersebut merupakan hasil output
dari proses encode tersebut. Sebagai contoh:

Gambar 1. Struktur data tree digunakan dalam Huffman codes

Setiap kemunculan:
- karakter “a” akan diganti dengan binary “1”
- karakter “b” akan diganti dengan binary “01”
- karakter “c” akan diganti dengan binary “000”
- karakter “d” akan diganti dengan binary “0010”
- karakter “e” akan diganti dengan binary “0011”

Misalkan urutan karakter “bcabaacdea”, akan diubah menjadi urutan binary


“0100010111000001000111”. Jika dilakukan perhitungan memori yang dibutuhkan urutan
karakter di atas jika dalam ascii akan memerlukan memori sebesar 10 x 8 bit = 80 bit,
sedangkan dalam binary hanya akan memerlukan memori sebesar 22 x 1 bit = 22 bit.
Sehingga compression ratio hampir mencapai 75%.

Kelebihan menggunakan Huffman code:


- Proses membuat model tree nya cukup simple, sehingga resource komputasi tidak
begitu besar
- Compression ratio yang tinggi bisa dicapai (tergantung inputnya)
- Proses encoding dan decoding nya cepat.
- Akan bagus jika jumlah karakter table yang digunakan sedikit (ex: ascii table)
Jalankan algoritma Huffman dan tuliskan kode dari masing2 simbol jika diberikan file
input dengan distribusi frekuensi kemunculan setiap simbol sbb:

A = 10 %
B = 15 %
C = 20 %
D = 22 %
E = 18 %
F=6%
G=9%

Setiap karakter akan menjadi leaf node:

Dua karakter dengan persentase terendah adalah F dan G, sehingga perlu digabung :

A = 10 %
B = 15 %
C = 20 %
D = 22 %
E = 18 %
FG = 15 %

Dua node dengan persentase terendah berikutnya adalah A dan B, maka perlu digabung:
AB = 25 %
C = 20 %
D = 22 %
E = 18 %
FG = 15 %
Dua node dengan persentase terendah berikutnya adalah E dan FG, maka perlu digabung:
AB = 25 %
C = 20 %
D = 22 %
EFG = 33 %

Dua node dengan persentase terendah berikutnya adalah C dan D, maka perlu digabung:
AB = 25 %
CD = 42 %
EFG = 33 %
Dua node dengan persentase terendah berikutnya adalah AB dan EFG, maka perlu
digabung:
ABEFG = 58 %
CD = 42 %

Terakhir CD dan ABEFG digabung menjadi:


ABCDEFG = 100%
Code Table

Karakter Code

A 100

B 101

C 00

D 01

E 111

F 1100

G 1101

Apa yang dimaksud dengan rasio kompresi? Jika awalnya setiap simbol dikodekan
dengan 8 bit, hitung rasio kompresinya.
Ratio kompresi merupakan persentase space yang dihemat yang dilakukan algortima
kompresi. Misalkan data berukuran 100byte setelah di kompress menjadi 20byte. Maka ratio
kompresi nya adalah 100byte - 20byte / 100byte x 100% = 80% atau bisa dituliskan
memakai perbandingan 1:5.

Compression Ratio
A = 10 %
B = 15 %
C = 20 %
D = 22 %
E = 18 %
F=6%
G=9%

Jika dalam data yang mentah (raw) satu karakter disimpan dalam 1 byte = 8 bit.
A = 10 % x 3 / 8 = 3.75%
B = 15 % x 3 / 8 = 5.625%
C = 20 % x 2 / 8 =5 %
D = 22 % x 2 / 8 = 5.5%
E = 18 % x 3 / 8 = 6.75 %
F=6%x4/8=3%
G = 9 % x 4 / 8 = 4.5 %

Total = 34.125%, jadi data di representasikan dengan ukuran 34.125% dari ukuran semula

Compression ratio = 100% - 34.125% = 65.875%

Algoritma kompresi Huffman ini optimal. Jelaskan.

Untuk menghasilkan prefix codes dan compression ratio yang optimal terdapat 2 kondisi
yang harus dipenuhi dalam Huffman codes yaitu:
1. Karakter yang frekuensi kemunculannya besar akan mempunyai codeword yang
pendek
2. Dua simbol yang sama-sama frekuensi kemunculannya kecil akan mempunyai
panjang codewords yang sama.

Untuk membuktikan kedua kondisi diatas:

Huffman code merupakan code yang optimal, sifat greedy yang digunakan dalam Huffman
code adalah mengubah karakter dengan nilai probabilitasnya tinggi menjadi sependek
mungkin. Sehingga jika kondisinya dibalik, nilai rata” bits per karakter nya akan lebih besar
dan tidak optimum (kondisi 1 terpenuhi). Terdapat sebab-akibat dari Huffman code ini, jika
terdapat sejumlah karakter yang di tuliskan dengan codewords pendek, maka akan ada
sejumlah karakter yang akan dituliskan panjang juga. Sehingga tergantung dari
perbandingan probabilitas karakter tersebut. Semakin tinggi gap antara perbandingan
probabilitas karakter yang sering muncul dan yang jarang muncul maka akan semakin
bagus compression ratio yang dihasilkan.

Misalkan kita pakai kontradiksi dari kondisi ke 2, misalkan untuk dua karakter “a” dan “b”
yang mempunyai probabilitas terkecil dan tidak mempunyai panjang codeword yang sama
dan karakter “b” mempunyai k-bits lebih panjang dari karakter “a”. Karena Huffman code
merupakan prefix code, codeword karakter “a” tidak mungkin menjadi prefix dari codeword
karakter “b”, sehingga bisa membuang k-bits dari codeword karakter “b” dan tetap
menghasilkan codeword yang valid. Sehingga pernyataan diatas tidak valid dan valid untuk
kondisi-2.
Untuk kasus worstcase, dimana semua karakter muncul dari ascii table 0-255 dan
mempunyai probabilitas yang sama, maka akan terbentuk full binary tree dengan depth = 8.
Sehingga, setiap karakter akan diubah menjadi 8 bits dan compression ratio = 0. Ukuran
hasil encoded dari Huffman code tidak akan pernah melebihi ukuran dari data aslinya,
sehingga bisa dikatakan Optimal.

Anda mungkin juga menyukai