Analisis Perbandingan Kinerja Algoritma Shannon-Fano, Arithmetic Coding, Dan Huffman Pada Kompresi Berkas Teks Dan Berkas Citra Digital
ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON-FANO, ARITHMETIC CODING, DAN HUFFMAN PADA KOMPRESI
BERKAS TEKS DAN BERKAS CITRA DIGITAL
SKRIPSI
SYARIFAH KEUMALA ANDRIATY 091401084
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA
MEDAN 2013
(2)
ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON-FANO, ARITHMETIC CODING, DAN HUFFMAN PADA KOMPRESI
BERKAS TEKS DAN BERKASCITRA DIGITAL
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Ilmu Komputer
SYARIFAH KEUMALA ANDRIATY 091401084
PROGRAM STUDI S1 ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA
MEDAN 2013
(3)
PERSETUJUAN
Judul : ANALISIS PERBANDINGAN KINERJA
ALGORITMA SHANNON-FANO, ARITHMETIC CODING, DAN HUFFMAN PADA KOMPRESI BERKAS TEKS DAN BERKAS CITRA DIGITAL
Kategori : SKRIPSI
Nama : SYARIFAH KEUMALA ANDRIATY
Nomor Induk Mahasiswa : 091401084
Program Studi : S1 ILMU KOMPUTER
Fakultas : ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA Diluluskan di
Medan, 24 Juli 2013 Komisi Pembimbing :
Pembimbing 2 Pembimbing 1
Syahriol Sitorus, S.SI, MIT Drs. James Pieter Marbun, M.Kom NIP. 19710310 199703 1 004 NIP. 19580611 198603 1 002
Diketahui/disetujui oleh
Program Studi S1 Ilmu Komputer Ketua,
Dr. Poltak Sihombing, M.Kom NIP. 19620317 199103 1 001
(4)
PERNYATAAN
ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON-FANO, ARITHMETIC CODING, DAN HUFFMAN PADA KOMPRESI
BERKAS TEKS DAN BERKAS CITRA DIGITAL
SKRIPSI
Saya menyatakan bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.
Medan, Juli 2013
Syarifah Keumala Andriaty 091401084
(5)
PENGHARGAAN
Puji dan syukur penulis panjatkan ke hadirat Allah SWT, yang telah memberikan rahmat dan hidayah-Nya, serta segala sesuatu dalam hidup, sehingga penulis dapat menyelesaikan penyusunan skripsi ini, sebagai syarat untuk memperoleh gelar Sarjana Komputer, Program Studi S1 Ilmu Komputer, Fakultas Ilmu Komputer dan Teknologi Informasi (Fasilkom-TI), Universitas Sumatera Utara.
Ucapan terima kasih penulis sampaikan kepada semua pihak yang telah membantu penulis dalam menyelesaikan skripsi ini baik secara langsung maupun tidak langsung. Pada kesempatan ini penulis ingin mengucapkan terima kasih yang sebesar-besarnya kepada:
1. Bapak Prof. Dr. dr. Syahril Pasaribu, DTM&H, M.Sc.(CTM). Sp.A(K) selaku Rektor Universitas Sumatera Utara.
2. Bapak Prof. Dr. Muhammad Zarlis selaku Dekan Fasilkom-TI Universitas Sumatera Utara.
3. Bapak Dr. Poltak Sihombing, M. Kom. selaku Ketua Program Studi S1 Ilmu Komputer dan Dosen Penguji I.
4. Ibu Maya Silvi Lydia, B.Sc. M.Sc. selaku Sekretaris Program Studi S1 Ilmu Komputer dan Dosen Penguji II.
5. Bapak Drs. James Pieter Marbun, M. Kom. selaku Dosen Pembimbing I. 6. Bapak Syahriol Sitorus, S.Si., MIT. selaku Dosen Pembimbing II.
7. Seluruh dosen serta pegawai di Program Studi S1 Ilmu Komputer Fasilkom-TI USU.
8. Ayahanda Said Adnan dan Ibunda Darmiaty yang selalu memberikan dukungan, perhatian, dan doa tanpa henti kepada penulis.
9. Kakanda penulis Syarifah Dian Andriaty, SE, Ak., dr. Syarifah Nora Andriaty, Syarifah Lisa Andriati, SH, M.Hum., dan Syarifah Lia Andriaty, S.Hut. yang telah memberikan motivasi dan dukungan tanpa henti kepada penulis.
10.Muhammad Aidil Akbar, S.Kom. yang telah memberikan bimbingan, dukungan, dan perhatian kepada penulis.
11.Teman-teman sekaligus keluarga besar Program Studi S1 Ilmu Komputer Fasilkom-TI USU.
12.Semua pihak yang terlibat langsung maupun tidak langsung yang tidak dapat penulis ucapkan satu demi satu yang telah membantu penyelesaian skripsi ini. Penulis menyadari bahwa skripsi ini masih terdapat kekurangan. Oleh karena itu, penulis mengharapkan kritik dan saran yang bersifat membangun demi kesempurnaan skripsi ini.
(6)
Medan, Juli 2013 Penulis,
(7)
ABSTRAK
Kompresi data merupakan proses mereduksi ukuran suatu data untuk menghasilkan representasi digital yang padat atau mampat (compact) namun tetap dapat mewakili
kuantitas informasi yang terkandung pada data tersebut. Proses kompresi data sangat diperlukan pada dunia komputerisasi, yaitu pada proses pengiriman data, dan pada penyimpanan data tersebut. Kompresi data dapat dilakukan secara lossy dan lossless.
Pada kompresi data yang bersifat lossy, data dapat dimampatkan dan didekompresi
dengan perubahan informasi di dalamnya, sehingga data asli berbeda dengan data hasil. Pada kompresi data yang bersifat lossless, data dapat dimampatkan dan
didekompresi tanpa kehilangan informasi, sehingga metode kompresi dengan sifat
lossless dapat diterapkan pada keperluan medis dan lain sebagainya. Pada penelitian ini dilakukan implementasi beberapa algoritma kompresi yang bersifat lossless, yaitu Shannon-Fano, Arithmetic Coding dan Huffman yang bertujuan untuk mengetahui algoritma paling optimal di antara ketiga algoritma tersebut. Parameter perbandingan kinerja algoritma yang digunakan adalah waktu kompresi, rasio kompresi, faktor kompresi, saving percentage, dan kompleksitas algoritma (Big-O). Aplikasi
pendukung yang dibangun pada penelitian ini adalah suatu aplikasi kompresi dengan berkas teks dengan format *.txt dan berkas citra digital dengan format *.bmp. Berdasarkan percobaan pada lima buah berkas teks dan lima buah berkas citra digital, diketahui bahwa algoritma Shannon-Fano merupakan algoritma teroptimal dibandingkan Arithmetic Coding dan Huffman, notasi Big-O dari algoritma Shannon-Fano dan Arithmetic Coding adalah O(n), sedangkan nilai notasi Big-O dari algoritma Huffman adalah O(n2).
(8)
COMPARATIVE PERFORMANCE ANALYSIS OF COMPRESSION ALGORITHMS SHANNON-FANO, ARITHMETIC CODING, AND
HUFFMAN IN TEXT FILE AND DIGITAL FILE IMAGE
ABSTRACT
Data compression is process of reducing the size of data to produce a digital representation of a compressed or compact but still be able to represent the quantity of information that contained in the data. Data compression is required in computerization, which in the process of data sending, and in data storage. Data compression can be implemented in lossy method or lossles method. In lossy data compression, data can be compressed and decompressed with some differences of information between original data and result data. In lossless data compression, data can be compressed and decompressed without lossing any information, so that nature of lossless compression method can be applied to medical purposes and so on. In this research, algorithms of compression data implemented with lossless method, which are Shannon-Fano, Arithmetic Coding, and Huffman that aims to find the most optimal algorithm between them. The comparison parameters of the performance of the algorithms used are compression time, compression ratio, compression factor, saving percentage of memory, and algorithmic complexity (Big-O). Supporting application that built in this research is a compression application with text file formatted in *.txt and digital image file formatted in *.bmp. Based on experiments on five text files and five image files, concluded that Shannon-Fano algorithm is the most optimal algorithm compared to Arithmetic Coding and Huffman, Big-O notation from Shannon-Fano and Arithmetic Coding algorithm is O(n), and Big-O notation from Huffman algorithm is O(n2).
(9)
DAFTAR ISI
Hal.
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Abstract vii
Daftar Isi viii
Daftar Tabel xi
Daftar Gambar xiii
Bab 1 Pendahuluan
1.1 Latar Belakang Masalah 1
1.2 Rumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 2
1.5 Manfaat Penelitian 3
1.6 Metodologi Penelitian 3
1.7 Sistematika Penulisan 4
Bab 2 Landasan Teori
2.1 Definisi Data 5
2.2 Kompresi Data 6
2.3 Data Berlebihan (Data Redundancy) 7
2.4 Teknik Kompresi Citra 8
2.5 Berkas Teks 9
2.6 Citra Digital 10
2.7 Pengolahan Citra Digital 10
2.8 Format Berkas Bitmap (*.bmp) 11
2.9 Informasi Teori dan Entropi 11
2.10 Algoritma Shannon-Fano 12
2.11 Algoritma Arithmetic Coding 12
2.12 Algoritma Huffman 13
2.13 Kompleksitas Algoritma (Notasi Big-O) 14
2.14 Evaluasi Kinerja Algoritma 15
2.15 Penelitian yang Relevan 16
2.15.1 Studi perbandingan kinerja algoritma kompresi 16 Shannon-Fano dan Huffman pada citra digital
2.15.2 Analisis kinerja dan implementasi algoritma kompresi 16 Arithmetic Coding pada file teks dan citra digital
2.15.3 Implementasi Algoritma Huffman pada Kompresi Citra BMP
(10)
Hal. 2.15.4 Analisis Perbandingan Teknik Kompresi Menggunakan
Algoritma Shannon-Fano, dan Run Length Encoding pada Citra Berformat BMP dan PNG
17
Bab 3 Analisis Dan Perancangan Sistem
3.1 Analisis Sistem 18
3.1.1 Ruang lingkup masalah 18
3.1.2 Analisis masalah 18
3.1.3 Analisis kebutuhan 20
3.1.4 Desain logis 20
3.2 Pseudocode 28
3.2.1 Pseudocode pembacaan berkas 28
3.2.2 Pseudocode pengurutan frekuensi 29 3.2.3 Pseudocode kompresi algoritma Shannon-Fano 31 3.2.4 Pseudocode dekompresi algoritma Shannon-Fano 34
3.2.5 Pseudocode kompresi algoritma Arithmetic Coding 36
3.2.6 Pseudocode dekompresi algoritma Arithmetic Coding 41 3.2.7 Pseudocode kompresi algoritma Huffman 43
3.2.8 Pseudocode dekompresi algoritma Huffman 49
3.3 Perancangan Antarmuka 51
3.3.1 Struktur menu 51
3.3.2 Perancangan grafis antarmuka 51 Bab 4 Implementasi Dan Pengujian
4.1 Implementasi Algoritma Shannon-Fano 54
4.1.1 Kompresi algoritma Shannon-Fano 54
4.1.2 Dekompresi algoritma Shannon-Fano 57 4.1.3 Kompleksitas waktu algoritma Shannon-Fano 57 4.2 Implementasi Algoritma Arithmetic Coding 61 4.2.1 Kompresi algoritma Arithmetic Coding 61 4.2.2 Dekompresi algoritma Arithmetic Coding 64 4.2.3 Kompleksitas waktu algoritma Arithmetic Coding 68
4.3 Implementasi Algoritma Huffman 73
4.3.1 Kompresi algoritma Huffman 73 4.3.2 Dekompresi algoritma Huffman 77 4.3.3 Kompleksitas waktu algoritma Huffman 78
4.4 Implementasi Perangkat Lunak 82
4.4.1 Konfigurasi perangkat keras 82 4.4.2 Konfigurasi perangkat lunak 82 4.4.3 Hasil eksekusi aplikasi 82
4.5 Pengujian Sistem 93
4.5.1 Skenario pengujian 93
4.5.2 Pengujian kompresi berkas teks 95
4.5.3 Pengujian kompresi berkas citra 114
Bab 5 Kesimpulan dan Saran 131
(11)
Hal.
Daftar Pustaka 133
Lampiran Listing Program A-1
(12)
DAFTAR TABEL
Nomor
Tabel Nama Tabel Halaman
3.1 Penyebab dan Akibat 19
3.2 Dokumentasi Naratif Use Case Kompresi 22 3.3 Dokumentasi Naratif Use Case Dekompresi 23
3.4 Dokumentasi Naratif Use Case Tentang Aplikasi 24
4.1 Pendataan Karakter Shannon-Fano 54
4.2 Pengurutan Frekuensi Shannon-Fano 55
4.3 Pembagian Bobot Frekuensi I 55
4.4 Pembagian Bobot Frekuensi II 55
4.5 Pembagian Bobot Frekuensi III 56
4.6 Pembagian Bobot Frekuensi IV 56
4.7 Codebook Shannon-Fano 56
4.8 Kompleksitas Waktu Kompresi Algoritma Shannon-Fano 58 4.9 Kompleksitas Waktu Dekompresi Algoritma Shannon-Fano 60
4.10 Pendataan Karakter Arithmetic Coding 61
4.11 Probabilitas Frekuensi Kemunculan Setiap Karakter 61
4.12 Jangkauan Setiap Karakter 62
4.13 Kompresi Arithmetic Coding 62
4.14 Library Arithmetic Coding 65
4.15 Kompleksitas Waktu Kompresi Algoritma Arithmetic Coding 69 4.16 Kompleksitas Waktu Dekompresi Algoritma Arithmetic
Coding
71
4.17 Pendataan Karakter Huffman 73
4.18 Pengurutan Frekuensi Huffman I 73
4.19 Frekuensi Huffman I 74
4.20 Pengurutan Frekuensi Huffman II 74
4.21 Frekuensi Huffman II 74
4.22 Pengurutan Frekuensi Huffman III 75
4.23 Frekuensi Huffman III 75
4.24 Pengurutan Frekuensi Huffman IV 75
4.25 Codebook Huffman 76
4.26 Kompleksitas Waktu Kompresi Algoritma Huffman 78 4.27 Kompleksitas Waktu Dekompresi Algoritma Huffman 81
4.28 Berkas Teks Uji 94
4.29 Berkas Citra Uji 94
4.30 Properties Berkas Teks satu.txt 96
4.31 Properties Berkas Teks bab4.txt 97
4.32 Properties Berkas Teks excel.txt 98
4.33 Properties Berkas Teks data.txt 99
4.34 Properties Berkas Teks flower.txt 100
(13)
Nomor
Tabel Nama Tabel Halaman
4.36 Analisis Kompresi Berkas Teks Algoritma Arithmetic Coding 103 4.37 Analisis Kompresi Berkas Teks Algoritma Huffman 105
4.38 Analisis Algoritma Kompresi pada Berkas Teks 107 4.39 Kompleksitas Waktu Algoritma Shannon-Fano pada Berkas
Teks
109 4.40 Kompleksitas Waktu Algoritma Arithmetic Coding pada
Berkas Teks
110 4.41 Kompleksitas Waktu Algoritma Huffman pada Berkas Teks 111 4.42 Kompleksitas Waktu Algoritma Shannon-Fano, Arithmetic
Coding, dan Huffman pada Berkas Teks
112
4.43 Properties Berkas Citra bee.bmp 114
4.44 Properties Berkas Citra bow.bmp 115
4.45 Properties Berkas Citra butterfly.bmp 116
4.46 Properties Berkas Citra flower.bmp 117 4.47 Properties Berkas Citra rainbow.bmp 118
4.48 Analisis Kompresi Berkas Citra Algoritma Shannon-Fano 119
4.49 Analisis Kompresi Berkas Citra Algoritma Arithmetic Coding 121 4.50 Analisis Kompresi Berkas Citra Algoritma Huffman 123 4.51 Analisis Algoritma Kompresi pada Berkas Citra 125 4.52 Kompleksitas Waktu Algoritma Shannon-Fano pada Berkas
Citra
127 4.53 Kompleksitas Waktu Algoritma Arithmetic Coding pada
Berkas Citra
128 4.54 Kompleksitas Waktu Algoritma Huffman pada Berkas Citra 129 4.55 Kompleksitas Waktu Algoritma Shannon-Fano, Arithmetic
Coding, dan Huffman pada Berkas Citra
(14)
DAFTAR GAMBAR
Nomor
Gambar Nama Gambar Halaman
2.1 Model Dasar Sistem Informasi 5
2.2 Model Pengembangan Sistem Informasi 5
2.3 Susunan Data 6
2.4 Ilustrasi Kompresi Lossless 9
2.5 Ilustrasi Kompresi Lossy 9
2.6 Nilai-nilai pada Piksel 10
3.1 Diagram Ishikawa 19
3.2 Use Case Diagram pada Aplikasi Kompresi 21
3.3 Diagram Aktivitaspada Aplikasi Kompresi 25
3.4 Diagram SekuensialProses Kompresi 27
3.5 Diagram SekuensialProses Dekompresi 27
3.6 Flowchart Pembacaan Berkas 29
3.7 Flowchart Pengurutan Frekuensi Karakter 30
3.8 Flowchart Kompresi Algoritma Shannon-Fano 1 32
3.9 Flowchart Kompresi Algoritma Shannon-Fano 2 33
3.10 Flowchart Dekompresi Algoritma Shannon-Fano 35
3.11 Flowchart Kompresi Algoritma Arithmetic Coding 1 38
3.12 Flowchart Kompresi Algoritma Arithmetic Coding 2 39 3.13 Gambar 3.13 Flowchart Method FindDecimal() 39
3.14 Flowchart Method FindBinary() 40
3.15 Flowchart Dekompresi Algoritma Arithmetic Coding 1 42 3.16 Flowchart Dekompresi Algoritma Arithmetic Coding 2 43
3.17 Flowchart Method FindLowest() 1 46
3.18 Flowchart Method FindLowest() 2 47
3.19 Flowchart Kompresi Algoritma Huffman 48
3.20 Flowchart Dekompresi Algoritma Huffman 50
3.21 Struktur Menu Aplikasi Kompresi 51
3.22 Rancangan Halaman Utama 52
3.23 Rancangan Halaman Kompresi 52
3.24 Rancangan Halaman Dekompresi 53
3.25 Rancangan Halaman About 53
4.1 Rescaling Bilangan Desimal I 63
4.2 Rescaling Bilangan Desimal II 63
4.3 Rescaling Bilangan Desimal III 64
4.4 Rescaling Library Arithmetic Coding 66
4.5 Pencarian Bilangan Biner I 66
4.6 Pencarian Bilangan Biner II 67
4.7 Pencarian Bilangan Biner III 68
4.8 Treeα 73
(15)
No
Gambar Nama Gambar Halaman
4.11 Treeδ 76
4.12 Huffman’s Tree 76
4.13 Tampilan Halaman Utama 83
4.14 Tampilan Halaman Kompresi 83
4.15 Tampilan Dialog Pilih Berkas Kompresi 84
4.16 Tampilan Properties Berkas I 84
4.17 Tampilan Berkas “bab4.txt” 85
4.18 Tampilan Kompresi Algoritma Shannon-Fano 85
4.19 Tampilan Berkas “bab4.sh” 86
4.20 Tampilan Kompresi Algoritma Arithmetic Coding 87
4.21 Tampilan Berkas “bab4.ar” 88
4.22 Tampilan Kompresi Algoritma Huffman 89
4.23 Tampilan Berkas “bab4.hf” 89
4.24 Tampilan Halaman Dekompresi 90
4.25 Tampilan Dialog Pilih Berkas Dekompresi 91
4.26 Tampilan Properties Berkas II 91
4.27 Tampilan Dekompresi Algoritma 92
4.28 Tampilan Halaman Tentang Aplikasi 93
4.29 Pengujian Berkas Teks satu.txt 96
4.30 Pengujian Berkas Teks bab4.txt 97
4.31 Pengujian Berkas Teks excel.txt 98
4.32 Pengujian Berkas Teks data.txt 99
4.33 Pengujian Berkas Teks flower.txt 100
4.34 Grafik Analisis Algoritma Shannon-Fano pada Berkas Teks 102 4.35 Grafik Analisis Algoritma Arithmetic Coding pada Berkas
Teks
104 4.36 Grafik Analisis Algoritma Huffman pada Berkas Teks 106 4.37 Grafik Analisis Algoritma Shannon-Fano, Arithmetic
Coding, dan Huffman pada Berkas Teks
108
4.38 Pengujian Berkas Citra bee.bmp 114
4.39 Pengujian Berkas Citra bow.bmp 115
4.40 Pengujian Berkas Citra butterfly.bmp 116
4.41 Pengujian Berkas Citra flower.bmp 117
4.42 Pengujian Berkas Citra rainbow.bmp 118 4.43 Grafik Analisis Algoritma Shannon-Fano pada Berkas Citra 120 4.44 Grafik Analisis Algoritma Arithmetic Coding pada Berkas
Citra
122 4.45 Grafik Analisis Algoritma Huffman pada Berkas Citra 124 4.46 Grafik Analisis Algoritma Shannon-Fano, Arithmetic
Coding, dan Huffman pada Berkas Citra
(16)
ABSTRAK
Kompresi data merupakan proses mereduksi ukuran suatu data untuk menghasilkan representasi digital yang padat atau mampat (compact) namun tetap dapat mewakili
kuantitas informasi yang terkandung pada data tersebut. Proses kompresi data sangat diperlukan pada dunia komputerisasi, yaitu pada proses pengiriman data, dan pada penyimpanan data tersebut. Kompresi data dapat dilakukan secara lossy dan lossless.
Pada kompresi data yang bersifat lossy, data dapat dimampatkan dan didekompresi
dengan perubahan informasi di dalamnya, sehingga data asli berbeda dengan data hasil. Pada kompresi data yang bersifat lossless, data dapat dimampatkan dan
didekompresi tanpa kehilangan informasi, sehingga metode kompresi dengan sifat
lossless dapat diterapkan pada keperluan medis dan lain sebagainya. Pada penelitian ini dilakukan implementasi beberapa algoritma kompresi yang bersifat lossless, yaitu Shannon-Fano, Arithmetic Coding dan Huffman yang bertujuan untuk mengetahui algoritma paling optimal di antara ketiga algoritma tersebut. Parameter perbandingan kinerja algoritma yang digunakan adalah waktu kompresi, rasio kompresi, faktor kompresi, saving percentage, dan kompleksitas algoritma (Big-O). Aplikasi
pendukung yang dibangun pada penelitian ini adalah suatu aplikasi kompresi dengan berkas teks dengan format *.txt dan berkas citra digital dengan format *.bmp. Berdasarkan percobaan pada lima buah berkas teks dan lima buah berkas citra digital, diketahui bahwa algoritma Shannon-Fano merupakan algoritma teroptimal dibandingkan Arithmetic Coding dan Huffman, notasi Big-O dari algoritma Shannon-Fano dan Arithmetic Coding adalah O(n), sedangkan nilai notasi Big-O dari algoritma Huffman adalah O(n2).
(17)
COMPARATIVE PERFORMANCE ANALYSIS OF COMPRESSION ALGORITHMS SHANNON-FANO, ARITHMETIC CODING, AND
HUFFMAN IN TEXT FILE AND DIGITAL FILE IMAGE
ABSTRACT
Data compression is process of reducing the size of data to produce a digital representation of a compressed or compact but still be able to represent the quantity of information that contained in the data. Data compression is required in computerization, which in the process of data sending, and in data storage. Data compression can be implemented in lossy method or lossles method. In lossy data compression, data can be compressed and decompressed with some differences of information between original data and result data. In lossless data compression, data can be compressed and decompressed without lossing any information, so that nature of lossless compression method can be applied to medical purposes and so on. In this research, algorithms of compression data implemented with lossless method, which are Shannon-Fano, Arithmetic Coding, and Huffman that aims to find the most optimal algorithm between them. The comparison parameters of the performance of the algorithms used are compression time, compression ratio, compression factor, saving percentage of memory, and algorithmic complexity (Big-O). Supporting application that built in this research is a compression application with text file formatted in *.txt and digital image file formatted in *.bmp. Based on experiments on five text files and five image files, concluded that Shannon-Fano algorithm is the most optimal algorithm compared to Arithmetic Coding and Huffman, Big-O notation from Shannon-Fano and Arithmetic Coding algorithm is O(n), and Big-O notation from Huffman algorithm is O(n2).
(18)
BAB 1
PENDAHULUAN
1.1 Latar Belakang Masalah
Kompresi data erat kaitannya dengan representasi informasi. Namun representasi informasi berisi banyak redundansi. Pengobralan kata dalam penulisan berita akan mengakibatkan kelimpahan kata atau redundansi. Dengan kata lain, redundansi merupakan penggandaan dari simbol yang sama dalam suatu string (Kridalaksana, 1993).
Hal yang penting dalam kompresi data adalah penghapusan dari redundansi. Setelah redundansi dihilangkan, informasi harus dienkode menjadi kode biner. Pada tahap implementasi, digunakan code word yang lebih pendek untuk merepresentasikan
huruf yang muncul lebih sering agar dapat mengurangi angka dari bit yang dibutuhkan untuk merepresentasi setiap huruf.
Situasi yang sama terdapat dalam komunikasi digital. Kecepatan dalam saluran komunikasi, baik melalui kabel atau nirkabel meningkat perlahan, maka dari itu data yang terkirim antara saluran telepon, mesin faksimile, telepon genggam, bahkan setelit dapat dimampatkan. Gambar-gambar yang diunggah ke suatu situs internet juga mengalami proses kompresi sebelum gambar tersebut ditampilkan.
Ada terdapat banyak metode untuk memampatkan data. Metode-metode ini berdasarkan dari berbagai ide yang disesuaikan dengan beberapa tipe data dan menghasilkan kompresi yang sedikit berbeda, namun tetap memampatkan data tersebut dengan menghilangkan redundansi dari data aslinya. Beberapa metode kompresi data ini antara lain adalah algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
Pada penelitian Adriani (2009), dilakukan analisis statistik untuk mengukur kinerja dari algoritma Shannon-Fano dan Huffman; pada penelitian Sarifah (2010), dilakukan analisis statistik untuk mengukur kinerja dari algoritma Arithmetic Coding,
(19)
ditinjau dari kecepatan proses kompresi dan dekompresinya, memori yang dibutuhkan rasio atau ukuran berkas hasil kompresi terhadap berkas asli) dan kualitas citra hasil kompresi yang dihasilkan.
Pada penelitian ini dilakukan analisis statistik dan perbandingan kinerja dari algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada kompresi berkas teks dan berkas citra digital.
1.2 Rumusan Masalah
Permasalahan yang diteliti dan diuraikan dalam penelitian ini adalah :
1. bagaimana membandingkan kinerja algoritma Shannon-Fano, Arithmetic Coding, dan Huffman agar proses pengiriman data menjadi lebih cepat dan menghemat memori penyimpanannya,
2. bagaimana kompleksitas (notasi Big-O) pada algoritma Shannon-Fano, Arithmetic Coding, dan Huffman, dan
3. bagaimana kompleksitas waktu kompresi dan dekompresi terbaik dan terburuk di antara algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
1.3 Batasan Masalah
Ruang lingkup penelitian ini dibatasi pada:
1. jenis berkas yang dikompresi adalah teks dengan format *.txt dan citra digital dengan format *.bmp,
2. kinerja algoritma dianalisis berdasarkan waktu kompresi, rasio kompresi, faktor kompresi, saving percentage, panjang karakter, waktu dekompresi, dan kompleksitas algoritma (notasi Big-O), dan
3. bahasa pemrograman yang digunakan adalah Java dengan editor Netbeans IDE 7.0.1.
1.4 Tujuan Penelitian
Tujuan dari penelitian ini adalah:
1. mengetahui algoritma yang optimal di antara algoritma Shannon-Fano, Arithmetic Coding, dan Huffman dalam kompresi berkas teks dan berkas citra digital melalui analisis kinerja algoritma,
(20)
2. mengetahui kompleksitas algoritma (notasi Big-O) pada algoritma
Shannon-Fano, Arithmetic Coding, dan Huffman, dan
3. mengetahui kompleksitas waktu kompresi dan dekompresi terbaik dan terburuk di antara algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
1.5 Manfaat Penelitian
Manfaat yang diharapkan dari penelitian ini adalah menentukan algoritma yang optimal dalam proses kompresi teks dan citra digital sehingga dapat meminimalkan pemakaian memori ataupun bandwidth, mempercepat proses pengiriman data, serta sebagai bahan referensi mengenai algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
1.6 Metode Penelitian
Adapun tahapan-tahapan yang dilakukan dalam merancang dan mengembangkan penelitian ini adalah sebagai berikut:
1. Studi Literatur
Pada tahap ini dipelajari teori tentang berkas teks, berkas citra digital, dan algoritma kompresi.
2. Analisis sistem.
Pada tahap ini dianalisis proses kerja kompresi menggunakan algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
3. Perancangan sistem.
Pada tahap ini dilakukan perancangan sistem yang meliputi perancangan proses kerja sistem, perancangan interface, serta algoritma pemrograman.
4. Implementasi sistem.
Pada tahap ini dilakukan implementasi hasil analisis dan perancangan sistem ke dalam bahasa pemrograman.
5. Pengujian sistem.
Pada tahap ini dilakukan pengujian aplikasi untuk mengetahui apakah aplikasi sudah berjalan sesuai dengan tujuan penelitian atau tidak, dan mengevaluasi hasil analisis masing-masing algoritma.
(21)
Pada tahap ini dilakukan dokumentasi hasil analisis dan perancangan yang digunakan untuk menuangkan hasil penelitian tersebut ke dalam laporan akhir dalam bentuk skripsi.
1.7 Sistematika Penulisan
BAB 1: PENDAHULUAN
Bab ini membahas konsep dasar penyusunan skripsi, yaitu mengenai latar belakang pemilihan judul “Analisis Perbandingan Kinerja Algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada Kompresi Berkas Teks dan BerkasCitra Digital”, rumusan masalah, batasan masalah, tujuan penulisan, manfaat penulisan, metode penelitian dan sistematika penulisan.
BAB 2: TINJAUAN PUSTAKA
Bab ini membahas dasar teori yang menunjang penulisan skripsi mengenai teori-teori yang mendukung penelitian.
BAB 3: ANALISIS DAN PERANCANGAN
Bab ini membahas analisis langkah-langkah dalam pembangunan sistem dan pemodelan sistem secara fungsional.
BAB 4: IMPLEMENTASI DAN PENGUJIAN
Bab ini membahas implementasi dan pengujian aplikasi yang telah selesai dibangun dengan algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
BAB 5: KESIMPULAN DAN SARAN
Bab ini membahas kesimpulan isi dari keseluruhan uraian bab-bab sebelumnya dan saran-saran dari hasil yang diperoleh yang diharapkan dapat bermanfaat untuk pengembangan selanjutnya.
(22)
BAB 2
LANDASAN TEORI
2.1Definisi Data
Data merupakan bahan baku informasi, dapat didefinisikan sebagai kelompok teratur simbol-simbol yang mewakili kuantitas, fakta, tindakan, benda dan sebagainya (Supriyanto & Muhsin, 2008: 69). Data terbentuk dari karakter, dapat berupa alfabet, angka, maupun simbol khusus seperti *,$ dan /. Data disusun mulai dari bits, bytes, fields, records, file dan database.
Sistem informasi menerima masukan data dan instruksi, mengolah data tersebut sesuai instruksi, dan mengeluarkan hasilnya. Fungsi pengolahan informasi sering membutuhkan data yang telah dikumpulkan dan diolah dalam periode sebelumnya, karena itu ditambahkan sebuah penyimpanan data file (data file storage) ke dalam model sistem informasi. Dengan begitu, kegiatan pengolahan tersedia, baik bagi data baru maupun data yang telah dikumpulkan dan disimpan sebelumnya.
Data Proses Informasi
Gambar 2.1 Model Dasar Sistem Informasi
Masukan Pengolahan Informasi
Penyimpanan
(23)
Tablespace
SYSTEM Tablespace 1 Tablespace 2
Database
Segment 1 Segment 2
Segment 3
Extend 1
Extend 2
Data Block Tablespace
Segment
Gambar 2.3 Susunan Data
Sistem di komputer akan mengorganisasi data dalam sebuah hirarki yang terdiri dari satuan-satuan bit, byte, field, record, file, dan database.Bit merupakan unit
data yang terkecil, tingkatan terendah; singkatan dari binary digit (Joos et al, 2009:
12). Byte adalah kumpulan dari kombinasi bits, biasanya terdiri 8 bit yang menjadi
unit terkecil dalam storage dan mempunyai alamat, sering kali menjadi bagian dari
word (Supriyanto et al, 2008: 71). Field merupakan karakter-karakter yang
membentuk arti tertentu, misalnya field untuk nomor mahasiswa, dan sebagainya
Record adalah kumpulan dari fields yang membentuk sebuah arti yang saling berhubungan. (Noersasongko, 2010: 36). File adalah kumpulan dari records yang sejenis, contoh file tentang kepegawaian di berbagai departemen di sebuah instansi (Supriyanto et al, 2008: 71). Database adalah sekumpulan data yang berhubungan secara logika dan memiliki beberapa arti yang saling berpautan (Mata-Toledo, 2007: 1).
2.2 Kompresi Data
Proses kompresi merupakan proses mereduksi ukuran suatu data untuk menghasilkan representasi digital yang padat atau mampat (compact) namun tetap dapat mewakili
kuantitas informasi yang terkandung pada data tersebut. Tujuan dari kompresi data adalah untuk mengurangi data berlebihan (redundancy) sehingga ukuran data menjadi
(24)
lebih kecil dan lebih ringan dalam proses transmisi dan menghemat ruang memori dalam penyimpanan data (Putra, 2010: 261).
Ada beberapa faktor yang memunculkan data berlebihan sehingga harus diperlukan proses kompresi. Faktor-faktor tersebut antara lain sebagai berikut:
1. pada suatu citra tunggal atau pada frame tunggal video dapat terjadi korelasi
yang signifikan antara suatu piksel dengan piksel tetangga. Korelasi ini disebut dengan korelasi spasial (spatial correlation),
2. pada data yang diambil dari beberapa sensor (multi sensor), terdapat korelasi yang signifikan antarsampel yang diambil oleh sensor-sensor tersebut. Korealasi ini disebut dengan korelasi spektral (spectral correlation),
3. pada data temporal seperti video, terdapat korelasi yang signifikan antara sampel data pada segmen waktu yang berbeda. Korelasi ini disebut sebagai korelasi temporal (temporal correlation),
4. pada suatu data terdapat informasi yang tidak relevan dengan sudut pandang persepsi mata.
2.3 Data Berlebihan (Data Redundancy)
Terdapat beberapa faktor yang memunculkan data berlebihan (data redundancy). Data
berlebihan ini dapat dinyatakan secara sistematis. Bila n1 dan n2 menyatakan jumlah satuan (unit) informasi dalam dua himpunan data (data set) yang mewakili data yang
sama maka data berlebihan relatif (relative data redundancy) RD dari himpunan data pertama dinyatakan sebagai berikut:
�� = 1−�1
� ... (1) Dimana RD merupakan redundansi, dan CR merupakan rasio kompresi.
Rasio kompresi (CR ) dinyatakan sebagai berikut: �� =��1
2 ... (2) Dimana n1 merupakan nilai dari data hasil kompresi, dan n2 merupakan nilai dari data asli.
Bila n1 = n2 maka CR = 1 dan RD = 0, berarti bahwa data set pertama tidak mengandung data berlebihan. Bila n2 < n1 (n2 jauh lebih kecil dari n1) maka CR mendekati 1 tak terhingga, sehingga RD mendekati 1. Ini berarti terjadi kandungan
(25)
mendekati 0, sehingga RD mendekati minus tak terhingga. Ini berarti data set kedua mengandung informasi jauh lebih banyak dibandingkan data set pertama. Secara umum, CR dan RD berturut-turut beada dalam interval (1,∞) dan (-∞,1). Dalam praktik, rasio kompresi 20 (atau 20:1) berarti data set pertama mengandung 20 satuan (unit) informasi untuk setiap 1 unit pada data set kedua (atau pada data terkompresi). Dengan kata lain, untuk kasus citra, citra asli (citra belum termampatkan) mengandung 20 bit informasi untuk setiap 1 bit pada data terkompresi. Redundansi
0.8 berarti 80% data pada data set pertama adalah berlebihan.
2.4 Teknik Kompresi Citra
Menurut Putra (2010), ada dua teknik yang dapat dilakukan dalam memampatkan citra digital.
1. Kompresi Lossless
Pada kompresi jenis ini informasi yang terkandung pada berkas hasil sama dengan informasi pada berkas asli. Berkas hasil proses kompresi dapat dikembalikan secara sempurna menjadi berkas asli, tidak terjadi kehilangan informasi, tidak terjadi kesalahan informasi. Oleh karena itu metode ini disebut juga error free compression.
Pada kompresi lossless, karena harus mempertahankan kesempurnaan
informasi, sehingga hanya terdapat proses coding dan decoding, tidak terdapat
proses kuantitasi. Kompresi tipe ini cocok diterapkan pada berkas basis data (database), spread sheet, berkas word processing, citra biomedis dan lain
sebagainya. 2. Kompresi Lossy
Kompresi data yang bersifat lossy mengijinkan terjadinya kehilangan sebagian
data tertentu dari pesan tersebut, sehingga dapat menghasilkan rasio kompresi yang tinggi. Apabila berkas terkompresi direkonstruksi kembali maka hasilnya tidak sama dengan berkas aslinya, tetapi informasi yang terkandung tidak sampai berubah atau hilang. Sebagian besar kompresi data lossy memiliki pengaturan tingkat kompresi berbeda-beda. Hal ini dilakukan agar kompresinya lebih efektif dan informasi yang terkandung pada berkas tidak sampai berubah dan hilang. Kompresi data lossy ini efektif jika diterapkan
(26)
pada penyimpanan data analog yang didigitasi seperti gambar, video, dan suara.
Ilustrasi kompresi lossless dan lossy dapat dilihat pada Gambar 2.4 dan Gambar 2.5.
Algoritma
Coding
Algoritma
Decoding
000011100101011
000011100101011 BAABBA
BAABBA
Gambar 2.4 Ilustrasi Kompresi Lossless
Algoritma
Coding
Algoritma
Decoding
000110001010110 BAABBA
BAABA 000110001010110
Gambar 2.5 Ilustrasi Kompresi Lossy
2.5 Berkas Teks
Berkas teks merupakan berkas yang terdiri dari karakter yang terenkode melalui ASCII menjadi byte dan tersimpan dalam urutan yang sederhana. Format ini hanya menyimpan string yang terdapat dalam berkas, tanpa ada informasi tentang format, jenis font, ukuran halaman dan sebagainya. Berkas ini dapat dibuka, dibaca dan dimodifikasi di semua komputer. Rincian format tersedia secara bebas dan standar. Jika media penyimpanan rusak, maka bagian yang tidak rusak dapat dikembalikan tanpa menimbulkan masalah.
(27)
2.6 Citra Digital
Citra digital merupakan obyek nyata yang direpresentasi secara elektronis (Mulyanta, 2006: 5). Obyek dapat bersumber dari dokumen, foto, barang cetakan, hingga lukisan. Unsur utama citra digital adalah grid berisi elemen obyek yang sangat dasar, yaitu picture element (piksel). Setiap piksel mempunyai tingkatan nilai tertentu, sehingga
menghasilkan representasi data yang ditangkap oleh mata manusia sebagai bentuk tingkatan warna hitam, putih, abu-abu, hingga penuh dengan warna.
Setiap bit dalam piksel akan disimpan dalam urutan tertentu oleh komputer dengan penghitungan matematis agar menghasilkan file yang optimal dibaca oleh media perangkat yang mendukungnya. Setiap informasi bit digital akan diinterpretasikan dan dibaca oleh komputer agar menghasilkan versi analog untuk ditampilkan dan dicetak oleh media lain. Versi yang dilihat oleh mata manusia adalah data bersifat analog yang dirangkat oleh peralatan digital pada media komputer.
1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 1
1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 0 1
1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1
1 0 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1
Gambar 2.6 Nilai-nilai pada Piksel
Gambar 2.6 memperlihatkan bahwa bentuk-bentuk obyek dihasilkan dari kombinasi nilai 0 untuk warna hitam dan 1 untuk warna putih, sehingga membentuk
bitonal image. Bitonal image tidak mengenal gradasi warna, sehingga citra yang
dihasilkan mempunyai kesan sangat kaku dan tidak alami.
2.7 Pengolahan Citra Digital
Pengolahan citra digital adalah sebuah disiplin ilmu yang mempelajari hal-hal yang berkaitan dengan perbaikan kualitas gambar (peningkatan kontras, transformasi warna, restorasi citra), transformasi gambar (rotasi, translasi, skala, transformasi geometrik), melakukan pemilihan citra ciri (feature images) yang optimal untuk
(28)
tujuan analisis, melakukan proses penarikan informasi atau deskripsi obyek atau pengenalan obyek yang terkandung pada citra, melakukan kompresi atau reduksi data untuk tujuan penyimpanan data, transmisi data, dan waktu proses data. Masukan dari pengolahan citra adalah citra, sedangkan keluarannya adalah citra hasil pengolahan (Sutoyo, 2009: 5).
2.8 Format Berkas Bitmap (*.bmp)
Gambar bitmap adalah citra yang dihasilkan oleh sejumlah titik berwarna-warni yang disebut piksel. Piksel-piksel itu ditempatkan pada suatu bidang matriks. Warna-warna piksel yang sama atau senada yang berada pada suatu area dan berdampingan dengan warna-warna dapat menimbulkan nuansa bentuk. Gabungan dari beberapa nuansa itu ditangkap oleh mata manusia sebagai citra atau gambar (Budijanto, 2006: 253).
Format *.bmp adalah format penyimpanan standar tanpa kompresi umum yang dapat digunakan untuk menyimpan citra biner hingga citra warna. Format ini terdiri dari beberapa jenis yang setiap jenisnya ditentukan dengan jumlah bit yang digunakan untuk menyimpan sebuah nilai piksel (Putra, 2010:58).
Struktur dari format *.bmp dapat dilihat pada Gambar 2.7.
Header
berkas
Header
bitmap
Informasi
palet Data bitmap 14 byte 12-64 byte 0-1024 byte N byte
Gambar 2.7 Struktur Format Berkas *.bmp
Berkas dengan format *.bmp memerlukan memori penyimpanan yang besar, karena berkas ini merupakan format yang belum terkompresi dan menggunakan sistem warna Red, Green, Blue (RGB) dimana masing-masing warna pikselnya terdiri dari 3 komponen yang dicampur menjadi satu.
2.9 Informasi Teori dan Entropi
Kompresi data memanfaatkan teori informasi karena kompresi menitikberatkan pada masalah redundansi. Informasi yang berulang pada data menimbulkan bit tambahan
(29)
pada pengkodean. Jika informasi tambahan itu bisa diambil, maka data yang diperlukan tersebut bisa direduksi.
Teori informasi memanfaatkan terminologi entropi sebagai tolak ukur
seberapa besar informasi yang dikodekan pada sebuah data. Menurut Adriani (2009),
entropi merupakan suatu ukuran informasi yang dikandung oleh suatu citra dan
digunakan sebagai ukuran untuk mengukur kemampuan kompresi dari data. Entropi
memiliki persamaan matematis sebagai berikut:
�(�) = − ∑ ���=1 ����2�� ... (3) Dimana m merupakan jumlah simbol dan pi merupakan probabilitas simbol ke-i. Semakin kecil nilai entropi yang dihasilkan, maka kemampuan kompresi lebih baik.
Entropi juga didefinisikan sebagai limit kemampuan kompresi citra yang tidak dapat
dilampau oleh algoritma manapun.
2.10 Algoritma Shannon-Fano
Algoritma Shannon-Fano dinamai berdasarkan nama pengembangnya yaitu Claude Shannon dan Robert Fano. Metode ini dimulai dengan deretan dari simbol n dengan kemunculan frekuensi yang diketahui. Mula-mula simbol disusun secara menaik (ascending order) berdasarkan frekuensi kemunculannya. Lalu set simbol tersebut dibagi menjadi dua bagian yang berbobot sama atau hampir sama. Seluruh simbol yang berada pada subset I diberi biner 0, sedangkan simbol yang berada pada subset II diberi biner 1. Setiap subset dibagi lagi menjadi dua subsubset dengan bobot kemunculan frekuensi yang kira-kira sama, dan biner kedua diberikan seperti subset I dan subset II. Ketika subset hanya berisi dua simbol, biner diberikan pada setiap simbol. Proses akan berlanjut sampai tidak ada subset yang tersisa (Salomon: 2010).
Algoritma Shannon-Fano merupakan kompresi yang bersifat lossless, dimana
metode ini harus mendekompresi berkas agar dapat direkonstruksikan menjadi berkas semula tanpa kehilangan informasi.
2.11 Algoritma Arithmetic Coding
Arithmetic Coding diperkenalkan pada tahun 1970-an, metode ini memiliki efisiensi yang baik dan implementasinya pada perangkat keras sangat fleksibel. Topik tentang algoritma ini pertama kali diberikan oleh Abramson dan Peter Elias pada tahun 1960,
(30)
namun pada saat itu metode ini belum memenuhi solusi yang pantas untuk masalah yang akan dihadapi, yaitu keakurasian Arithmetic Coding harus ditingkatkan dengan panjang dari pesan yang dimasukkan. Untungnya, pada tahun 1976 Pasco dan Rissanen membuktikan bahwa panjang angka yang terbatas sebenarnya memadai untuk encoding, tanpa mengurangi akurasinya. Pada tahun 1979 – 1980, Rubin,
Guazzo, Rissanen, dan Langdon mempublikasikan algoritma dasar encoding yang
masih digunakan sampai sekarang. Algoritma ini berdasarkan ketelitian aritmatik yang terbatas (Bodden et al, 2007)
Arithmetic Coding menggantikan satu deretan simbol input dengan sebuah
bilangan floating point. Semakin panjang dan semakin kompleks pesan yang
dikodekan, semakin banyak bit yang diperlukan untuk keperluan tersebut. Output dari
metode ini adalah satu angka yang lebih kecil dari 1 dan lebih besar atau sama dengan 0. Angka ini secara unik dapat di-encode sehingga menghasilkan deretan simbol yang dipakai untuk menghasilkan angka tersebut (Salomon, 2010).
2.12 Algoritma Huffman
Metode ini dikembangkan oleh David Huffman sebagai bagian dari tugas kuliahnya. Kelas tersebut merupakan bagian dari teori informasi dan diajarkan oleh Robert Fano di MIT. Kode yang dihasilkan menggunakan metode ini dinamakan Huffman Codes.
Kode ini merupakan kode prefiks dan optimal untuk model yang diberikan.
Menurut Sayood (2012), prosedur algoritma Huffman berdasarkan dua penelitian mengenai kode prefix yang optimum, yaitu:
1. Simbol yang mempunyai frekuensi kemunculan lebih sering akan memiliki
code word yang lebih pendek dari simbol lainnya.
2. Dua simbol yang mempunyai frekuensi kemunculan paling sedikit akan memiliki code word dengan panjang yang sama.
Algoritma Huffman merupakan kompresi yang bersifat lossless, dimana
metode ini harus mendekompresi berkas agar dapat direkonstruksikan menjadi berkas semula tanpa kehilangan informasi.
(31)
2.13 Kompleksitas Algoritma (Notasi Big-O)
Dalam aplikasinya, setiap algoritma memiliki dua buah ciri yang khas yang dapat digunakan sebagai parameter pembanding, yaitu jumlah proses yang dilakukan dan jumlah memori yang digunakan untuk melakukan proses. Jumlah proses ini dikenal sebagai kompleksitas waktu yang disimbolkan dengan T(n), sedangkan jumlah memori ini dikenal sebagai kompleksitas ruang yang disimbolkan dengan S(n).
Kenyataannya, jarang sekali dibutuhkan kompleksitas waktu yang detail dari suatu algoritma. Biasanya yang dibutuhkan hanyalah bagian paling signifikan dari kompleksitas waktu yang sebenarnya. Kompleksitas waktu ini dinamakan kompleksitas waktu asimptotik yang dinotasikan dengan O (O-besar atau Big-O). Kompleksitas waktu asimptotik ini diperoleh dengan mengambil term terbesar dari suatu persamaan kompleksitas waktu.
Misalnya jika diperoleh waktu eksekusi dari suatu algoritma T(n) adalah sebanyak 5n3+4n+3 langkah untuk besar input sebesar n, maka akan lebih mudah
untuk menghapus pangkat yang kecil seperti 4n dan 3 karena keduanya tidak terlalu signifikan terhadap input n. Koefisien 5 pada 5n3 juga dihilangkan dengan anggapan
bahwa komputer beberapa tahun kedepan akan menjadi 5 kali lipat lebih cepat dari komputer sekarang, sehingga keberadaan koefisien 5 juga tidak terlalu signifikan. Maka waktu yang diperlukan oleh algoritma tersebut untuk memproses input sebesar
n adalah n3, atau biasa dituliskan Big-O=n3 (Dasgupta et al, 2006).
Notasi Big-O yang sering dijumpai pada algoritma antara lain:
1. O(1) – constant time
Algoritma yang menghasilkan nilai selalu tetap tanpa bergantung kepada banyak masukan.
2. O(2log n) – logarithmic time
Algoritma yang berdasarkan pada binary tree biasanya memiliki kompleksitas O(log n).
3. O(n) – linear time
Algoritma dengan kompleksitas O(n) membutuhkan 1 kali proses untuk masing-masing masukan.
(32)
4. O(n 2log n) – linearithmic time
Algoritma yang memecahkan masalah menjadi masalah yang lebih kecil, lalu menyelesaikan tiap masalah secara independen.
5. O(n2) – quadratic time
Algoritma yang melibatkan proses perulangan bersarang (nested loop).
6. O(n3) – cubic time
Algoritma dengan kompleksitas O(n3) mirip dengan O(n2), namun
menggunakan loop bersarang sebanyak 3 kali. Algoritma sejenis ini hanya
cocok jika n kecil. Jika n besar, waktu yang dibutuhkan akan sangat lama. 7. O(2n) – exponential time
Salah satu algoritma yang mempunyai kompleksitas O(2n) adalah brute force
dalam menebak suatu password. Setiap penambahan karakter, akan melipatgandakan waktu yang dibutuhkan.
8. O(n!) – factorial time
O(n!) merupakan kompleksitas yang sangat cepat pertumbuhan waktu yang diperlukannya. Algoritma ini memproses setiap masukan dan menghubungkannya dengan n-1 masukan lainnya.
2.14 Evaluasi Kinerja Algoritma
Beberapa parameter untuk evaluasi kinerja algoritma, antara lain: 1. Rasio Kompresi
Rasio Kompresi merupakan rasio antara ukuran dari berkas terkompres dan berkas asli.
����������������= ������������������� ���������������������� ... (4) 2. Faktor Kompresi
Faktor kompresi merupakan invers dari rasio kompresi, yaitu hubungan antara berkas asli dan berkas terkompres.
�����������������= ���� ������ �����������
���� ����� ����������� ... (5) 3. Saving Percentage (SP)
Saving percentage menghitung pemampatan dari berkas asli sebagai
(33)
��= ���������� ����������� −�������� ������ ���������������� ����������� % .. ... (6)
2.15 Penelitian yang Relevan
2.15.1 Studi Perbandingan Kinerja Algoritma Kompresi Shannon-Fano dan
Arithmetic Coding pada Citra Digital
Pada penelitian Andriani (2009) yang berjudul Studi Perbandingan Kinerja Algoritma Kompresi Shannon-Fano dan Arithmetic Coding pada Citra Digital, perbandingan kinerja algoritma kompresi bertujuan untuk mengetahui performansi masing-masing algoritma terhadap citra digital. Untuk mengetahui performansi hasil proses kompresi dilakukan melalui perhitungan rasio kompresi, ukuran file hasil kompresi, kecepatan proses kompresi dan dekompresi dan nilai PSNR. Berdasarkan seluruh hasil pengujian, sistem kompresi menggunakan Arithmetic Coding Coding memiliki performansi yang baik berdasarkan rasio kompresi serta ukuran file hasil kompresi, sedangkan dari segi kecepatan proses kompresi dan dekompresi algoritma Shannon-Fano lebih baik daripada algoritma Arithmetic Coding.
2.15.2 Analisis Kinerja dan Implementasi Algoritma Kompresi Arithmetic Coding pada File Teks dan Citra Digital
Pada penelitian Sarifah (2010) yang berjudul Analisis Kinerja dan Implementasi Algoritma Kompresi Arithmetic Coding pada File Teks dan Citra Digital, penelitian
diimplementasi menggunakan Matlab 7.5.0. Analisis kinerja algoritma ini bertujuan untuk mengetahui performansi algoritma ini pada file teks dan citra digital. Untuk
mengetahui performansi hasil proses kompresi dilakukan melalui perhitungan rasio kompresi, ukuran file hasil kompresi, kecepatan proses kompresi dan dekompresi dan
kualitas dari hasil dekompresi. Berdasarkan seluruh hasil pengujian, sistem kompresi menggunakan algoritma Arithmetic Coding sangat baik untuk file teks karena menghasilkan rasio yang cukup besar dan menggunakan waktu kompresi dan dekompresi yang tidak begitu lama. Dan algoritma ini juga dapat di implementasikan untuk citra digital karena juga menghasilkan rasio yang besar dan waktu kompresi dan dekompresi yang cepat.
(34)
2.15.3 Implementasi Algoritma Huffman pada Kompresi Citra BMP
Pada penelitian Ginting (2012) yang berjudul Implementasi Algoritma Huffman pada Kompresi Citra BMP, penelitian diimplementasikan menggunakan Microsoft Visual Basic 2008. Implementasi algoritma Huffman tersebut bertujuan untuk mengkompresi citra bmp sehingga ukuran file hasil kompresi lebih kecil dibandingkan dengan ukuran
citra asli dimana parameter yang digunakan untuk mengukur kinerja algoritma adalah rasio kompresi yang dihasilkan. Berdasarkan dari seluruh hasil pengujian, hasil kompresi citra menggunakan algoritma Huffman hanya mencapai tingkat rasio 2% - 8% untuk citra yang mengandung banyak variasi warna sedangkan untuk citra yang mengandung sedikit variasi warna (duplikasi warna) tingkat rasionya dapat mencapai hingga 80%.
2.15.4 Analisis Perbandingan Teknik Kompresi Menggunakan Algoritma Shannon-Fano, dan Run Length Encoding pada Citra Berformat BMP dan PNG.
Pada penelitian Nasution (2012) yang berjudul Analisis Perbandingan Teknik Kompresi Menggunakan Algoritma Shannon-Fano, dan Run Length Encoding pada Citra Berformat BMP dan PNG, penelitian diimplementasikan menggunakan Microsoft Visual Basic 6.0. Parameter pembanding analisis teknik kompresi tersebut adalah rasio dan kecepatan kompresi. Dari hasil pengujian file citra yang telah dikompreesi dengan algoritma Shannon-Fano dan Run Length Encoding pada citra format BMP memiliki rasio kompresi 29,32% dan waktu 18 detik. Algoritma Shannon-Fano pada citra format PNG memiliki rasio kompresi -7,9% dan waktu 12 detik, dan Run Length Encoding pada citra format PNG rasio kompresi -1% dan waktu rata-rata 12 detik.
(35)
BAB 3
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Analisis sistem merupakan tahap awal dalam sebuah penelitian yang bertujuan mengetahui masalah terkait dalam pembuatan sebuah sistem dan menggambarkan proses-proses yang ada di dalam sistem untuk menghasilkan keluaran yang sesuai dengan kebutuhan pemakai (user).
3.1.1 Ruang lingkup masalah
Tools yang digunakan untuk membuat aplikasi kompresi Shannon-Fano, Arithmetic Coding, dan Huffman ini adalah NetBeans IDE 7.0.1. Desain interface yang ada
dalam aplikasi ini berupa tampilan form aplikasi untuk proses kompresi dari berkas teks dengan format *.txt atau berkas citra dengan format *.bmp yang dimasukkan secara digital beserta properties dari masing-masing algoritma kompresi dan untuk
proses dekompresi dari berkas dengan format *.sf, *.ar, atau *.hf beserta properties
dari masing-masing algoritma dekompresi. Tujuan dari adanya properties ini adalah
sebagai parameter yang menentukan algoritma optimal pada kompresi berkas teks atau berkas citra digital.
3.1.2 Analisis masalah
Penyebab dan akibat yang akan mempengaruhi aplikasi Shannon-Fano, Arithmetic Coding, dan Huffman pada kompresi berkas teks dan berkas citra digital dijabarkan pada Tabel 3.1.
(36)
Tabel 3.1 Penyebab dan Akibat
Analisis Penyebab dan Akibat Perbaikan Tujuan Sistem Masalah atau
Peluang Masalah
Penyebab dan
Akibat Tujuan Sistem Kendala Sistem 1. Ukuran dari
berkas teks dan berkas citra digital besar. 2. Banyak algoritma yang dapat diterapkan untuk kompresi berkas.
1. Proses transmisi data (berkas teks atau berkas citra digital) lambat. 2. Membutuhkan
memori yang besar untuk menyimpan berkas teks atau berkas citra digital. 1. Dibutuhkan aplikasi untuk proses kompresi dan dekompresi berkas.
1. Tidak tersedianya aplikasi kompresi dan dekompresi berkas yang menggunakan algoritma Shannon-Fano, Arithmetic Coding, dan Huffman.
Penyebab dan akibat pada Tabel 3.1 merepresentasikan sejumlah analisis masalah yang mempengaruhi aplikasi kompresi. Selanjutnya, masalah-masalah tersebut didekomposisi untuk mendapatkan rincian masalah yang lebih detil sebagai bahan pertimbangan untuk menghasilkan solusi teknis.
Adapun dekomposisi masalah tersebut digambarkan dengan diagram ishikawa
dan dapat dilihat pada Gambar 3.1.
Ukuran berkas teks atau berkas citra digital besar Sulit untuk memampatkan
berkas dengan cepat
Boros memori penyimpanan berkas Tidak ada aplikasi
kompresi dan dekompresi berkas dengan menggunakan algoritma Shannon-Fano,
Arithmetic Coding, dan Huffman
Machine / Tools Materials
Methods Man
Banyaknya algoritma kompresi yang dapat diterapkan
(37)
3.1.3 Analisis kebutuhan
Analisis kebutuhan suatu sistem dikelompokkan menjadi 2 bagian, yaitu analisis fungsional dan analisis non-fungsional. Fungsional sistem adalah aktivitas dan pelayanan yang harus dimiliki oleh sebuah sistem yang dapat berupa input, output,
proses maupun data yang tersimpan. Terkait dengan tahapan analisis perbandingan kinerja algoritma kompresi, khususnya analisis fungsional, tentunya sistem yang diinginkan dapat:
1. memampatkan berkas teks atau berkas citra digital, 2. menampilkan properties dari kinerja algoritma kompresi,
3. mendekompresi berkas yang telah dimampatkan, dan 4. menampilkan properties dari kinerja algoritma dekompresi.
Non-fungsional sistem adalah karakteristik atau batasan yang menentukan kepuasan sebuah sistem yakni seperti kinerja, kemudahan penggunaan, anggaran, serta tenggat waktu yang mampu bekerja tanpa mengganggu fungsionalitas sistem lainnya. Non-fungsional sistem dari sistem yang dibangun dari segi performance adalah sistem
memiliki kemampuan dalam melakukan kompresi berkas teks dan berkas citra digital dengan baik. Dari segi information adalah kemampuan sistem dalam menyediakan
pesan konfirmasi keberhasilan proses kompresi dan dekompresi berkas. Dari segi
economic adalah kemampuan sistem bekerja dengan baik tanpa biaya (cost) perangkat
lunak dan perangkat keras, sehingga penggunaannya tidak mengeluarkan biaya ekstra.
3.1.4 Desain logis
Model yang dihasilkan berdasarkan analisis di atas menunjukkan apa saja yang ada dalam aplikasi Shannon-Fano, Arithmetic Coding, dan Huffman pada kompresi berkas teks dan berkas citra digital, dan bagaimana bagian-bagian sistem tersebut diintegrasikan sehingga membentuk sistem yang utuh. Hal tersebut merupakan solusi yang memenuhi kebutuhan yang telah dianalisis. Desain logis yang digunakan pada penelitian ini antara lain:
1. Diagram Use case
Diagram ini menggambarkan fungsionalitas yang diharapkan dari Aplikasi Kompresi, dan bagaimana sistem akan bekerja, meliputi interaksi antara aktor dengan sistem.
(38)
Pada sistem aplikasi kompresi terdapat satu aktor yaitu user. Untuk
mendapatkan use case dari aktor, maka harus ditentukan hal-hal apa saja yang dapat dilakukan pemain pada sistem. Hal-hal yang dapat dilakukan oleh aktor antara lain:
a. melakukan kompresi berkas, b. melakukan dekompresi berkas, c. melihat halaman Tentang Aplikasi.
Diagram use case yang terjadi berdasarkan aktor dan use case yang telah diperoleh dapat dilihat pada Gambar 3.2.
Kompresi
Tentang Aplikasi Dekompresi
Gambar 3.2 Diagram Use Case pada Aplikasi Kompresi
Dokumentasi naratif untuk proses kompresi yang terdapat dalam diagram use case dijabarkan pada Tabel 3.2.
(39)
Tabel 3.2 Dokumentasi Naratif Use Case Kompresi
Nama Use Case Kompresi
Aktor User
Deskripsi Use casejendela “Kompresi” dari Aplikasi Kompresi. ini mendeskripsikan proses menampilkan Pra-kondisi Sudah masuk ke tampilan Aplikasi Kompresi
Bidang khas suatu kejadian
Kegiatan Aktor Respon Sistem 1. Klik menu “File”
2. Klik menu item
“Kompresi”
4. Klik button “Cari
File”
7. Klik button
“Kompres”
3. Menampilkan jendela “Kompresi” 5. Membaca berkas
yang telah
dimasukkan aktor 6. Menampilkan
properties berkas yang telah
dimasukkan aktor 8. Melakukan proses
kompresi dari berkas yang dimasukkan aktor 9. Menampilkan
properties berkas yang telah
dikompresi Pasca-kondisi Aplikasi dilanjutkan tanpa perubahan
Dokumentasi naratif untuk proses dekompresi yang terdapat dalam diagram
(40)
Tabel 3.3 Dokumentasi Naratif Use Case Dekompresi
Nama Use Case Dekompresi
Aktor User
Deskripsi Use casejendela “Dekompresi” dari Aplikasi Kompresi. ini mendeskripsikan proses menampilkan Pra-kondisi 1.2. Sudah masuk ke tampilan Aplikasi Kompresi, Sudah melakukan proses kompresi.
Bidang khas suatu kejadian
Kegiatan Aktor Respon Sistem 1. Klik menu “File”
2. Klik menu item
“Dekompresi”
4. Klik button “Cari File”
7. Klik button
“Dekompres”
3. Menampilkan jendela
“Dekompresi” 5. Membaca berkas
yang dimasukkan aktor
6. Menampilkan
properties berkas
yang dimasukkan aktor
8. Melakukan proses dekompresi dari berkas yang dimasukkan aktor 9. Menampilkan
properties berkas
yang telah didekompresi Pasca-kondisi Aplikasi dilanjutkan tanpa perubahan
Dokumentasi naratif untuk proses Tentang Aplikasi yang terdapat dalam diagram use case dijabarkan pada Tabel 3.4.
(41)
Tabel 3.4 Dokumentasi Naratif Use Case Tentang Aplikasi
Nama Use Case Tentang Aplikasi
Aktor User
Deskripsi Use casejendela “Tentang Aplikasi” dari Aplikasi Kompresi. ini mendeskripsikan proses menampilkan Pra-kondisi Sudah masuk ke tampilan Aplikasi Kompresi
Bidang khas suatu kejadian
Kegiatan Pemain Respon Sistem 1. Klik menu
“Bantuan” 2. Klik menu item
“Tentang Aplikasi” 3. Menampilkan jendela “Tentang Aplikasi”
Pasca-kondisi Aplikasi dilanjutkan tanpa perubahan 2. Diagram aktivitas
Diagram ini menggambarkan berbagai alir aktivitas dalam Aplikasi Kompresi akan dirancang, mulai dari alir berawal, keputusan yang mungkin terjadi, dan sampai alir tersebut berakhir dapat dilihat pada Gambar 3.3.
(42)
USER SYSTEM
Input berkas
Baca berkas *.bmp
*.txt Pilih Algoritma
Kompresi Shannon-Fano
Menyimpan berkas terkompresi ke direktori Menampilkan properties terkompresi
Menampilkan properties berkas
!= Shannon-Fano
Huffman Kompresi != Kompresi
Pilih Menu
Arithmetic Coding
Input berkas
*.sf
Baca berkas
Menampilkan properties berkas != *.sf
*.ar *.hf Dekompresi
Dekompresi *.sf != *.sf
*.ar *.hf
Dekompresi
Menyimpan berkas terdekompresi ke direktori Menampilkan properties terdekompresi
Tentang Aplikasi Menampilkan Tentang Aplikasi !=Dekompresi
(43)
3. Diagramsekuensial
Diagram ini menggambarkan hubungan statis antara aktor dan lifeline. Hubungan pada proses kompresi berkas terdiri dari proses sebagai berikut: a. pemanggilan berkas,
b. pembacaan isi berkas, c. pemasukkan algoritma,
d. penyimpanan berkas hasil kompresi, dan e. perhitungan properties kompresi.
Diagram sekuensial pada Aplikasi Kompresi dapat dilihat pada Gambar 3.4 dan Gambar 3.5.
(44)
Kompresi Berkas Input Berkas Input berkas
*.txt || *.bmp
Baca Isi Berkas
Baca isi berkas
Input Algoritma
Kode ASCII terkompresi
Simpan Berkas Terkompresi Menghitung Properties
Properties
Algoritma Shannon-Fano, Arithmetic Coding, dan Huffman
Gambar 3.4 Diagram Sekuensial Proses Kompresi
Dekompresi Berkas Input berkas *.sh || *.ar || *.hf
Baca isi berkas
Input Berkas Baca Isi Berkas Input Algoritma Algoritma
Shannon-Fano, Arithmetic Coding, dan Huffman
Simpan Berkas Terkompresi Menghitung Properties
Properties
Kode ASCII terdekompresi
(45)
3.2 Pseudocode
Pseudocode adalah penjelasan dari algoritma pemrograman komputer yang
menggunakan struktur sederhana dari bahasa pemrograman. Biasanya yang ditulis dari
pseudocode adalah variabel dan fungsi. Tujuan penggunaan utama dari pseudocode
adalah untuk memudahkan dalam memahami prinsip-prinsip dari suatu algoritma.
3.2.1 Pseudocode pembacaan berkas
Pada pembacaan berkas, berkas yang dibaca merupakan berkas yang dimasukkan secara digital. Pseudocode pembacaan berkas:
bacafile() {
input file; String keluaran; if (file == "*.txt") {
file = StringBuffer.toString(); }
else if (file == "*.bmp") {
byte[] imageBytes = ByteArrayOutputStream.toByteArray(); file = BASE64Encoder.encode(imageBytes);
}
output keluaran; }
(46)
Input File; String keluaran;
File == *.txt
File = StringBuffer.toString(); File == *.bmp
Output keluaran
Selesai
Mulai
ya ya
tidak tidak
Byte[] imageBytes = ByteArrayOutputStream.toByteArray();
File =
BASE64Encoder.encode(imageBytes);
Gambar 3.6 Flowchart Pembacaan Berkas
3.2.2 Pseudocode pengurutan frekuensi
Pada pengurutan frekuensi, pengurutan dilakukan secara menaik. Pseudocode
pengurutan frekuensi:
sorting() {
array arr_char[int count,String char]; nchar = arr_char.count();
kchar = arr_char.char(); String char temp;
for (int i=0; i<char.length(); i++) {
for (int j=0; j<char.length-1; j++) {
if (nchar[j] > nchar[j+1]) {
temp = nchar[j];
nchar[j] = nchar[j+1]; nchar[(j+1)] = temp; }
(47)
}
(char.length-1)--; }
for (int i=0; i<char.length(); i++) {
output kchar[i],nchar[i]; }
}
Flowchart pengurutan frekuensi karakter dapat dilihat pada Gambar 3.7.
array arr_char[int count,String char]; nchar = arr_char.count();
kchar = arr_char.char(); String char temp;
Mulai
nchar[j] > nchar[j+1]
temp = nchar[j]; nchar[j] = nchar[j+1];
nchar[(j+1)] = temp; ya ya ya
nchar[j].index = j; nchar[j+1].index = j+1;
tidak
Output kchar[i],nchar[i];
Selesai ya int i=0; i<char.length(); i++
int j=0; j<char.length-1; j++
int i=0; i<char.length(); i++ tidak
tidak
tidak
(char.length-1)--;
(48)
3.2.3 Pseudocode kompresi algoritma Shannon-Fano Pseudocode proses kompresi algoritma Shannon-Fano:
split(int my_index) {
if(my_index > 1) {
array my_char[int s0_index, int s1_index, int s0_count, int s1_count];
String g_char, g_code;
s0_char = my_char.length()]; s1_char = my_char.length()]; int i_s0_char = 0;
int i_s1_char = 0;
s0_index = 0; s1_index = my_index-1;
s0_count = my_char[s0_index].g_count(); s1_count = my_char[s1_index].g_count();
s0_char = s_add(my_char[s0_index],s0_char,i_s0_char); i_s0_char++;
s1_char = s_add(my_char[s1_index],s1_char,i_s1_char); i_s1_char++;
karakter_s0 = my_char[s0_index].g_char(); kode_s0 = my_char[s0_index].g_code();
karakter_s1 = my_char[s1_index].g_char(); kode_s1 = my_char[s1_index].g_code();
my_char[s0_index].add_code("1"); output(karakter_s0+" , "+kode_s0); my_char[s1_index].add_code("0"); output(karakter_s1+" , "+kode_s1);
for(int i=0; i<my_index; i++) {
if(!((s1_index-s0_index == 1) || (s1_index-s0_index == - 1)))
{
if(s0_count < s1_count) {
(49)
my_char[s0_index].add_code("1"); s0_char =
s_add(my_char[s0_index],s0_char,i_s0_char); i_s0_char++;
output(karakter_s0+" , "+kode_s0); }
else {
s1_index--;
s1_count += my_char[s1_index].g_count(); my_char[s1_index].add_code("0");
s1_char =
s_add(my_char[s1_index],s1_char,i_s1_char); i_s1_char++;
output(karakter_s1+" , "+kode_s1); }
} }
split(s0_char, i_s0_char); split(s1_char, i_s1_char); }
}
Flowchart proses kompresi algoritma Shannon-Fano dapat dilihat pada Gambar 3.8 dan Gambar 3.9.
Mulai
My_index > 1
array my_char[int s0_index, int s1_index, int s0_count, int s1_count];
String g_char, g_code;
s0_char = my_char.length(); s1_char = my_char.length();
s1_index = my_index-1; s0_count = my_char[s0_index].g_count(); s1_count = my_char[s1_index].g_count(); s0_char = s_add(my_char[s0_index],s0_char,i_s0_char);
i_s0_char++;
s1_char = s_add(my_char[s1_index],s1_char,i_s1_char); i_s1_char++;
ya tidak
a b
(50)
int i=0; i<my_index; i++
karakter_s0 = my_char[s0_index].g_char(); kode_s0 = my_char[s0_index].g_code() karakter_s1 = my_char[s1_index].g_char();
kode_s1 = my_char[s1_index].g_code()
my_char[s0_index].add_code("1"); my_char[s1_index].add_code("0");
s0_count < s1_count ya
ya
tidak
split(s0_char, i_s0_char); split(s1_char, i_s1_char); ya
output (karakter_s0+" , "+kode_s0); output (karakter_s1+" , "+kode_s1);
Selesai s0_index++;
s0_count += my_char[s0_index].g_count(); my_char[s0_index].add_code("1");
s0_char = s_add(my_char[s0_index],s0_char,i_s0_char); i_s0_char++;
s1_index--;
s1_count += my_char[s1_index].g_count(); my_char[s1_index].add_code("0");
s1_char = s_add(my_char[s1_index],s1_char,i_s1_char); i_s1_char++;
! ((s1_index – s0_index == 1) || (s1_index – s0_index == -1)) tidak
tidak
a b
(51)
3.2.4 Pseudocode dekompresi algoritma Shannon-Fano Pseudocode proses dekompresi algoritma Shannon-Fano:
decode() {
String bin, biner;
array tree[String g_char, String g_code]; int binLength = bin.length();
char[] binCharAt = bin.toCharArray();
Stringbuffer bf; biner = "";
for (int i=0; i<binLength; i++) {
biner += binCharAt[i];
for (int j=0; j<tree.length; j++) {
output (biner+" , "+tree[j].g_code()); if (biner.equals(tree[j].g_code())) {
output ("karakter : "+tree[j].g_char()); bf.append(tree[j].g_char());
output ("string : "+bf); biner = "";
} } } }
Flowchart proses dekompresi algoritma Shannon-Fano dapat dilihat pada
(52)
String bin, biner;
array tree[String g_char, String g_code]; int binLength = bin.length(); char[]
binCharAt = bin.toCharArray(); Mulai
int i=0; i<binLength; i++
biner += binCharAt[i];
int j=0; i<treeLength; j++
biner.equals(tree[j].g_code())
bf.append(tree[j].g_char()); biner;
Output tree[j].g_char()+bf; ya
ya
ya
tidak
tidak tidak
Selesai
(53)
3.2.5 Pseudocode kompresi algoritma Arithmetic Coding Pseudocode proses kompresi algoritma Arithmetic Coding:
findDecimal(double low, double high, String text) {
array header[symbol,range_min,range_max]; double min,max;
if(text.length() > 0) {
int i = 0;
while(text.charAt(0) != header.symbol[i] ) {
i++; }
min = low+(high-low)*header.range_min[i]; max = low+(high-low)*header.range_max[i];
text =removeFirstChar(text); findDecimal(min, max, text); }
}
final String findBinary(double a,double b, String result){ if(a<0.5 && b<0.5){
result = findBinary(2*a, 2*b, result+"0"); }else if(a>0.5 && b>0.5){
result = findBinary((a-0.5)*2, (b-0.5)*2, result+"1"); }else if(a==0 && b>=0.5){
result = result+"0"; }else if(a<=0.5 && b==1){ result = result+"1"; }else if(a<=0.5 && b>= 0.5){
result = (1-(2*a)) > (((b-0.5)*2) - 0) ? findBinary(2*a, 1, result+"0") : findBinary(0, (b-0.5)*2, result+"1"); }
return result; }
arithmetic() {
double ifLength; char[] ifCharAt; StringBuffer sb;
(54)
String buff,bin;
ifLength = inputfile.length(); ifCharAt = inputfile.toCharArray(); buff = "";
for (int i=0; i<ifLength; i++) {
buff += ifCharAt[i];
if (buff.length() == 2) {
findDecimal(0,1,buff);
bin = findBinary(min,max,"");
output (buff+ " : " + min + " - " + max + " bin : "+bin); sb.append(bin);
buff = ""; }
}
if (buff.length() == 1) {
findDecimal(0,1,buff);
bin = findBinary(min,max,"");
output (buff+ " : " + min + " - " + max + " bin : "+bin); sb.append(bin);
}
Output sb; }
Flowchart proses kompresi Arithmetic Coding dapat dilihat pada Gambar
(55)
Mulai
Double ifLength; Char[] ifCharAt; StringBuffer sb;
String buff,bin;
ifLength = inputFile.length(); ifCharAt = inputFile.toCharArray();
buff = “”;
int i=0; i<ifLength; i++;
buff += ifCharAt[i];
buff.length() == 2
findDecimal(0,1,buff);
bin = findBinary(min,max,””);
sb.append(bin); buff = “”;
ya ya
tidak
tidak
output (buff+ " : " + min + " - " + max + " bin : "+bin);
a
(56)
buff.length() == 1
findDecimal(0,1,buff);
bin = findBinary(min,max,””);
sb.append(bin); ya tidak
Selesai
a
Output sb;
Gambar 3.12 Flowchart Kompresi Algoritma Arithmetic Coding 2
double low,high; String text;
array
header[symbol,range_min,range_max]; double min,max;
int i = 0; Mulai findDecimal()
text.length() > 0
text.charAt(0) != header.symbol[i]
i++; tidak
ya ya
min = low+(high-low)*header.range_min[i]; max = low+(high-low)*header.range_max[i];
text =removeFirstChar(text); findDecimal(min, max, text);
Selesai tidak
(57)
Mulai findBinary()
Double a,b; String result;
a<0.5 && b<0.5
result = findBinary(2*a, 2*b, result +”0");
a>0.5 && b>0.5
result = findBinary((a-0.5)*2, (b-0.5)*2, result +”1");
ya
ya tidak
a==0 && b>=0.5
result = result +”0"; ya tidak
a<=0.5 && b==1
result = result +”1"; ya
tidak
a<=0.5 && b>= 0.5
result = (1-(2*a)) > (((b-0.5)*2) - 0) ? findBinary(2*a, 1, result+"0") : findBinary(0,
(b-0.5)*2, result+"1"); ya
tidak
result; tidak
Selesai
a
a
(58)
3.2.6 Pseudocode dekompresi algoritma Arithmetic Coding Pseudocode proses dekompresi algoritma Arithmetic Coding:
decodearith() {
int binLength,tempLength;
array binRange[double range_min,double range_max];
array libRange[String libSymbol,double lib_min,double lib_max]; array header[String hsymbol,double h_min,double h_max];
char[] binCharAt,tempCharAt; StringBuffer sb;
String bin,temp;
binLength = bin.length(); binCharAt = bin.toCharArray(); temp = "";
for (int i=0; i<binLength; i++) {
temp += binCharAt[i];
tempLength = temp.length(); tempCharAt = temp.toCharArray();
range_min = 0; range_max = 1;
binRange = binValue(binRange,temp);
for (int j=0; j<libRange.length(); j++) {
if ((libRange[j].lib_min <= binRange.range_min) && (libRange[j].lib_max >= binRange.range_max))
{
sb.append(libSymbol[j]); temp = "";
} } }
if (temp.length() != 0) {
for (int j=0; j<symbolLength; j++) {
(59)
sb.append(hsymbol[j]); temp = "";
} } }
Output sb; }
Flowchart prosesdekompresi algoritma Arithmetic Coding dapat dilihat pada
Gambar 3.15 dan Gambar 3.16.
Mulai
int binLength,tempLength;
array binRange[double range_min,double range_max]; array libRange[String libSymbol,double lib_min, double lib_max];
array header[String hsymbol,double h_min,double h_max]; char[] binCharAt,tempCharAt;
StringBuffer sb; String bin,temp;
binLength = bin.length(); binCharAt = bin.toCharArray();
temp = "";
int i=0; i<binLength; i++;
temp += binCharAt[i]; tempLength = temp.length(); tempCharAt = temp.toCharArray();
range_min = 0; range_max = 1;
binRange = binValue(binRange,temp);
int j=0; j<LibLength; j++;
(libRange[j].lib_min <= binRange.range_min) && (libRange[j].lib_max >= binRange.range_max)
sb.append(libSymbol[j]); temp = “”;
ya
ya tidak
tidak tidak
a
(60)
temp.length() != 0
int j=0; j<symbolLength; j++; ya
header[j].h_min <=binRange.range_min) && (header[j].h_max>=binRange.range_max
sb.append(header.symbol[j]); temp = “”;
ya
tidak
tidak
Output sb; tidak
Selesai a
ya
Gambar 3.16 Flowchart Dekompresi Algoritma Arithmetic Coding 2 3.2.7 Pseudocode kompresi algoritma Huffman
Pseudocode proses kompresi algoritma Huffman:
find_lowest(hufftree[] mytree, int index) {
banding() {
bool kosong = true; int index = 0; int sum = 0; }
banding[0] = new banding(); banding[1] = new banding();
(1)
129
a. Best case Tmin(n) = 54,764 detik, dimana merupakan waktu minimum dari kompresi dan dekompresi berkas uji bee.bmp dengan besar berkas adalah 353,454 kilobytes, dan panjang adalah 353.423 karakter.
b. Worst case Tmax(n)= 459,334 detik, dimana merupakan waktu maksimum dari kompresi dan dekompresi berkas uji butterfly.bmp dengan besar
berkas adalah 1.238,03 kilobytes, dan panjang adalah 1.266.980 karakter.
c. Average case Tave(n) = 238,7398 detik.
Kompleksitas waktu pada analisis algoritma Huffman pada berkas citra dijabarkan pada Tabel 4.54.
Tabel 4.54 Kompleksitas Waktu Algoritma Huffman pada Berkas Citra
Waktu bee.bmp bow.bmp butterfly.bmp flower.bmp rainbow.bmp
Kompresi 1,018 0,394 0,849 0,637 0,612
Dekompresi 0,98 3,655 4,444 4,883 4,722
Jumlah 1,998 4,049 5,293 5,52 5,334
Berdasarkan Tabel 4.54 dapat ditentukan hal-hal sebagai berikut:
1. Kompleksitas waktu kompresi algoritma Huffman pada berkas citra, yaitu: a. Best case Tmin(n) = 0,394 detik, dimana merupakan waktu minimum dari
kompresi berkas uji bow.bmp dengan besar berkas adalah 826,214
kilobytes, dan panjang adalah 826.159 karakter.
b. Worst case Tmax(n) = 1,018 detik, dimana merupakan waktu maksimum dari kompresi berkas uji bee.bmp dengan besar berkas adalah 353,454
kilobytes, dan panjang karakter adalah 353.423 karakter. c. Average case Tave(n) = 0,702 detik.
2. Kompleksitas waktu dekompresi algoritma Huffman pada berkas citra, yaitu: a. Best case Tmin(n) = 0,98 detik, dimana merupakan waktu minimum dari
dekompresi berkas uji bee.bmp dengan besar berkas adalah 353,454
kilobytes, dan panjang karakter adalah 353.423 karakter.
b. Worst case Tmax(n) = 4,883 detik, dimana merupakan waktu maksimum dari dekompresi berkas uji flower.bmp dengan besar berkas adalah
1.931,958 kilobytes, dan panjang adalah 1.266.980 karakter.
c. Average case Tave(n) = 3,7368 detik.
3. Kompleksitas waktu kompresi dan dekompresi algoritma Huffman pada berkas citra, yaitu:
(2)
a. Best case Tmin(n) = 1,998 detik, dimana merupakan waktu minimum dari kompresi dan dekompresi berkas uji bee.bmp dengan besar berkas adalah 353,454 kilobytes, dan panjang karakter adalah 353.423 karakter.
b. Worst case Tmax(n) = 5,52 detik, dimana merupakan waktu maksimum dari kompresi dan dekompresi berkas uji flower.bmp dengan besar berkas
adalah 1.931,958 kilobytes, dan panjang adalah 1.266.980 karakter.
c. Average case Tave(n) = 4,4388 detik.
Kompleksitas waktu pada algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada berkas citra digital dijabarkan pada Tabel 4.55.
Tabel 4.55 Kompleksitas Waktu Algoritma Shannon-Fano, Arithmetic Coding, dan
Huffman pada Berkas Citra
Waktu (detik) Shannon-Fano Arithmetic Coding Huffman
Kompresi 2,8654 4,1772 0,702
Dekompresi 3,8598 234,563 3,7368
Jumlah 6,7252 238,7402 4,4388
Berdasarkan Tabel 4.55 dapat ditentukan hal-hal sebagai berikut:
1. Kompleksitas waktu kompresi algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada berkas citra, yaitu:
a. Best case Tmin(n) = 0,702 detik, dimana merupakan waktu minimum dari kompresi algoritma Huffman.
b. Worst case max(n) = 4,1772 detik, dimana merupakan waktu maksimum dari kompresi algoritma Arithmetic Coding.
c. Average case Tave(n) = 2,581533 detik.
2. Kompleksitas waktu dekompresi algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada berkas citra, yaitu:
a. Best case Tmin(n) = 3,7368 detik, dimana merupakan waktu minimum dari dekompresi algoritma Huffman.
b. Worst case max(n) = 234,563 detik, dimana merupakan waktu maksimum dari dekompresi algoritma Arithmetic Coding.
c. Average case Tave(n) = 80,71987 detik.
3. Kompleksitas waktu kompresi dan dekompresi algoritma Shannon-Fano, Arithmetic Coding, dan Huffman pada berkas citra, yaitu:
(3)
131
a. Best case Tmin(n) = 4,3488 detik, dimana merupakan waktu minimum dari kompresi dan dekompresi algoritma Huffman.
b. Worst case max(n) = 238,7402 detik, dimana merupakan waktu maksimum dari kompresi dan dekompresi algoritma Arithmetic Coding.
(4)
BAB 5
KESIMPULAN DAN SARAN
5.1Kesimpulan
Berdasarkan hasil analisis dan pengujian yang telah dilakukan pada bab sebelumnya, maka kesimpulan yang dapat diambil adalah sebagai berikut:
1. Pada kompresi berkas teks dengan format *.txt dan berkas citra digital dengan format *.bmp dapat disimpulkan bahwa di antara algoritma Shannon-Fano, Arithmetic Coding, dan Huffman, algoritma Shannon-Fano merupakan algoritma yang paling optimal berdasarkan parameter pembanding kinerja algoritma yaitu waktu kompresi, ukuran berkas, rasio kompresi, faktor kompresi, saving percentage, panjang karakter, waktu dekompresi, dan Big-O.
2. Notasi Big-O pada algoritma Shannon-Fano dan Arithmetic Coding adalah
O(n), sedangkan nilai dari notasi Big-O pada algoritma Huffman adalah O(n2).
3. Di antara algoritma Shannon-Fano, Arithmetic Coding, dan Huffman, kompleksitas waktu kompresi dan dekompresi berkas teks terbaik adalah algoritma Shannon-Fano, sedangkan kompleksitas waktu kompresi dan dekompresi berkas citra digital terbaik adalah algoritma Huffman, dan kompleksitas waktu kompresi dan dekompresi berkas teks dan berkas citra digital terburuk terdapat pada algoritma Arithmetic Coding.
5.2Saran
Beberapa saran yang dapat dijadikan pertimbangan dalam mengembangkan penelitian ini antara lain:
1. Membandingkan kinerja algoritma dengan algoritma kompresi lossless
lainnya, seperti Run Length Encoding, Lempel-Ziv-Welch dan sebagainya. 2. Menambahkan database untuk history pada aplikasi yang dibangun pada
(5)
133
DAFTAR PUSTAKA
Adriani, A. 2009. Studi Perbandingan Kinerja Algoritma Kompresi Shannon Fano
dan Huffman pada Citra Digital. Skripsi. Universitas Sumatera Utara.
ANDs Guides – Awareness Level. 2011. Australia: Australian National Data Service.
Bodden, E., Clasen, M. & Kneis, J. 2007. Arithmetic Coding Revealed: A Guided Tour From Theory to Praxis. Canada: Sable Research Group.
BSc in Computing and Information Systems – Data Compression. 2004. Inggris:
University of London Press.
Budijanto, A.A. 2006. Desain Grafis dengan Adobe InDesign CS dan CS2. Jakarta: PT. Alex Media Komputindo.
Ginting, Andreni Menovita. 2012. Implementasi Algoritma Huffman pada Kompresi Citra BMP. Skripsi. Universitas Sumatera Utara.
Kridalaksana, H. 1993. Kamus Linguistik. Jakarta: PT. Gramedia.
Joos.I., Whitman, N.I., Smith, M.J. & Nelson, R. 2009. Belajar Cepat Komputer: Panduan untuk Profesi Kesehatan. Edisi Ketiga. Jakarta: Penerbit Buku Kedokteran EGC.
Mata-Toledo, R.A. & Cushman, P.A. 2007. Database Relasional. Jakarta: Penerbit Erlangga.
Mulyanta, E.S. 2006. Dari Teori Hingga Praktik: Pengolahan Digital Image dengan Photoshop CS2. Yogyakarta: Penerbit ANDI
Nasution, Rohani. 2012. Analisis Perbandingan Teknik Kompresi Menggunakan Algoritma Shannon-Fano dan Run Length Encoding pada Citra Berformat BMP dan PNG. Skripsi. Universitas Sumatera Utara.
Noersasongko, E. & Andono, P.N. 2010. Mengenal Dunia Komputer. Jakarta: PT. Alex Media Komputindo.
Putra, D. 2010. Pengolahan Citra Digital. Semarang: Penerbit Andi.
Salomon, D. & Motta, G. 2010. Handbook of Data Compression. Fifth Edition.
London: Springer-verlag Limited.
Sarifah. 2010. Analisis Kinerja dan Implementasi Algoritma Kompresi Arithmetic Coding pada File Teks dan Citra Digital. Skripsi. Universitas Sumatera Utara.
(6)
Sayood, Khalid. 2012. Introduction to Data Compression. Forth Edition. USA:
Elsevier Inc.
Supriyanto, W& Muhsin, A. 2008. Teknologi Informasi Perpustakaan: Strategi Perancangan Perpusatakaan Digital. Yogyakarta: Penerbit KANISIUS.
Sutoyo, T., Mulyanto, E., Suhartono, V., Nurhayati, O.D. & Wijanarto. 2009. Teori Pengolahan Citra Digital. Semarang: Penerbit ANDI.
Dasgupta, S., Papadimitriou, C.H. & Vazirani, U.V. 2006. Algorithms. (Online)