Bob menghitung a = g
k
mod p = 2
1520
mod 2357 = 1430 b = y
k
m mod p= 1185
1520
2035 mod 2357 = 697 Jadi, cipherteks yang dihasilkan adalah 1430, 697. Bob mengirim cipherteks ini ke Alice,
oleh alice 1a
x
= a
x – 1
= a
p – 1 – x
mod p = 1430
605
mod 2357 = 872 m = ba
x
p = 697 872 mod 2357 = 2035
2.3. Algoritma Huffman
Algoritma Huffman adalah salah satu algoritma kompresi. Algoritma huffman merupakan algoritma yang paling terkenal untuk mengompres teks. Terdapat tiga fase dalam
menggunakan algoritma Huffman untuk mengompres sebuah teks, pertama adalah fase pembentukan pohon Huffman, kedua fase encoding dan ketiga fase decoding. Pengkodean
Huffman adalah teknik untuk mengompresi data. Algoritma greedy Huffman melihat terjadinya masing-masing karakter dan sebagai string biner secara optimal Huffman coding
adalah bentuk coding statistik yang mencoba untuk mengurangi jumlah bit yang diperlukan untuk merepresentasikan string dari simbol [Mathur, M. K., Loonker, S. Saxena, D. 2012].
Prinsip yang digunakan oleh algoritma Huffman adalah karakter yang sering muncul di-encoding dengan rangkaian bit yang pendek dan karakter yang jarang muncul di-encoding
dengan rangkaian bit yang lebih panjang. Teknik kompresi algoritma Huffman mampu memberikan penghematan pemakaian memori sampai 30. Algoritma Huffman mempunyai
kompleksitas O n log n untuk himpunan dengan n karakter. Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan
salah satu metode paling lama dan paling terkenal dalam kompresi teks. Algoritma Huffman menggunakan prinsip pengkodean yang mirip dengan kode Morse, yaitu tiap karakter
simbol dikodekan hanya dengan rangkaian beberapa bit, dimana karakter yang sering muncul dikodekan dengan rangkaian bit yang pendek dan karakter yang jarang muncul
dikodekan dengan rangkaian bit yang lebih panjang [Mathur, M. K., Loonker, S. Saxena, D. 2012].
Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal isi data yang diinputkan menjadi sekumpulan codeword, algoritma Huffman termasuk kedalam kelas
algoritma yang menggunakan metode statik. Metode statik adalah metode yang selalu menggunakan peta kode yang sama, metode ini membutuhkan dua fase two-pass: fase
pertama untuk menghitung probabilitas kemunculan tiap simbol dan menentukan peta-
Universitas Sumatera Utara
kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan. Sedangkan berdasarkan teknik pengkodean simbol yang digunakan, algoritma
Huffman menggunakan metode symbolwise. Metode symbolwise adalah metode yang menghitung peluang kemunculan dari setiap simbol dalam satu waktu, dimana simbol yang
lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang jarang muncul. Metode Huffman Dinamis merupakan kelanjutan dari metode Huffman statis dengan
menambah atau mengurangi suatu proses tertentu pada metode Huffman statis. Ide dasar dari metode ini adalah meringkas tahapan metode Huffman tanpa perlu menghitung jumlah
karakter keseluruhan dalam membangun pohon biner.
Metode Huffman dinamis adalah suatu metode dengan kemungkinan kemunculan dari setiap simbol tidak dapat ditentukan dengan pasti selama pengkodean. Hal ini disebabkan
oleh perubahan pengkodean secara dinamis berdasarkan frekuensi dari simbol yang telah diolah sebelumnya. Metode ini dikembangkan oleh trio Faller, Gallager dan Knuth, kemudian
dikembangkan lebih lanjut oleh Vitter [Merdiyan, Meckah dan Wawan Indarto, 2007].
2.3.1. Kompresi Data
Kompresi data dalam bidang ilmu komputer, ilmu pengetahuan dan seni adalah sebuah penyajian informasi kedalam bentuk yang lebih sederhana [Arizka, R. U. 2011]. Kompresi
data dapat diartikan juga sebagai proses yang dapat mengubah sebuah aliran data masukan sumber atau data asli kedalam aliran data yang lain keluaran atau data yang dikompresi
yang memiliki ukuran yang lebih kecil. Metode kompresi data dapat dikelompokkan dalam dua kelompok besar yaitu metode lossless
dan metode lossy yaitu: 1.
Metode lossless Pada teknik ini tidak ada kehilangan informasi. Jika data dikompresi secara lossless, data
asli dapat direkonstruksi kembali sama persis dari data yang telah dikompresikan, dengan kata lain data asli tetap sama sebelum dan sesudah kompresi. Secara umum teknik
lossless digunakan untuk penerapan yang tidak bisa mentoleransi setiap perbedaan antara data asli dan data yang telah direkonstruksi. Data berbentuk tulisan misalnya file teks,
harus dikompres menggunakan teknik lossless, karena kehilangan sebuah karakter saja dapat mengakibatkan kesalahpahaman. Lossless compression disebut juga dengan
reversible compression karena data asli bisa dikembalikan dengan sempurna, akan tetapi rasio kompresinya rendah, misalnya pada data teks, gambar seperti GIF dan PNG, contoh
Universitas Sumatera Utara
-metode ini adalah Shannon-Fano Coding, Huffman Coding, Arithmetic Coding, Run Length Encoding dan lain sebagainya [Arizka, R. U. 2011].
2. Metode lossy
Pada teknik ini akan terjadi kehilangan sebagian informasi. Data yang telah dimanfaatkan dengan teknik ini secara umum tidak bisa direkonstruksi sama persis dari
data aslinya. Di dalam banyak penerapan, rekonstruksi yang tepat bukan suatu masalah. Sebagai contoh, ketika sebuah sample suara ditransmisikan, nilai eksak dari setiap
sample suara belum tentu diperlukan, tergantung pada yang memerlukan kualitas suara yang direkonstruksi, sehingga banyaknya jumlah informasi yang hilang di sekitar nilai dari setiap
sample dapat ditoleransi. Biasanya teknik ini membuang bagian-bagian data yang sebenarnya tidak begitu berguna, tidak begitu dirasakan, tidak begitu dilihat sehingga manusia masih
beranggapan bahwa data tersebut masih bisa digunakan walaupun sudah dikompresi, misalnya pada gambar dan MP3, contoh metode ini adalah Transform Coding, Wavelet, dan
lain-lain. Lossy compression disebut juga irreversible compression karena data asli mustahil untuk dikembalikan seperti semula. Kelebihan teknik ini adalah rasio kompresi yang tinggi
dibanding metode lossless. Keuntungan dari metode lossy atas lossless adalah dalam beberapa kasus metode lossy
menghasilkan file kompresi yang lebih kecil dibandingkan dengan metode lossless. Metode lossy sering digunakan untuk mengkompresi suara, gambar dan video karena data tersebut
dimaksudkan kepada human interpretation dimana pikiran dapat dengan mudah “mengisi
bagian- bagian yang kosong” atau melihat kesalahan yang sangat kecil atau inkonsistensi.
Sedangkan lossless digunakan untuk mengkompresi data untuk diterima ditujuan dalam kondisi asli seperti dokumen teks. Lossy akan mengalami generation loss pada data
sedangkan pada lossless tidak terjadi karena data yang hasil dekompresi sama dengan data asli.
2.3.2. Dekompresi
Sebuah data yang sudah dikompresi dengan teknik lossless harus dapat dikembalikan lagi kebentuk aslinya, prinsip ini dinamakan dekompresi. Untuk dapat merubah data yang
terkompres diperlukan cara yang berbeda seperti pada waktu proses kompresi dilaksanakan. Jadi pada saat dekompresi catatan header yang berupa byte-byte tersebut terdapat catatan isi
mengenai file tersebut. Catatan header akan menuliskan kembali mengenai isi dari file
Universitas Sumatera Utara
tersebut, jadi isi dari file sudah tertulis oleh catatan header sehingga hanya tinggal menuliskan kembali pada saat proses dekompresi.
Secara umum proses kompresi dan dekompresi lossless dapat dilihat pada gambar 2.1.
Kompresi Dekompresi
Gambar 2.1 Alur Teknik lossless Kompresi-Dekompresi Data
2.3.3. Pembentukan Pohon Huffman
Kode Huffman pada dasarnya merupakan kode prefiks prefix code. Kode prefiks adalah himpunan yang berisi sekumpulan kode biner, dimana pada kode prefik ini tidak ada kode
biner yang menjadi awal bagi kode biner yang lain. Kode prefiks biasanya direpresentasikan sebagai pohon biner yang diberikan nilai atau label. Untuk cabang kiri pada pohon biner
diberi label 0, sedangkan pada cabang kanan pada pohon biner diberi label 1. Rangkaian bit yang terbentuk pada setiap lintasan dari akar ke daun merupakan kode prefiks untuk karakter
yang berpadanan. Pohon biner ini biasa disebut pohon Huffman. Langkah-langkah pembentukan pohon Huffman adalah sebagai berikut:
1. Baca semua karakter di dalam teks untuk menghitung frekuensi kemunculan setiap
karakter. Setiap karakter penyusun teks dinyatakan sebagai pohon bersimpul tunggal. Setiap simpul di-assign dengan frekuensi kemunculan karakter tersebut.
2. Terapkan strategi algoritma greedy sebagai berikut: gabungkan dua buah pohon yang
mempunyai frekuensi terkecil pada sebuah akar. Setelah digabungkan akar tersebut akan mempunyai frekuensi yang merupakan jumlah dari frekuensi dua buah pohon-pohon
penyusunnya. 3.
Ulangi langkah 2 sampai hanya tersisa satu buah pohon Huffman, agar pemilihan dua pohon yang akan digabungkan berlangsung cepat, maka semua yang ada selalu terurut
menaik berdasarkan frekuensi. Sebagai contoh, dalam kode ASCII string
7 huruf “ABACCDA” membutuhkan representasi 7 × 8 bit = 56 bit 7 byte, dengan rincian sebagai berikut:
Data Asli .txt, .doc
Data Hasil KompresiHuffman
Universitas Sumatera Utara
A = 01000001 B = 01000010
A = 01000001 C = 01000011
C = 01000011 D = 01000100
A = 01000001 Pada string di atas, frekuensi kemunculan A = 3, B = 1, C = 2, dan D = 1,
Gambar 2.2 Pohon Huffm an untuk Karakter “ABACCDA”
2.3.4. Proses Encoding
Encoding adalah cara menyusun string biner dari teks yang ada. Proses encoding untuk satu karakter dimulai dengan membuat pohon Huffman terlebih dahulu. Setelah itu, kode untuk
satu karakter dibuat dengan menyusun nama string biner yang dibaca dari akar sampai ke daun pohon Huffman.
Langkah-langkah untuk mengencoding suatu string biner adalah sebagai berikut: 1.
Tentukan karakter yang akan di-encoding
Universitas Sumatera Utara
2. Mulai dari akar, baca setiap bit yang ada pada cabang yang bersesuaian sampai ketemu
daun dimana karakter itu berada 3.
Ulangi langkah 2 sampai seluruh karakter di encoding Sebagai contoh kita dapat melihat tabel dibawah ini, yang merupakan hasil encoding
untuk pohon Huffman pada tabel 2.1.
Tabel 2.1 Kode Huffman un tuk Karakter “ABCD”
Karakter String Biner Huffman
A B
110 C
10 D
111
2.3.5. Proses Decoding
Decoding merupakan kebalikan dari encoding. Decoding berarti menyusun kembali data dari string biner menjadi sebuah karakter kembali. Decoding dapat dilakukan dengan dua cara,
yang pertama dengan menggunakan pohon Huffman dan yang kedua dengan menggunakan tabel kode Huffman.
Langkah-langkah men -decoding suatu string biner dengan menggunakan pohon Huffman adalah sebagai berikut:
1. Baca sebuah bit dari string biner.
2. Mulai dari akar.
3. Untuk setiap bit pada langkah 1, lakukan traversal pada cabang yang bersesuaian.
4. Ulangi langkah 1, 2 dan 3 sampai bertemu daun. Kodekan rangkaian bit yang telah
dibaca dengan karakter di daun. 5.
Ulangi dari langkah 1 sampai semua bit di dalam string habis. Sebagai contoh kita akan men-
decoding string biner yang bernilai ”111”
Universitas Sumatera Utara
Gambar 2.3 Proses Decoding dengan Menggunakan Pohon Huffman
Setelah kita telusuri dari akar, maka kita akan menemukan bahwa string yang mempunyai ko
de Huffman “111” adalah karakter D. Cara yang kedua adalah dengan menggunakan tabel kode Huffman. Sebagai contoh
kita akan menggunakan kode Huffman pada Tabel 1 untuk merepresentasikan string “ABACCDA”. Dengan menggunakan Tabel 1 string tersebut akan direpresentasikan menjadi
rangkaian bit: 0 110 0 10 10 1110. Jadi, jumlah bit yang dibutuhkan hanya 13 bit. Dari Tabel 1 tampak bahwa kode untuk sebuah simbolkarakter tidak boleh menjadi awalan dari kode
simbol yang lain guna menghindari keraguan ambiguitas dalam proses dekompresi atau decoding, karena tiap kode Huffman yang dihasilkan unik, maka proses decoding dapat
dilakukan dengan mudah. Contoh: saat membaca kode bit pertama dalam rangkaian bit “011001010110”, yaitu bit “0”, dapat langsung disimpulkan bahwa kode bit “0” merupakan
pemetaan dari simbol “A”. Kemudian baca kode bit selanjutnya, yaitu bit “1”. Tidak ada kode Huffman “1”, lalu baca kode bit selanjutnya, sehingga menjadi “11”. Tidak ada juga
kode Huffman “11”, lalu baca lagi kode bit berikutnya, sehingga menjadi “110”. Rangkaian kode bit “110” adalah pemetaan dari simbol “B”.
2.3.6. Kompleksitas Algoritma Huffman
Algoritma Huffman mempunyai kompleksitas waktu O n log n, karena dalam melakukan sekali proses itersi pada saat penggabungan dua buah pohon yang mempunyai frekuensi
terkecil pada sebuah akar membutuhkan waktu O log n, dan proses itu dilakukan berkali- kali sampai hanya tersisa satu buah pohon Huffman itu berarti dilakukan sebanyak n kali.
Universitas Sumatera Utara
BAB 3 ANALISIS DAN PERANCANGAN