13
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.
Universitas Sumatera Utara
14
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 Tn, sedangkan jumlah
memori ini dikenal sebagai kompleksitas ruang yang disimbolkan dengan Sn. 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 Tn adalah
sebanyak 5n
3
+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 5n
3
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 n
3
, atau biasa dituliskan Big-O=n
3
Dasgupta et al, 2006. Notasi Big-O yang sering dijumpai pada algoritma antara lain:
1. O1 – constant time Algoritma yang menghasilkan nilai selalu tetap tanpa bergantung kepada
banyak masukan. 2. O
2
log n – logarithmic time Algoritma yang berdasarkan pada binary tree biasanya memiliki kompleksitas
O log n.
3. On – linear time Algoritma dengan kompleksitas On membutuhkan 1 kali proses untuk
masing-masing masukan.
Universitas Sumatera Utara
15
4. On
2
log n – linearithmic time Algoritma yang memecahkan masalah menjadi masalah yang lebih kecil, lalu
menyelesaikan tiap masalah secara independen. 5. On
2
– quadratic time Algoritma yang melibatkan proses perulangan bersarang nested loop.
6. On
3
– cubic time Algoritma dengan kompleksitas On
3
mirip dengan On
2
, 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. O2
n
– exponential time Salah satu algoritma yang mempunyai kompleksitas O2
n
adalah brute force dalam menebak suatu password. Setiap penambahan karakter, akan
melipatgandakan waktu yang dibutuhkan. 8. On – 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