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