5 BAB 2 TINJAUAN PUSTAKA 2.1. Kompresi Data Kompresi data adalah proses mengubah sebuah aliran data input menjadi aliran data baru yang memiliki ukuran lebih kecil. Aliran yang dimaksud adalah berupa file ataupun buffer dalam memori. Kebutuhan terhadap kompresi data dipengaruhi oleh dua alasan, yaitu kecenderungan manusia untuk mengumpulkan data dan kebutuhan terhadap proses transfer data yang cepat. Karena itu metode-metode untuk mengkompresi data semakin berkembang. (Salomon, 2007) Terdapat banyak metode untuk kompresi data. Metode-metode tersebut lahir dari ide yang berbeda-beda, cocok untuk berbagai tipe data, dan menghasilkan output yang berbeda-beda. Namun, prinsip dasar yang menjadi dasar tiap metode adalah sama, yaitu mengkompresi data dengan menghilangkan redundancy dari data asli. (Salomon, 2007) Proses Kompresi dan Dekompresi data dapat ditunjukkan melalui diagram blok seperti pada Gambar 2.1. Uncompressed data Kompresi Compressed data Compressed data Dekompresi Uncompressed data Gambar 2.1. Diagram Blok Proses Kompresi dan Dekompresi Data
6 Kompresi data dibagi menjadi dua kategori yaitu: 1. Kompresi data bersifat loseless. Algoritma kompresi tergolong lossless jika memungkinkan data yang sudah dikompres dapat direkonstruksi kembali persis sesuai dengan data original. Teknik ini menjamin tidak ada kehilangan sedikitpun detil atau kerusakan pada data. Lossless compression disebut juga dengan reversible compression karena data asli bisa dikembalikan dengan sempurna. Akan tetapi rasio kompresinya sangat rendah, misalnya pada gambar seperti GIF dan PNG. Contoh data yang cocok adalah gambar medis, teks, program, spreadsheet dan lain-lain. Beberapa algoritma yang tergolong dalam jenis ini adalah algoritma Shannon-Fano, algoritma Run Length Coding, algoritma Variable Length Binary Encoding, algoritma Fixed Length Binary Encoding, algoritma Huffman, algoritma LZW, dan algoritma Arithmetic Coding ( Pareker, 2014). 2. Kompresi data bersifat lossy. Algoritma kompresi tergolong lossy jika tidak memungkinkan data yang sudah dikompres dapat direkonstuksi kembali persis sesuai dengan data asli. Hal ini memanfaatkan keterbatasan panca indera manusia. Maka, sebuah perkiraan yang mendekati keadaan original dalam membangun kembali data merupakan hal yang diperlukan untuk mencapai keefektifan kompresi. Contoh data yang cocok adalah gambar, suara dan video. Adapun beberapa algoritma yang tergolong dalam jenis ini adalah algoritma Wavelet Compression, CELP, JPEG, MPEG-1 dan WMA. 2.1.1. Parameter Analisis Kompresi Pada suatu teknik yang digunakan dalam proses kompresi data terdapat beberapa faktor atau variabel yang biasa digunakan untuk menganalisa kualitas dari suatu teknik kompresi data tersebut yaitu : 1. Ratio of Compression (RC) 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 (Salomon, 2010):..... (1)
7 2. Compression Ratio (CR) Compression Ratio (CR) adalah persentase perbandingan antara data yang sudah dikompresi dengan data yang belum dikompresi. Secara matematis dapat dituliskan sebagai berikut (Salomon, 2010):....... (2) 3. Redudancy (Rd) Redudancy (Rd) adalah kelebihan yang terdapat di dalam data sebelum dikompresi. Jadi setelah dikompresi dapat dihitung Redudancy data yaitu persentasi dari hasil selisih antara ukuran data sebelum dikompresi dengan data setelah dikompresi (Salomon, 2010). Rd = 100%.......(3) 4. Waktu kompresi dan dekompresi 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.2. File Teks File teks adalah karakter-karakter dari string yang menjadi satu kesatuan. Teks yang memuat banyak karakter di dalamnya selalu menimbulkan masalah pada media penyimpanan dan kecepatan waktu pada saat transmisi data. File teks merupakan file yang berisi informasi-informasi dalam bentuk teks. Data yang berasal dari dokumen pengolah kata, angka yang digunakan dalam perhitungan, nama dan alamat dalam basis data merupakan contoh masukan data teks yang terdiri dari karakter, angka dan tanda baca. Masukan dan keluaran data teks direpresentasi sebagai set karakter atau sistem kode yang dikenal oleh sistem komputer. Ada tiga macam set karakter yang umum digunakan untuk masukan dan keluaran pada komputer, yaitu ASCII, Unicode, dan EBCDIC, ASCII (American Standard Code for Information Interchange) merupakan suatu standar internasional dalam kode huruf dan symbol seperti Hex, dan Unicode
8 tetapi ASCII bersifat lebih universal. ASCII digunakan oleh komputer dan alat komunikasi lain 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. Unicode adalah suatu standar industri yang dirancang untuk mengizinkan teks dan symbol dari semua sistem tulisan di dunia untuk ditampilkan dan dimanipulasi secara konsisten oleh komputer, EBCDIC ( Extended Binary Code Decimal Interchange Code) merupakan set karakter yang diciptakan oleh komputer merk IBM. EBCDIC terdiri dari 256 karakter yang masing-masing berukuran 8 bit. 2.2.1. Format Teks Tipe teks merupakan tipe dasar yang sudah sangat dikenal dalam kehidupan seharihari. Tipe teks terdiri dari tipe karakter (char) dan tipe string. Tipe karakter (char) terdiri atas satu huruf, angka, tanda baca, atau karakter khusus seperti c, 1, # dan sebagainya. Tipe string terdiri atas nol atau lebih karakter seperti teks dan algoritma dan sebagainya. Secara umum, format data teks dibagi menjadi dua bagian, yaitu (Purnomo, 2005) : 1. Teks sederhana (Plain text ) Format data teks (*txt) merupakan contoh format teks jenis ini yang paling popular. 2. Teks terformat (format text) Merupakan teks yang terformat dan mengandung styles. Format data dokumen Micrososft Word (*.doc) merupakan contoh format teks jenis ini yang paling popular. Contoh format data teks di atas beserta perangkat lunak yang biasa digunakan diantaranya adalah (Erdiansyah, 2014): 1. Format data teks (*.txt) Format data teks merupakan format teks yang digunakan untuk menyimpan huruf, angka, karakter control (tabulasi, pindah baris, dan sebagainya) atau symbol-simbol lain yang biasa digunakan dalam tulisan seperti titik, koma, tanda petik, dan sebagainya. Satu huruf, angka, karakter control atau symbol pada arsip teks
9 memakan tempat satu byte. Berbeda dengan jenis teks terformat yang satu huruf saja dapat memakan tempat beberapa byte menyimpan format dari huruf tersebut seperti font, ukuran, tebal atau tidak dan sebagainya. Kelebihan dari format data teks ini adalah ukuran datanya yang kecil karena tiadanya fitur untuk memformat tampilan teks. Saat ini perangkat lunak yang paling banyak digunakan untuk memanipulasi format data ini adalah Notepad. 2. Format data dokumen (*.doc) Doc merupakan ekstensi arsip dokumen perangkat lunak Microsoft Word yang paling banyak digunakan dalam Menulis laporan, makalah dan sebagainya. Doc merupakan jenis teks terformat yang tidak hanya dapat mengatur tampilan teks seperti styles (font, ukuran huruf, dan sebagainya), namun juga dapat menyisipkan gambar. Kekurangan format teks dokumen ini terletak pada ukuran datanya yang besar. 3. Rich text format (*.rtf) Format teks ini dikembangkan oleh Microsoft yang dapat dibaca oleh berbagai macam platform, seperti Windows, Linux, Mac OS dan sebagainya. 2.3. Algoritma Abu Ja far Muhammad Ibnu Musa Al-Khwarizmi: Ahli matematika dan astronomi Persia, penulis buku Aljabar wal muqabala beberapa abad yang lalu (diperkirakan wafat pada tahun 850), dianggap sebagai pencetus pertama algoritma karena di dalam buku tersebut Abu Ja far menjelaskan langkah-langkah dalam menyelesaikan berbagai persoalan aritmetika (aljabar). Kemungkinan besar kata algoritma diambil dari kata al-kwarizmi yang kemudian berubah menjadi agorism, selanjutnya menjadi algorithm. Defenisi algoritma adalah teknik penyusunan langkah-langkah penyelesaian masalah dalam bentuk kalimat dengan jumlah kata terbatas tetapi tersusun secara logis dan sistematis (Ariani, R 2013). 2.4. Algoritma Fibonacci Code Leonardo Pisano Fibonacci adalah seorang ahli matematika Italia, Dia dianggap sebagai Matematikawan terbesar dari abad Pertengahan, Dia berperan penting dalam menghidupkan kembali matematika kuno. Dalam bukunya yang berjudul Liber Abaci, memperkenalkan Eropa dengan notasi Hindu-Arab untuk bilangan (Salomon, 2007).
10 Leonardo Pisano Fibonacci lahir sekitar tahun 1170 dan meninggal sekitar tahun 1250 di Pisa, Italia. Dia menulis teks matematika, antara lain memperkenalkan Eropa dengan notasi Hindu- Arab untuk bilangan. Meskipun buku-bukunya harus ditulis dengan tangan, tetapi teks tentang natematika beredar luas (Suzyanna, 2011). Sekarang deret Fibonacci adalah salah satu objek matematika terkenal. Bilangan Fibonacci didefinisikan sebagai barisan bilangan yang suku-sukunya merupakan penjumlahan 2 suku sebelumnya. Bilangan Fibonacci dapat ditunjukkan sebagai barisan bilangan: 0,1,1,2,3,5,8,13,21,34,55,89,144,233, Langkah-langkah dalam pembuatan sebuah kode Fibonacci adalah sebagai berikut: 1. Tentukan sebuah bilangan bulat positif n yang lebih besar atau sama dengan 1 2. Temukan bilangan Fibonacci f terbesar yang lebih kecil atau sama dengan n, kurangkan nilai n dengan f dan catat sisa pengurangan nilai n dengan f. 3. Jika bilangan yang dikurangkan adalah bilangan yang terdapat dalam deret Fibonacci F(i), tambahkan angka 1 pada i-2 dalam kode Fibonacci yang akan dibentuk. 4. Ulangi langkah 2, tukar nilai n dengan sisa pengurangan nilai n dengan f sampai sisa pengurangan nilai n dengan f adalah 0. 5. Tambahkan angka 1 pada posisi paling kanan kode Fibonacci yang akan dibentuk. 2.5. Algoritma Inverted Elias Gamma Code Elias Gamma Code (n) adalah algoritma yang dibuat oleh Peter Elias pada tahun 1975. Algoritma ini adalah kode umum yang digunakan untuk meng-encode (kompresi) dan decode (dekompresi) bilangan bulat positif (n) meskipun pada bilangan bulat yang besar (Sitepu, 2014). Elias Gamma kebanyakan digunakan ketika pengkodean integer yang mempunyai upper-bound tidak dapat diperiksa sebelumnya. Adapun aturan untuk kompresi sebuah bilangan dengan menggunakan Elias Gamma adalah sebagai berikut :
11 1. Tentukan nilai bilangan positif n. 2. Ubah nilai n ke dalam bentuk bilangan biner kemudian biner tersebut di invertedkan (β(n)). 3. Hitung panjang dari β(n) dan tetapkan sebagai nilai M. 4. Tentukan kode unary ɥ (M) dengan cara (M-1)* 0 + 1. 5. Buatkan kode Elias Gamma dengan menggabungkan bilangan β(n) dan ɥ(m). 6. Hapus bit yang paling kiri. Pengkodean Gamma tidak melakukan pengkodean pada bilangan bulat nol ataupun negatif. Salah satu cara untuk menangani nol adalah menambahkan 1 sebelum pengkodeaan dan kemudian mengurangi dengan 1 setelah dilakukan proses decoding. Salah yang lain adalah memberi prefix pada semua kode bukan nol dengan 1 dan kemudian kode nol sebagai suatu 0 tunggal. Salah satu cara untuk mengkodekan semua integer adalah membentuk suatu bijeksi, yaitu pemetaan bilangan bulat (0, 1, - 1, 2, - 2, 3, -3,...) hingga (1, 2, 3, 4, 5, 6, 7,...) sebelum pengkodean dimulai. Banyak algoritma kompresi menggunakan nilai bilangan bulat, seperti RLE yang melakukan penggantian terhadap karakter yang berulang dengan kode tertentu dan LZ77 melakukan pencocokan panjang string yang berdasarkan atas posisi offset. Setiap algoritma perlu untuk merepresentasikan nilai integer yang memberikan kelebihan jika dapat diatur pengurangan jumlah bit diperlukan untuk hal ini. Dari penjelasan ini tampak mengenai pengkode dari bilangan-bilangan buat ini sagat penting. Metode encoding apa yang dipilih bergantung kepada distribusi dan jangkuan dari nilai. Jika nilai yang terdistribusi rata-rata pada jangkauan seluruhnya, suatu representasi biner langsung merupakan pilihan yang optimal. Jumlah bit yang diperlukan tentunya juga bergantugn kepada jangkauan ini. Jika tidak terdapat batas atas terdefinisi pada nilai integer tersebut, kode biner langsung tidak dapat digunakan dan salah dari pengkodean Elias seperti Elias Gamma harus dipilih. Elias Gamma mengasumsikan bahwa nilai bilangan bulat yang kecil lebih dapat diproses. Pada kenyataan ini mengasumsikan (atau kelebihan dari) suatu distribusi yang proporsional. Nilai yang menggunakan n bit harus dua kali lebih menguntungkan dibandingkan nilai yang menggunakan n + 1 bit. Dalam pengkodean ini jumlah bit nol sebelum bit satu pertama (suatu kode unary) mendefinisikan seberapa banyak bit untuk didapatkan (Antoni, 2014).
12 2.6. Kompleksitas Algoritma Kompleksitas algoritma adalah ukuran yang dibutuhkan untuk melakukan komputasi pada algoritma yang digunakan. Secara informal, algoritma dapat menyelesaikan permasalahan dalam waktu yang singkat yang memiliki kompleksitas waktu yang rendah, sementara algoritma yang membutuhkan waktu yang lama untuk menyelesaikan masalah mempunyai kompleksitas yang tinggi. Kompleksitas waktu dinyatakan oleh T(n) yang diukur dari jumlah proses komputasi yang dibutuhkan agar algoritma dapat berjalan sebagai fungsi dari ukuran masukan (n). Ukuran masukan n adalah jumlah data yang diproses oleh sebuah algoritma (Azizah, 2013). 2.7. Penelitian yang Relevan Berikut ini beberapa penelitian yang terkait dengan algoritma Fibonacci Code dan Inverted Elias Gamma: 1. Erdiansyah, Umri (2015) dalam skripsi yang berjudul Perbandingan Algoritma Elias Delta Code dengan Leveinstein untuk Kompresi File Teks. Dalam skripsi dapat disimpulkan bahwa secara rata-rata algoritma Elias Delta Code menghasilkan rasio file hasil yang lebih baik daripada algoritma Leveinstein, selain itu algoritma Elias Delta Code membutuhkan waktu yang tersingkat daripada algoritma Leveinstein. 2. Siagian, Prahara (2015) dalam skripsi yang berjudul Analisis Perbandingan KinerjaAlgoritma Fixed Length Binary Encoding (FLBE) dengan Algoritma Sequitur dalam Kompresi File Teks. Pada skripsi ini dapat disimpulkan bahwa Algoritma Sequitur membutuhkan waktu yang lebih lama untuk melakukan proses kompresi. Ini disebabkan oleh karena algoritma Sequitur memiliki nested looping yang lebih banyak dibandingkan algoritma FLBE.