6 BAB 2 LANDASAN TEORI 2.1. Kompresi Data Kompresi adalah mengecilkan/ memampatkan ukuran. Kompresi Data adalah teknik untuk mengecilkan data sehingga dapat diperoleh file dengan ukuran yang lebih kecil daripada ukuran file aslinya. Kompresi dibutuhkan untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi/pertukaran data [1]. Terdapat dua teknik dalam kompresi data yaitu losseles compression dan lossy compression. Losseles artinya tidak ada data yang hilang, menggunakan algortima tertentu untuk mengompres data (compress) dan mengembalikan ke ukuran semula (decompress) sehingga cocok untuk mengkompresi data berupa teks. Losseles Compression adalah teknik kompresi yang tidak mengurangi ukuran aslinya. Sedangkan Lossy artinya ada data yang hilang, bertujuan untuk mengefisienkan data. Ketika proses dekompresi dilakukan, maka output yang dihasilkan tidak sama dengan data aslinya. Lossy Compression adalah teknik kompresi yang mengurangi ukuran aslinya. Lossy Compression biasanya dipakai untuk mengompres data multimedia. Pengiriman data hasil kompresi dapat dilakukan jika pihak pengirim atau yang melakukan kompresi dan pihak penerima memiliki aturan yang sama dalam hal kompresi data sehingga data yang diterima dapat dibaca/di-decode kembali dengan benar. 2.2. Parameter Analisis Kompresi Pada suatu teknik yang digunakan dalam proses kompresi data terdapat beberapa faktor yang biasa digunakan untuk menganalisa kualitas dari suatu teknik kompresi data [2] yaitu :
7 1. Ratio of Compression Ratio of Compression (RC) adalah nilai perbandingan antara ukuran bit data sebelum dikompresi dengan ukuran bit data yang telah dikompresi. Secara matematis dapat dituliskan sebagai berikut : R C = ukuran bit data sebelum dikompresi ukuran bit data setelah dikompresi... (1) 2. Compression Ratio Compression Ratio (CR) adalah persentase perbandingan antara data yang sudah dikompresi dengan data yang belum dikompresi. Secara matematis dapat dituliskan sebagai berikut : C R = ukuran bit data setelah dikompresi ukuran bit data sebelum dikompresi 100%... (2) 3. Redundancy Redundancy (RD) adalah kelebihan yang terdapat di dalam data sebelum dikompresi. Jadi setelah dikompresi dapat dihitung Redundancy data yaitu persentasi dari hasil seleisih antara ukuran data sebelum dikompresi dengan data setelah dikompresi. R D = 100% CR 4. Time Process (Waktu Kompresi dan Dekompresi) Time Process (waktu kompresi dan dekompresi) adalah waktu yang dibutuhkan untuk melakukan proses kompresi dan dekompresi. Semakin kecil waktu yang diperoleh maka semakin efisien metode yang digunakan dalam proses kompresi dan dekompresi itu. 2.3. Algoritma Untuk membuat suatu data menjadi lebih kecil ukurannya daripada data asli, diperlukan tahapan-tahapan (algoritma) untuk mengolah data tersebut. Secara informal, algoritma adalah prosedur komputasi yang didefinisikan dengan baik yang mengambil beberapa nilai, atau seperangkat nilai sebagai input dan menghasilkan
8 nilai, atau seperangkat nilai sebagai output Algoritma juga merupakan kumpulan instruksi/perintah/langkah yang berhingga jumlahnya, dituliskan secara sistematis, dan digunakan untuk menyelesaikan masalah/persoalan logika dan matematika dengan bantuan komputer [3]. Berdasarkan pengertian algoritma tersebut, dapat disimpulkan bahwa algoritma merupakan suatu istilah yang luas, yang tidak hanya berkaitan dengan dunia komputer. Dalam algoritma kompresi data, tidak ada algoritma yang cocok untuk semua jenis data. Hal ini disebabkan karena data yang akan dimampatkan harus dianalisis terlebih dahulu, dan berharap menemukan pola tertentu yang dapat digunakan untuk memperoleh data dalam ukuran yang lebih kecil. Karena itu, muncul banyak algoritma-algoritma kompresi data [4]. 2.4. Algoritma Huffman Algoritma Huffman adalah salah satu algoritma kompresi tertua yang disusun oleh David Huffman pada tahun 1952. Algoritma tersebut digunakan untuk membuat kompresi jenis lossless compression, yaitu pemampatan data dimana tidak satu byte pun hilang sehingga data tersebut utuh dan disimpan sesuai dengan aslinya. Algoritma 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 [5]. Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal (isi data yang dimasukkan) menjadi sekumpulan code-word, algoritma Huffman termasuk ke dalam kelas algoritma yang menggunakan metode statik, yaitu metode yang selalu menggunakan peta kode yang sama. Metode ini membutuhkan dua fase (two-phase), yaitu fase pertama untuk menghitung probabilitas kemunculan tiap simbol dan menentukan peta kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan [6].
9 2.4.1. Pembentukan Pohon Huffman ( Huffman Tree ) Kode pada dasarnya merupakan kode prefiks (prefix code), yaitu himpunan yang berisi sekumpulan kode biner, dimana pada kode prefiks ini tidak ada kode biner yang menjadi awalan 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. Langkah-langkah pembentukan pohon adalah sebagai berikut : 1. Baca semua karakter didalam teks dan hitung banyaknya kemunculan jenis karakter. 2. Gabungkan dua pohon yang mempunyai frekuensi terkecil pada sebuah akar. Ulangi langkah tesebut sampai bertemu daun. 3. Kodekan rangkaian bit yang telah dibaca dengan karakter di daun. Kode ini biasanya identik dengan pohon biner yang diberi label 0 untuk cabang kiri dan 1 untuk cabang kanan. 4. Ganti data yang ada dengan kode bit berdasarkan pohon biner. 5. Simpan jumlah bit untuk kode bit yang terbesar, jenis karakter yang diurutkan dari frekuensi keluarnya terbesar ke terkecil beserta data yang sudah berubah menjadi kode bit sebagai data hasil kompresi. 2.4.2. Proses Encoding Encoding adalah cara menyusun string biner dari teks yang ada. Encoding adalah cara nebyusun string biner dari teks yang ada. Proses encoding untuk satu karakter dimulai dengan membuat pohon terlebih dahulu. Setelah itu, kode untuk satu karakter dibuat dengan menyusun nama string biner yang dibaca dari akar sampai ke daun pohon.
10 Langkah-langkah untuk men-encoding suatu string biner adalah sebagai berikut : 1. Tentukan karakter yang akan di-encoding 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 2.4.3. 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 tabel kode dan yang kedua dengan menggunakan pohon. Langkah-langkah men-decoding suatu string biner dengan menggunakan pohon 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. 2.5. Algoritma Sequitur Algoritma Sequitur merupakan sebuah algoritma yang menyimpulkan tata bahasa bebas konteks (context-free grammar) ke dalam suatu pemampatan untuk mengurangi masukan yang berulang. Pada algoritma ini dikenal simbol nonterminal. Simbol tersebut merupakan unsur dari production rules (aturan-aturan yang digunakan untuk membangun sebuah kalimat) [7]. Susunan produksi dalam penulisan ulang terhadap simbol nonterminal terletak disebelah kiri produksi. Operasi sequitur terdiri dari pemastian sifat yang berlaku yaitu algoritma beroperasi menjalankan batasan didalam sebuah tata bahasa yang ketika diagram keunikan (digram uniqueness) dilanggar maka sebuah aturan baru dibentuk.
11 2.5.1. Digram Keunikan (Digram Uniqueness) Digram uniqueness mempunyai arti bahwa tidak ada pasangan dari simbol/ digram muncul lebih dari sekali dalam sebuah tata bahasa. Jika hal ini terjadi maka akan melanggar aturan batasan pertama (digram uniqueness) sehingga akan membentuk aturan baru (simbol non-terminal) yang akan menggantikan simbol/digram yang muncul lebih dari sekali. 2.6. Kompleksitas Algoritma Suatu masalah dapat mempunyai banyak algoritma penyelesaian. Algoritma yang digunakan tidak saja harus benar, namun juga harus efesien. Efesiensi suatu algoritma dapat diukur dari waktu eksekusi algoritma dan kebutuhan ruang memori. Algoritma yang efesien adalah algoritma yang meminimumkan kebutuhan waktu dan ruang. Dengan menganalisis beberapa algoritma untuk suatu masalah, dapat diidentifikasi satu algoritma yang paling efesien. Besaran yang digunkan menjelaskan model pengukuran waktu dan ruang ini adalah kompleksitas algoritma. Kompleksitas algoritma terdiri dari dua macam, yaitu kompleksitas waktu dan kompleksitas ruang. Kompleksitas waktu dinyatakan dengan T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n, dimana ukuran masukan (n) merupakan jumlah data yang diproses oleh sebuah algoritma. Sedangkan kompleksitas ruang S(n), diukur dari memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari masukan n. Dengan menggunakan kompleksitas waktu dan ruang, dapat ditentukan laju peningkatan waktu atau ruang yang diperlukan algoritma, seiring dengan meningkatnya masukan (n). Terdapat beberapa jenis kelas efisiensi umum yang dijumpai dalam Big-O, yaitu dapat kita lihat pada tabel 3.1. berikut :
12 Tabel 3.1 Kompleksitas Algoritma Fungsi Big-O Nama O(1) Konstan O(log n) Logaritmik O(n) Linear O(n log n) n log n O(n 2 ) Kuadratik O(n 3 ) Kubik O(n m ) Polinomiale O(n!) Faktorial Keterangan Tabel : 1. Konstan O(1): Disebut konstan, karena program hanya dieksekusi dengan suatu nilai yang konstan. 2. Logaritmik O(log n): Disebut algoritma logaritmik, karena peningkatan waktu eksekusi sebanding dengan peningkatan logaritma dari jumlah data. 3. Linear O(n): Disebut linear, karena peningkatan waktu eksekusi sebanding dengan peningkatan data, dan merupakan kondisi optimal dalam membuat algoritma. 4. Linearitmik O(n log n): Disebut linearitmik, karena merupakan gabungan dari linear dan logaritmik. Algortima ini merupakan algoritma log n yang dijalankan sebanyak n kali. Biasanya digunakan untuk memecahkan masalah besar menjadi masalah yang kecil. 5. Kuadratik O(n 2 ): Disebut kuadratik, karena peningkatan waktu eksekusi program akan sebanding dengan peningatan kuadrat jumlah data. 6. Kubik O(n 3 ): Disebut kubik, karena peningkatan waktu eksekusi program akan sebanding dengan peningkatan pangkat tiga jumlah data. 7. Polinomiale O(n m ): Algoritma yang tidak efisien, karena memerlukan jumlah langkah penyelesaian yang jauh lebih besar daripada jumlah data.
13 8. Faktorial O(n!): Merupakan algoritma yang paling tidak efisien, karena waktu eksekusi program akan sebanding dengan peningkatan faktorial jumlah data. 2.7. Pengertian Data Teks Teks adalah kumpulan dari karakter karakter atau string yang menjadi satu kesatuan. Teks yang memuat banyak karakter didalamnya selalu menimbulkan masalah pada media penyimpanan dan kecepatan waktu pada saat transmisi data. Data teks merupakan file yang berisi informasi-informasi dalam bentuk teks. Data yang berasal dari dokumen pengolah kata, angka yang digunakan dalam perhitungan, merupakan contoh masukan data teks yang terdiri dari karakter, angka dan tanda baca. Masukan dan keluaran data teks direpresentasikan sebagai set karakter atau sistem kode yang dikenal oleh sistem komputer. Salah satu set karakter yang umum digunakan untuk masukan dan keluaran pada komputer yaitu ASCII (American Standard Code for Information Interchange). ASCII digunakan oleh untuk menunjukkan teks. Kode ASCII memiliki komposisi bilangan biner sebanyak 8 bit, dimulai dari 00000000 dan 11111111. Total kombinasi yang dihasilkan sebanyak 256, dimulai dari kode 0 hingga 255 dalam sistem bilangan desimal.