Implementasi Algoritma Arithmetic Coding

61

4.2 Implementasi Algoritma Arithmetic Coding

4.2.1 Kompresi algoritma Arithmetic Coding Misalkan kata yang akan dimampatkan adalah “ilkom”. Maka dilakukan pendataan karakter dari “ilkom” yang dijabarkan pada Tabel 4.10. Tabel 4.10 Pendataan Karakter Arithmetic Coding Karakter Frekuensi i 1 l 1 k 1 o 1 m 1 Jumlah karakter 5 Dihitung probabilitas frekuensi kemunculan setiap karakter seperti pada Tabel 4.11. Tabel 4.11 Probabilitas Frekuensi Kemunculan Setiap Karakter Karakter Frekuensi Probabilitas i 1 15 = 0,2 l 1 15 = 0,2 k 1 15 = 0,2 o 1 15 = 0,2 m 1 15 = 0,2 Jumlah 5 1,0 Dihitung jangkauan setiap karakter, dengan titik terendah low adalah 0,0 dan titik tertinggi high adalah 1,0, sehingga jumlah dari probabilitas seluruh simbol sama dengan titik tertinggi dari jangkauan tersebut. Universitas Sumatera Utara 62 Tabel 4.12 Jangkauan Setiap Karakter Karakter Frekuensi Probabilitas Jangkauan low _range high _range i 1 15 = 0,2 0,8 1,0 l 1 15 = 0,2 0,6 0,8 k 1 15 = 0,2 0,4 0,6 o 1 15 = 0,2 0,2 0,4 m 1 15 = 0,2 0,0 0,2 Jumlah 5 1,0 - Diinisialisasi nilai titik terendah low sebagai 0 dan titik tertinggi high sebagai 1,0. Kemudian dilakukan perhitungan low dan high sesuai data setiap karakter dengan rumus sebagai berikut: ����� = ℎ��ℎ − ��� .................................................................................... 8 ��� = ��� + ����� × ℎ�_����� ................................................................ 9 ℎ��ℎ = ��� + ����� × ���_����� ......................................................... 10 Perhitungan low dan high pada proses kompresi Arithmetic Coding dilakukan per 2 karakter dan dijabarkan pada Tabel 4.13. Tabel 4.13 Kompresi Arithmetic Coding Karakter low high il low 0,0 + 1,0 - 0,0 0,8 = 0,8 high 0,0 + 1,0 - 0,0 1,0 = 1,0 low 0,8 + 1,0 - 0,8 0,6 = 0,92 high 0,8 + 1,0 - 0,8 0,8 = 0,96 ko low 0,0 + 1,0 - 0,0 0,4 = 0,4 high 0,0 + 1,0 - 0,0 0,6 = 0,6 low 0,4 + 0,6 - 0,4 0,2 = 0,44 high 0,4 + 0,6 - 0,4 0,4 = 0,48 m low 0,0 + 1,0 - 0,0 0,0 = 0,0 high 0,0 + 1,0 - 0,0 0,2 = 0,2 Representasi dari kata “ilkom” yang telah dimampatkan diambil dari nilai biner yang berada di antara 0,92 – 0,96, 0,44 – 0,48, dan 0,0 – 0,2. Nilai biner didapatkan dengan cara berikut: Universitas Sumatera Utara a. 0,92 – 0,96 1 1 1 1 1 0,96875 1 0,75 1 0,875 1 0,9375 1 0,96875 1 0,953125 1 0,5 0,5 0,75 0,875 0,9375 0,9375 X=0,92 FALSE FALSE FALSE TRUE TRUE TRUE X=0,96 FALSE FALSE TRUE FALSE FALSE TRUE Gambar 4.1 Rescaling Bilangan Desimal I b. 0,44 – 0,48 1 0,5 0,5 0,5 0,5 0,46875 1 0,25 1 0,375 1 0,4375 1 0,46875 1 0,453125 1 0,5 0,25 0,375 0,4375 0,4375 X=0,44 FALSE FALSE FALSE FALSE FALSE TRUE X=0,48 FALSE FALSE FALSE FALSE TRUE TRUE Gambar 4.2 Rescaling Bilangan Desimal II Universitas Sumatera Utara 64 c. 0,0 – 0,2 1 0,5 0,25 1 0,25 1 0,125 1 0,5 X=0,0 TRUE TRUE TRUE X=0,2 FALSE FALSE TRUE Gambar 4.3 Rescaling Bilangan Desimal III Perhitungan di atas berhenti saat didapatkan nilai yang lebih besar atau sama dengan low dan lebih kecil atau sama dengan high, yaitu 0,92 – 0,96 dengan nilai biner 111100; 0,44 – 0,48 dengan nilai biner 011101; dan 0,0 – 0,2 dengan nilai biner 000. Ketiga bilangan biner digabungkan menjadi satu kesatuan yaitu: 111100011101000. Maka kata “ilkom” dapat direpresentasikan menjadi 111100011101000. Kemudian bit tersebut diubah menjadi karakter ASCII sehingga menjadi 11110001 sebagai ñ , dan bit 1101000 ditambahkan beberapa biner 0 di depannya agar menjadi 8 bit sehingga menjadi 01101000 sebagai “h”. Untuk pembeda antara biner yang asli dan biner yang mendapatkan penambahan bit, diberikan satu bilangan desimal sebelum karakter terakhir yang merupakan banyaknya bit asli pada karakter terakhir. Dalam contoh ini, bilangan desimal yang diberikan adalah 7. Maka kata “ilkom” direpresentasikan sebagai “ñ7h”. 4.2.2 Dekompresi algoritma Arithmetic Coding Pada proses dekompresi, dibutuhkan jangkauan dari kelompok karakter low, high untuk pengembalian nilai biner menjadi bilangan desimal dari data yang akan diproses. Berdasarkan contoh kata “ilkom” yang telah dimampatkan menjadi “ñ7h”, maka akan didapatkan biner dari karakter ASCII pertama, yaitu “ñ” sebagai 11110001; ditemukan bilangan biner 7 yang menandakan banyaknya bit pada karakter yang terakhir, yaitu sebagai 1101000. Maka biner akan diubah kembali menjadi bilangan desimal dengan mencocokkannya dengan library yang sesuai dengan nilai Universitas Sumatera Utara 65 yang berada di jangkauannya. Pada contoh kata “ilkom” maka library terdiri dari 5 karakter dan 25 kumpulan karakter yang didapat dari perhitungan seperti Gambar 4.4 dan akan dijabarkan pada Tabel 4.14. Tabel 4.14 Library Arithmetic Coding Kumpulan Karakter Range i 0,8 ... 1,0 l 0,6 ... 0,8 k 0,4 ... 0,6 o 0,2 ... 0,4 m 0,0 ... 0,2 mm 0,0 ... 0,04 mo 0,04 ... 0,08 mk 0,08 ... 0,12 ml 0,12 ... 0,16 mi 0,16 ... 0,20 om 0,20 ... 0,24 oo 0,24 ... 0,28 ok 0,28 ... 0,32 ol 0,32 ... 0,36 oi 0,36 ... 0,40 km 0,40 ... 0,44 ko 0,44 ... 0,48 kk 0,48 ... 0,52 kl 0,52 ... 0,56 ki 0,56 ... 0,60 lm 0,60 ... 0,64 lo 0,64 ... 0,68 lk 0,68 ... 0,72 ll 0,72 ... 0,76 li 0,76 ... 0,80 im 0,80 ... 0,84 io 0,84 ... 0,88 ik 0,88 ... 0,92 il 0,92 ... 0,96 ii 0,96 ... 1,00 Universitas Sumatera Utara 1 0,2 1 0,4 1 0,6 1 0,8 1 1 i mi i oi i ki i li i ii 0,8 0,16 0,8 0,36 0,8 0,56 0,8 0,56 0,8 0,96 l ml l ol l kl l ll l il 0,6 0,12 0,6 0,32 0,6 0,52 0,6 0,52 0,6 0,92 k mk k ok k kk k lk k ik 0,4 0,08 0,4 0,28 0,4 0,48 0,4 0,68 0,4 0,88 o mo o oo o ko o lo o io 0,2 0,04 0,2 0,24 0,2 0,44 0,2 0,64 0,2 0,84 m mm m om m km m lm m im 0,2 0,4 0,6 0,8 Gambar 4.4 Rescaling Library Arithmetic Coding Berdasarkan bilangan biner 111100011101000, maka dicari bilangan desimal yang melingkupinya dan dijabarkan pada Gambar 4.5. 1 1 1 1 1 0,96875 1 0,75 1 0,875 1 0,9375 1 0,96875 1 0,953125 1 0,5 0,5 0,75 0,875 0,9375 0,9375 Gambar 4.5 Pencarian Bilangan Biner I Universitas Sumatera Utara Berdasarkan Gambar 4.5 maka didapatkan range nilai desimal 0,9375 ... 0,953125 yang berada di kumpulan karakter “il” dengan range 0,92 ... 0,96 pada Tabel 4.15 lalu dilanjutkan pencarian bilangan biner berikutnya yaitu 011101000 seperti pada Gambar 4.6. 1 0,5 0,5 0,5 0,5 0,46875 1 0,25 1 0,375 1 0,4375 1 0,46875 1 0,453125 1 0,5 0,25 0,375 0,4375 0,4375 Gambar 4.6 Pencarian Bilangan Biner II Berdasarkan Gambar 4.6 maka didapatkan jangkauan nilai desimal 0,453125 ... 0,46875 yang berada di kumpulan karakter “ko” dengan range 0,44 ... 0,48 pada Tabel 4.15 lalu dilanjutkan pencarian bilangan biner berikutnya yaitu 000 seperti pada Gambar 4.7. Universitas Sumatera Utara 68 1 0,5 0,25 1 0,25 1 0,125 1 0,5 Gambar 4.7 Pencarian Bilangan Biner III Berdasarkan Gambar 4.7 maka didapatkan jangkauan nilai desimal 0,0 ... 0,125 yang berada di kumpulan karakter “m” dengan range 0,0 ... 0,2 pada Tabel 4.15. Maka kata yang direpresentasikan oleh biner 111100011101000 adalah “ilkom”. 4.2.3 Kompleksitas waktu algoritma Arithmetic Coding Tabel 4.15 menunjukkan algoritma Arithmetic Coding pada proses kompresi dalam pseudocode beserta waktu eksekusinya Tn untuk setiap baris. Universitas Sumatera Utara 69 Tabel 4.15 Kompleksitas Waktu Kompresi Algoritma Arithmetic Coding Baris Pseudocode Tn 1 findDecimaldouble low, double high, String text 2 { 3 array header[symbol,range_min,range_max]; 4 double min,max; 5 iftext.length 0 n 6 { 7 int i = 0; 8 whiletext.charAt0 = header.symbol[i] 2n+n 9 { 10 i++; 11 } 12 min = low+high-lowheader.range_min[i]; n 13 max = low+high-lowheader.range_max[i]; n 14 15 text = this.removeFirstChartext; 16 findDecimalmin, max, text; 17 } 18 } 19 20 final String findBinarydouble a,double b, String result 21 { 22 ifa0.5 b0.5 n 23 { 24 result = findBinary2a, 2b, result+0; n 25 } 26 else ifa0.5 b0.5 n 27 { 28 result = findBinarya-0.52, b-0.52, result+1; n 29 } 30 else ifa==0 b=0.5 n 31 { 32 result = result+0; n 33 } 34 else ifa=0.5 b==1 n 35 { 36 result = result+1; n 37 } 38 else ifa=0.5 b= 0.5 n 39 { Universitas Sumatera Utara 70 Baris Pseudocode Tn 40 result = 1-2a b-0.52 - 0 ? findBinary2a,1, result+0 : findBinary0, b-0.52, result+1; n 41 } 42 return result; n 43 } 44 45 arithmetic 46 { 47 double ifLength; 48 char[] ifCharAt; 49 StringBuffer sb; 50 String buff,bin; 51 52 ifLength = inputfile.length; n 53 ifCharAt = inputfile.toCharArray; n 54 buff = ; 55 56 for int i=0; iifLength; i++ 2n+n 57 { 58 buff += ifCharAt[i]; n 59 60 if buff.length == 2 n 61 { 62 findDecimal0,1,buff; n 63 bin = findBinarymin,max,; n 64 output buff+ : + min + - + max + bin : +bin; 65 66 sb.appendbin; n 67 buff = ; 68 } 69 } 70 if buff.length == 1 n 71 { 72 findDecimal0,1,buff; n 73 bin = findBinarymin,max,; n 74 output buff+ : + min + - + max + bin : +bin; 75 sb.appendbin; n 76 } 77 output sb; 78 } Universitas Sumatera Utara 71 Berdasarkan Tabel 4.15 maka total waktu eksekusi dari proses kompresi algoritma Arithmetic Coding adalah: Tn = 25 × n + 2 × 2n + n = 29n Big-O = n. Tabel 4.16 menunjukkan algoritma Arithmetic Coding pada proses dekompresi dalam pseudocode beserta waktu eksekusinya Tn untuk setiap baris. Tabel 4.16 Kompleksitas Waktu Dekompresi Algoritma Arithmetic Coding Baris Pseudocode Tn 1 decodearith 2 { 3 input inputFile; 4 int binLength,tempLength; 5 AcMinMax binRange; 6 char[] binCharAt,tempCharAt; 7 StringBuffer sb; 8 String bin,temp; 9 10 bin = binascii.decodeinputFile; 11 binLength = bin.length; n 12 binCharAt = bin.toCharArray; n 13 temp = ; 14 15 for i=int i=0; ibinLength; i++ 2n+n 16 { 17 temp += binCharAt[i]; n 18 tempLength = temp.length; n 19 tempCharAt = temp.toCharArray; n 20 21 binRange.min = 0; 22 binRange.max = 1; 23 binRange = binValuebinRange,temp; n 24 25 for int j=0; jlibLength; j++ 2nn-1 26 { 27 if libRange[j].min = binRange.min libRange[j].max = binRange.max n-2 n-1 28 { 29 sb.appendlibSymbol[j]; n-2 n-1 30 temp = ; Universitas Sumatera Utara 72 Baris Pseudocode Tn 31 } 32 } 33 } 34 35 if temp.length = 0 n 36 { 37 for int j=0; jsymbolLength; j++ 2n+n 38 { 39 if header.range[j].min =binRange.min header.range[j].max=binRange.max n 40 { 41 sb.apendheader.symbol[j]; n 42 temp = ; 43 } 44 } 45 } 46 } Berdasarkan Tabel 4.16 maka total waktu eksekusi dari proses dekompresi algoritma Arithmetic Coding adalah: Tn = 9 × n + 2 × 2n+2 + 2n × n-1 + 2 × n-2 × n-1 = 4n 2 + 5n + 8 Big-O = n 2 . Universitas Sumatera Utara 73

4.3 Implementasi Algoritma Huffman