BAB III
ANALISIS KOMPLEKSITAS ALGORITMA
3.1 Kompleksitas Waktu Huffman
Algoritma Huffman adalah sebagai berikut: 9.
Hitung frekuensi kemunculan masing-masing simbol pada citra. 10.
Urutkan frekuensi kemunculan simbol citra dari yang terkecil ke yang terbesar, masing-masing simbol dapat direpresentasikan sebagai sebuah node.
11. Gabungkan dua node yang mempunyai frekuensi kemunculan simbol, kemudian
jumlahkan kedua frekuensi kemunculan sehingga membentuk parent node. 12.
Masukkan node parent ke dalam kumpulan node dan urutkan berdasarkan frekuensi kemunculan simbol, dari yang terkecil ke yang terbesar.
13. Hapus node dengan frekuensi kemunculan terkecil yang telah digabungkan dari
kumpulan node. 14.
Ulangi lagkah 1-5 sampai semua simbol habis dibangkitkan. 15.
Beri label pada setiap sisi pohon biner, sisi kiri dilabeli dengan 0 dan sisi kanan dilabeli dengan 1.
16. Telusuri pohon biner dari akar ke daun. Barisan label-label pada sisi pohon dari
akar ke daun menyatakan kode Huffman untuk simbol yang bersesuaian.
Misalnya terdapat data citra digital dalam bentuk matriks seperti gambar dibawah ini:
256 0 50 255 25 25
26 50 50 180 180 180
51 50 120 255 255 25
121 120 50 255 255 50
255 255 180 25 255 255 255 255 180 25 255 255
Gambar 3.1 Potongan data citra digital
Langkah-langkah pembentukan pohon Huffman: 9.
Hitung frekuensi kemunculan masing-masing simbol pada citra.
Universitas Sumatera Utara
Dari potongan data citra tersebut diperoleh tabel distribusi frekuensi sebagai berikut:
Tabel 3.1 Tabel distribusi frekuensi Huffman
Simbol Frekuensi
Total bit 120
3 3 x 1 byte = 3
50 6
6 x 1 byte = 6 180
6 6 x 1 byte = 6
25 7
7 x 1 byte = 7 255
14 14 x 1 byte = 14
Total 36 byte
10. Urutkan frekuensi kemunculan simbol dari yang terkecil ke yang terbesar, masing-
masing simbol dapat direpresentasikan sebagai sebuah node.
11. Gabungkan dua node yang mempunyai frekuensi kemunculan simbol terkecil,
kemudian jumlahkan kedua frekuensi kemunculan sehingga membentuk parent node.
12. Masukkan node parent ke dalam kumpulan node dan urutkan berdasarkan
frekuensi kemunculan simbol, dari yang terkecil ke yang terbesar. 13.
Hapus node dengan frekuensi kemunculan terkecil yang telah digabungkan dari kumpulan node.
3 6
6 7
14
7 14
9
3 6
6
Universitas Sumatera Utara
Langkah 4 dan 5 adalah sebagai berikut:
14. Ulangi lagkah 1-5 sampai semua simbol habis dibangkitkan.
15. Beri label pada setiap sisi pohon biner, sisi kiri dilabeli dengan 0 dan sisi kanan
dilabeli dengan 1. 7
9
3 14
6 6
13 9
3 14
6 6
7 22
13 9
3 14
6 6
7
Universitas Sumatera Utara
16. Telusuri pohon biner dari akar ke daun. Barisan label-label pada sisi pohon dari
akar ke daun menyatakan kode Huffman untuk simbol yang bersesuaian
Maka dari pohon Huffman di atas diperoleh kode Huffman sebagai berikut:
Tabel 3.2 Codebook Huffman
Simbol frekuensi
Kode 120
3 000
50 6
001 180
6 010
25 7
011 255
14 1
Dari tabel di atas dapat dilihat bahwa simbol yang sering muncul dikodekan dengan kode yang lebih pendek, demikian juga sebaliknya. Setelah itu dilakukan
14
13 9
3 6
6 7
22 36
255
25 180
50 120
1
1
1 1
Universitas Sumatera Utara
substitusi dari simbol-simbol potongan citra digital pada Gambar 3.1 dengan kode Huffman yang terdapat pada Tabel 3.2, sehingga diperoleh data biner sebagai berikut:
101000110110110110010010100100100010010001 1011000000001110111101001111110111101001111
Gambar 3.2 Data biner hasil substitusi kode Huffman
Data biner hasil substitusi kode Huffman memiliki ukuran 85 bit setara 10,625 byte, sedangkan tanpa kompresi dibutuhkan 36 bytes, diperoleh dari total frekuensi
kemunculan simbol dikalikan dengan 1 byte. Sehingga Algoritma Huffman dapat mereduksi penggunaan memori sebanyak 25,375 bytes. Dengan rasio kompresinya
yaitu 100 – 10,62536 x 100 = 70,486 .
Universitas Sumatera Utara
Kompleksitas waktu Huffman tergantung pada dua bagian utama, yaitu proses sorting dan proses pembentukan pohon Huffman. Proses sorting data dapat
mempengaruhi kompleksitas algoritma total, apabila kita mengambil pengurutan data dengan kompleksitas algoritma On
2
atau mengambil pengurutan data dengan kompleksitas algoritma Olog n tentu akan menghasilkan kompleksitas algoritma
yang berbeda. Untuk algoritma pengurutan data, kompleksitas waktu yang paling ideal adalah On, yaitu algoritma pengurutan hanya dengan 1 kali pass saja. Namun sampai
saat ini belum ada algoritma yang mampu untuk mencapai keadaan ini. Algoritma sorting yang dipilih adalah algoritma Heap Sort dimana proses pengurutan didasarkan
pada prioritas.
Algoritma utamanya:
Procedure Huffman L: list of tree {membangun pohon Huffman code dari list of
tree yang berisikan karakter-karakter yang ada pada data}
Deklarasi
A, B, T : tree
Algoritma
SortL {mengurutkan elemen list of tree L}
While member L ≠ 1 do
DeletefirstL, A { mendelete elemen pertama dari
list of tree L,dan menyimpan nilai dari yang di
delete di variable A} DeleteFirstL, B { mendelete elemen
pertama dari list of tree L,dan menyimpan nilai dari
Universitas Sumatera Utara
heapify; for i = 0; i n; i++ {
remove; reheapify;
Algoritma Metoda Heapify
Ide secara intuitif mungkin adalah melakukan operasi heapify ini dari root ke arah leaf. Namun ide ini tidak efisien dalam kenyataannya karena akan terjadi operasi
rutun-naik mirip algoritma bubble-sort. Ide yang efisien adalah membentuk heaptree- heaptree mulai dari subtree-subtree yang paling bawah. Jika subtree-subtree suatu
node sudah membentuk heap maka tree dari node tersebut mudah dijadikan heaptree dengan mengalirkannya ke bawah.
Jadi algoritma utamanya beriterasi mulai dari internal node paling kanan- bawah atau berindeks array paling besar hingga root lalu ke kiri dan naik ke level di
atasnya, dan seterusnya hingga root sebagai array [0..N-1] maka iterasi dilakukan mulai j = N2, berkurang satu-satu hingga j = 0.
1. Pada internal node itu pemeriksaan hanya dilakukan pada node anaknya langsung.
2. Pada saat berada di level yang lebih tinggi, subtree-subtreenya selalu sudah
membentuk heap. Jadi paling buruk restrukturisasi hanya mengalirkan node tersebut ke arah bawah.
3. Algoritma ini melakukan sebanyak N2 kali iterasi, dan pada setiap interasi paling
buruk akan melakukan pertukaran sebanyak log
2
N kali.
Algoritma Metoda remove
Universitas Sumatera Utara
Algoritma hanya menukarkan elemen array[0] dengan elemen array terakhir dalam heaptree. Secara logik node paling bawah-kanan dipindahkan ke root menggantikan
node root yang akan diambil. Setelah reheapify panjang array yang menjadi bagian heaptree berkurang satu node dan elemen array tersebut digunakan untuk menyimpan
hasil pengurutan hingga saat itu.
Algoritma Metoda reheapify
Melakukan restrukturisasi dari atas ke bawah seperti halnya iterasi terakhir dari heapify
karena baik subtree kiri maupun kanannya merupakan heap, jadi tidak perlu dilakukan seperti heapify.
Kompleksitas waktu dari algoritma ini adalah On log n yang diperoleh dari n-1 kali iterasi dikalikan dengan proses reheapify yang merupakan proses logaritmis.
Inisialisasi dengan heapify hanya memerlukan On, worse case adalah On log n, sehingga kompleksitas waktu total masih merupakan On log n. Algoritma ini
termasuk stabil dimana perbedaan antara worse case dengan best case tidak besar. Kompleksitas waktu Huffman adalah sebagai berikut:
1. Heap Sort
: On log n 2.
Repeat n times a.
Form new sub-tree : O1
b. Move sub-tree
: Olog n binary search
Total : O1 + O log n = Omax1, log n
: Olog n. 3.
Total keseluruhan waktu yang dibutuhkan untuk mengerjakan algoritma Huffman ini adalah = On log n + Olog n = Omaxn log n, log n = On log n.
Kompleksitas waktu untuk kasus terbaik best case sama dengan untuk kasus terburuk worst case yaitu On log n. Berdasarkan hasil analisis diperoleh bahwa
Algoritma Huffman membutuhkan waktu sebesar On log n, dimana waktu pelaksanaan yang n log n terdapat pada algoritma yang memecahkan persoalan
menjadi beberapa persoalan yang lebih kecil, menyelesaikan tiap persoalan secara
Universitas Sumatera Utara
independen, dan menggabung solusi masing-masing persoalan. Algoritma yang diselesaikan dengan teknik bagi dan gabung mempunyai kompleksitas asimptotik
jenis ini.
Gambar 3.3 Heap Graph On log n
3.2 Kompleksitas Waktu Shannon-Fano