Kompleksitas Waktu Huffman Studi Perbandingan Kinerja Algoritma Kompresi Shannon-Fano Dan Huffman Pada Citra Digital .

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