Algoritma Huffman Kompleksitas Algoritma Notasi Big-O

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