BAB 2 TINJAUAN PUSTAKA 2.1. Kompresi Data - Perancangan Sistem Pengamanan Dan Kompresi Data Teks Dengan Fibonacci Encoding Dan Algoritma Shannon-Fano Serta Algoritma Deflate

TINJAUAN PUSTAKA

2.1. Kompresi Data

  Kompresi data adalah proses mengkodekan informasi menggunakan bit atau information-bearing unit yang lain yang lebih rendah daripada representasi data yang tidak terkodekan dengan suatu sistem enkoding tertentu. Contoh kompresi sederhana yang biasa kita lakukan misalnya adalah menyingkat kata-kata yang sering digunakan tapi sudah memiliki konvensi umum. Misalnya: kata “yang” dikompres menjadi kata

  [12] “yg”.

  Pengiriman data hasil kompresi dapat dilakukan jika pihak pengirim/yang melakukan kompresi dan pihak penerima memiliki aturan yang sama dalam hal kompresi data. Pihak pengirim harus menggunakan algoritma kompresi data yang sudah baku dan pihak penerima juga menggunakan teknik dekompresi data yang sama dengan pengirim sehingga data yang diterima dapat dibaca di-decode kembali dengan

  [12] benar.

  Proses kompresi data didasarkan pada kenyataan bahwa pada hampir semua jenis data selalu terdapat pengulangan pada komponen data yang dimilikinya, misalnya didalam suatu teks kalimat akan terdapat pengulangan penggunaan huruf

  [13]

  alphabet dari huruf a sampai dengan huruf z. Kompresi data melalui proses

  

encoding berusaha untuk menghilangkan unsur pengulangan ini dengan mengubahnya

  sedemikian rupa sehingga ukuran data menjadi lebih kecil. Kompresi data menjadi sangat penting karena memperkecil kebutuhan penyimpanan data, mempercepat pengiriman data, memperkecil kebutuhan bandwidth. Teknik kompresi bisa dilakukan

  WMA), dan video (MPEG, H261, H263).

  Proses kompresi dan dekompresi data dapat ditunjukan melalui diagram blok seperti pada Gambar 2.1.

  Proses kompresi menggunakan algoritma kompresi Data Input

  Data Terkompresi Proses dekompresi data terkompresi menjadi data input menggunakan aturan-aturan dekompresi dari algoritma kompresi

Gambar 2.1. Diagram Blok Proses Kompresi dan Dekompresi Data

  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

  [12]

  data. Lossless compression disebut juga dengan reversible compression karena data asli bisa dikembalikan dengan sempurna. Akan tetapi rasio

  [13] 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 Deflate, algoritma Run Length Coding, algoritma

  [12] Huffman, algoritma LZW, dan algoritma Arithmetic Coding. Kompresi data bersifat lossy Algoritma kompresi tergolong lossy jika tidak memungkinkan data yang sudah dikompres dapat direkonstuksi kembali persis sesuai dengan data asli.

  Kehilangan detil-detil yang tidak berarti dapat diterima pada waktu proses kompresi. 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

  [12] Compression, CELP, JPEG, MPEG-1 dan WMA.

2.2. File Teks

  File teks (disebut juga dengan flat file) adalah salah satu jenis file komputer yang tersusun dalam suatu urutan baris data teks biasanya diwakili oleh 8 bit kode ASCII

  [7] (atau EBCDIC) .

  ASCII (American Standard Code for Information Interchange) dan EBCDIC (Extended Binary Coded Decimal Interchange Code) merupakan cikal bakal dari set karakter lainnya. ASCII merupakan set karakter yang paling umum digunakan hingga sekarang. Set karakter ASCII terdiri dari 128 buah karakter yang masing-masing memiliki lebar 7-bit atau tujuh angka 0 dan 1, dari 0000000 sampai dengan 1111111.

  Alasan mengapa lebar set karakter ASCII sebesar 7 bit adalah karena komputer pada awalnya memiliki ukuran memori yang sangat terbatas, dan 128 karakter dianggap memadai untuk menampung semua huruf Latin dengan tanda bacanya, dan beberapa karakter kontrol. ASCII terdiri dari huruf-huruf, angka-angka, dan tanda-tanda baca sebagai berikut: ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q

  [16]

  r s t u v w x y z { | } ~ satu penyebab IBM menggunakan set karakter di luar ASCII sebagai standar pada komputer ciptaan IBM adalah karena EBCDIC lebih mudah dikodekan pada punch

  

card yang pada tahun 1960-an masih banyak digunakan. Penggunaan EBCDIC pada

mainframe

  IBM masih ada hingga saat ini, walaupun punch card sudah tidak digunakan lagi. Seperti halnya ASCII, EBCDIC juga terdiri dari 128 karakter yang masing-masing berukuran 7-bit. Hampir semua karakter pada ASCII juga terdapat

  [16] pada set karakter EBCDIC.

  Akhir dari sebuah file teks sering ditandai dengan penempatan satu atau lebih karakter – karakter khusus yang dikenal dengan tanda end-of-file setelah baris terakhir di suatu file teks. File teks biasanya mempunyai jenis MIME (Multipurpose Internet

  

Mail Extension ) "text/plain", biasanya sebagai informasi tambahan yang menandakan

  suatu pengkodean. pada sistem operasi Windows, suatu file dikenal sebagai suatu file

  [4]

  teks jika memiliki extention misalnya txt, rtf, doc, docx dan lain - lain. Contoh file teks sederhana dapat dilihat pada Gambar 2.2.

Gambar 2.2. File Teks Sederhana Kode Fibonacci adalah variable length code, dimana bilangan bulat yang lebih kecil mendapatkan kode pendek. Kode berakhir dengan dua buah bit satu, dan nilai yang didapatkan adalah jumlah dari nilai-nilai Fibonacci yang sesuai untuk bit yang ditetapkan (kecuali bit terakhir, yang merupakan akhir dari kode).

  [3]

  Langkah-langkah pembentukan sebuah kode Fibonacci adalah sebagai berikut:

  1. Tentukan sebuah bilangan bulat positif n yang lebih besar atau sama dengan 2.

  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.

  Untuk melakukan decode sebuah kode Fibonacci, hilangkan angka “1” paling kanan, kemudian substitusi dan jumlahkan kode Fibonacci yang tersisa dengan menggunakan deret Fibonacci. Contoh proses encoding dan decoding sebuah bilangan menjadi kode Fibonacci dapat dilihat sebagai berikut:

  Nilai n = 65. Deret Fibonacci yang paling mendekati nilai n adalah: 0 1 1 2 3 5 8 13 21 34 55 Proses pengurangan nilai n dengan setiap bilangan Fibonacci: (1) 65 – 55 = 10 (2) 10 – 8 = 2

  (3) 2 – 2 = 0

Tabel 2.1. Proses Pembentukan Kode Fibonacci

  Urutan Bilangan Fibonacci F(0) F(1) F(2) F(3) F(4) F(5) F(6) F(7) F(8) F(9) F(10) Dalam Deret Fibonacci Bilangan

  1

  1

  2

  3

  5

  8

  13

  21

  34

  55 Fibonacci Kode

  1 - 1 - Fibonacci

  1 Sementara Proses akhir pembentukan kode Fibonacci adalah menambahkan angka “1” pada posisi paling kanan dari kode Fibonacci sementara sehingga kode Fibonacci untuk angka 65 adalah “0100100011”. Sedangkan untuk proses decoding, hilangkan angka “1” paling kanan dalam kode Fibonacci, kemudian substitusi angka 1 dengan bilangan Fibonacci sesuai urutan dari kiri ke kanan dan jumlahkan seluruh hasil substitusi tersebut. Sehingga proses decode untuk kode Fibonacci “0100100011” adalah sebagai berikut:

  Proses decode setelah angka “1” paling kanan dihilangkan: 0 x F(2) + 1 x F (3)

  • 0 x F(4) + 0 x F(5) + 1 x F(6) + 0 x F(7) + 0 x F(8) + 0 x F(9) + 1 x F(10) = 0 + 2 + 0 + 0 + 8 + 0 + 0 + 0 + 55 = 65. Terbukti bahwa angka 65 diubah menjadi kode Fibonacci menjadi “0100100011”, dan kode Fibonacci “0100100011” setelah di- decode tetap menjadi angka 65.

  Kode Fibonacci, sebagaimana namanya, sangat erat berhubungan dengan representasi bilangan bulat Fibonacci. Kode Fibonacci dari sebuah bilangan bulat kanannya. Sehingga kode Fibonacci dari 5 adalah 0001|1 dan untuk 33 adalah 1010101|1. Sangat jelas bahwa kode-kode tersebut berakhir dengan sepasang angka

  [10] “11” dalam kodenya.

  Karena kode yang dihasilkan tidak memiliki dua buah bit 1 yang berurutan, maka kepadatan akan terlihat jelas dibandingkan yang lain, apabila sebagian nilai yang dicari adalah nilai-nilai kecil. Namun disisi lain, ini juga membuat kode

  [3] Fibonacci ini tahan terhadap kesalahan decode.

2.4. Algoritma Shannon-Fano

  Algoritma Shannon-Fano ditemukan oleh Claude Shannon dan Robert Fano pada tahun 1949. Merupakan algoritma pertama untuk merancang sebuah set dari variable-

  [11]

length code terbaik. Pada saat itu metode ini merupakan metode yang paling baik

  tetapi hampir tidak pernah digunakan dan dikembangkan lagi setelah kemunculan

  [18] algoritma Huffman.

  Kode Shannon-Fano adalah sebuah teknik pengkodean yang dikembangkan pada awal tahun 1950-an yang bertujuan untuk memperkecil jumlah bit yang digunakan dalam sebuah pesan ketika probabilitas dari simbol dalam pesan telah

  [6]

  sebelumnya diketahui. Dalam pendekatan algoritma Shannon-Fano, sebuah pohon

  [7] biner dirancang secara “top-down”.

  Algoritma Shannon-Fano merupakan algoritma kompresi data yang mengkodekan tiap karakter dengan menggunakan beberapa rangkaian bit. Pembentukan bit yang mewakili masing-masing karakter dibuat berdasarkan frekuensi

  [10] kemunculan tiap karakter. Deflate adalah algoritma kompresi dengan teknik lossless compression. Hal ini menjawab kebutuhan dalam memperkecil ukuran suatu data untuk penyimpanan atau pengiriman tanpa merusak isinya. Spesifikasi yang diuraikan pada dokumen RFC 1951 “DEFLATE Compressed Data Format Spesification Version 1.3” menjelaskan bahwa algoritma deflate mengkombinasikan algoritma LZ77 dan Huffman,

  [8]

  mengambil konsep sliding-window dan prefix-tree. Setelah dilakukan pengujian didapati bahwa algoritma Deflate ini efektif digunakan pada data teks dan data gambar

  [14] bitmap .

  Deflate adalah sebuah metode kompresi yang populer yang aslinya digunakan untuk software Zip dan Gzip yang sudah terkenal dan telah diadopsi ke dalam berbagai aplikasi penting, seperti: 1.

  Protokol HTTP ([RFC1945 96] dan [RFC2616 99]) 2. Protokol kontrol kompresi PPP compression control protocol ([RFC1962

  96] dan [RFC1979 96]) 3. Format file citra PNG (Portable Network Graphics) dan MNG (Multiple-

  Image Network Graphics)

  [9] 4.

  PDF (Portable Document File) Adobe” Dalam proses kompresinya, algoritma Deflate ini terlebih dahulu melakukan proses pengelompokan karakter dengan menggunakan algoritma LZ77. Kemudian hasil dari pengelompokan, karakter tersebut dikompresi lagi dengan menggunakan

  [11]

  algoritma Huffman (Huffman Tree). Algoritma Deflate ini bersifat loseless

  

compression . Hal ini karena algoritma Deflate ini menggabungkan dua algoritma

[2] kompresi yang bersifat loseless.

  Penggunaan kompresi LZ77 sebelumnya melihat teks sebagai sebuah kamus. Kompresi ini menggantikan frasa variable-length dalam teks input dengan pointer tergantung dari seberapa panjang frasa yang ada dalam kamus, seberapa besar window dalam teks yang terlihat, dan entropi dari teks asal sesuai dengan model LZ77. Struktur data utama dalam LZ77 adalah sebuah window teks, dipisahkan ke dalam dua bagian. Bagian pertama berisikan sebuah blok dari teks yang baru dikodekan. Bagian yang kedua biasanya yang lebih kecil adalah look-ahead buffer. Look-ahead buffer berisi karakter-karakter yang dibaca dari stream input namun belum dikodekan. Ukuran normal dari window teks adalah beberapa ribu karakter. Look-ahead buffer umumnya lebih kecil, mungkin sepuluh sampai seratus karakter saja. Algoritma ini mencoba untuk mencocokan isi dari look-ahead buffer menjadi sebuah String di

  [6] dalam kamus.

  Algoritma dekompresi untuk LZ77 bahkan lebih sederhana, karena tidak perlu melakukan perbandingan. Algoritma ini membaca sebuah token, output dari frasa yang bersangkutan, output dari karakter itu, kemudian geser dan ulangi. Algoritma ini

  [6] tetap menjaga window-nya, tapi tidak bekerja dengan pembandingan String.

  Kode Huffman, dinamai atas penemunya yaitu D. A. Huffman, menghasilkan jumlah minimum dari kemungkinan kerangkapan dari sebuat set variable-length code dengan ukuran yang tetap. Ini tidak berarti bahwa algoritma Huffman adalah sebuah metode pengkodean yang optimal, namun dapat diartikan bahwa algoritma ini menghasilkan pendekatan terbaik untuk simbol-simbol kode ketika menggunakan

  [6] kode dengan besar yang tetap.