• Tidak ada hasil yang ditemukan

Studi Perbandingan Algoritma Huffman Dan LZW (Lempel Ziv Welch) Pada Pemampatan File Teks

N/A
N/A
Protected

Academic year: 2016

Membagikan "Studi Perbandingan Algoritma Huffman Dan LZW (Lempel Ziv Welch) Pada Pemampatan File Teks"

Copied!
128
0
0

Teks penuh

(1)

STUDI PERBANDINGAN ALGORITMA HUFFMAN DAN LZW (LEMPEL ZIV WELCH) PADA PEMAMPATAN FILE TEKS

SKRIPSI

Diajukan untuk melengkapi tugas akhir dan memenuhi syarat mencapai gelar Sarjana Komputer

CANGGIH PRAMILO 041401010

PROGRAM STUDI S1 ILMU KOMPUTER DEPARTEMEN ILMU KOMPUTER

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

(2)

Medan, 24 November 2008

LEMBAR PENGESAHAN

STUDI PERBANDINGAN ALGORITMA HUFFMAN DAN LZW ( LEMPEL ZIV WELCH ) PADA PEMAMPATAN FILE TEKS

Oleh

Canggih Pramilo NIM. 041401010

Telah diperiksa dan disetujui untuk diseminarkan oleh :

Dosen Pembimbing I Dosen Pembimbing II

(3)

PERSETUJUAN

Judul : STUDI PERBANDINGAN ALGORITMA

HUFFMAN DAN LZW PADA PEMAMPATAN FILE TEKS

Kategori : SKRIPSI

Nama : CANGGIH PRAMILO

Nomor Induk Mahasiswa : 041401010

Program Studi : SARJANA (S1) ILMU KOMPUTER

Departemen : ILMU KOMPUTER

Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN

ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA

Diluluskan di

Medan, Desember 2008 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Drs. Agus Salim Harahap, M.Si Syahriol Sitorus, S.Si, MIT

NIP. 130 936 279 NIP. 132 174 687

Diketahui/Disetujui oleh Prog. Studi Ilmu Komputer S-1 Ketua,

(4)

PENGHARGAAN

Syukur alhamdulillah penulis nyatakan kehadirat ALLAH SWT Yang Maha Pengasih dan Maha Penyayang, dengan limpahan rahmat dan karunia-Nya skripsi ini berhasil diselesaikan dalam waktu yang telah ditetapkan.

(5)

PERNYATAAN

STUDI PERBANDINGAN ALGORITMA HUFFMAN DAN LZW (LEMPEL ZIV WELCH) PADA PEMAMPATAN FILE TEKS

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya

Medan, Desember 2008

(6)

STUDY OF COMPARISON OF HUFFMAN AND LZW ALGORITHM IN COMPRESSION OF TEXT FILE

ABSTRACT

(7)

ABSTRAK

(8)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak v

2.4 Pengertian Pemampatan Data 10

2.5 Metode Pemampatan 11

3.2 Karakteristik Algoritma Huffman dan LZW (Lempel Ziv Welch) 25

3.3 Analisis Pemampatan File Teks 26

(9)

3.4 Analisis Fungsional Sistem 34

3.4.1 DFD Level 0 ( Context Diagram ) 34

3.4.2 DFD Level 1 35

3.4.3 DFD Level 2 Untuk Proses Encoding (Pemampatan) 36 3.4.4 DFD Level 2 Untuk Proses Decoding (Penirmampatan) 38

Bab 4 Implementasi dan Pengujian 39

4.1 Lingkungan Implementasi 39

4.2 Perangkat Keras yang Digunakan 39

4.3 Perangkat Lunak yang Digunakan 39

4.4 Implementasi Antar Muka 40

4.5 Pengujian Sistem Kompresi Teks Sederhana 44

4.5.1 Analisis Ukuran File 45

4.5.2 Analisis Kecepatan Proses 51

Bab 5 Penutup 60

5.1 Kesimpulan 60

5.2 Saran 61

Daftar Pustaka 62

Lampiran A: Pembentukan Pohon Huffman 63

Lampiran B: Perbandingan Teks dengan Kamus 71 Lampiran C: Kode LZW yang Dicocokkan dengan Kamus 79

(10)

DAFTAR TABEL

Halaman Tabel 2.1 Frekuensi Kemunculan Karakter yang Telah Diurutkan 16 Tabel 2.2 Tabel Kode Huffman untuk Masing-Masing Karakter 19

Tabel 2.3 Proses Pemampatan LZW 22

Tabel 2.4 Proses Penirmampatan LZW 23

Tabel 3.1 Karakter yang telah Diurutkan Berdasarkan Frekuensinya 27

Tabel 3.2 Kode Huffman yang telah Terbentuk 29

Tabel 4.1 Hasil Pengujian Sistem 45

Tabel 4.2 Rasio Pemampatan 16 File (*.txt) dengan Algoritma Huffman dan LZW 46

Tabel 4.3 Rasio Pemampatan 16 File (*.doc) dengan Algoritma Huffman dan LZW 47 Tabel 4.4 Rasio Pemampatan 16 File (*.htm) dengan Algoritma Huffman dan LZW48 Tabel 4.5 Rasio Pemampatan 16 File (*.rtf) dengan Algoritma Huffman dan LZW 49 Tabel 4.6 Kecepatan Proses Pemampatan 16 File (*.txt) dengan Algoritma

Huffman dan LZW 51

Tabel 4.7 Kecepatan Proses Pemampatan 16 File (*.doc) dengan Algoritma

Huffman dan LZW 53

Tabel 4.8 Kecepatan Proses Pemampatan 16 File (*.htm) dengan Algoritma

Huffman dan LZW 55

Tabel 4.9 Kecepatan Proses Pemampatan 16 File (*.rtf) dengan Algoritma

(11)

DAFTAR GAMBAR

Halaman Gambar 2.1 Pohon Berakar dengan v1 Sebagai Akar 9

Gambar 2.2 Pohon Biner 9

Gambar 2.3 Pembentukan Pohon Huffman 18

Gambar 3.1 Pohon Huffman yang telah Terbentuk 28

Gambar 3.2 Diagram Level 0 34

Gambar 3.3 Diagram Level 1 35

Gambar 3.4 Diagram Level 2 untuk ProsesEncoding (Pemampatan) 36 Gambar 3.5 Diagram Level 2 untuk Proses Decoding (Penirmampatan) 38

Gambar 4.1 Tampilan Halaman Utama 40

Gambar 4.2 File Teks yang akan Dimampatkan ( Compression ) 41 Gambar 4.3 Pemampatan File Teks dengan Algoritma Huffman 42 Gambar 4.4 Penirmampatan File Teks dengan Algoritma Huffman 42 Gambar 4.5 Pemampatan File Teks dengan Algoritma LZW 43 Gambar 4.6 Penirmampatan File Teks dengan Algoritma LZW 43

Gambar 4.7 Grafik Rasio Pemampatan File (*.txt) 46

Gambar 4.8 Grafik Rasio Pemampatan File (*.doc) 47

Gambar 4.9 Grafik Rasio Pemampatan File (*.htm) 48

Gambar 4.10 Grafik Rasio Pemampatan File (*.rtf) 49

Gambar 4.11 Grafik Perbandingan Rasio Pemampatan 50

(12)

STUDY OF COMPARISON OF HUFFMAN AND LZW ALGORITHM IN COMPRESSION OF TEXT FILE

ABSTRACT

(13)

ABSTRAK

(14)

BAB 1

PENDAHULUAN

1.1 LATAR BELAKANG

Kemajuan teknologi memicu kebutuhan informasi yang semakin besar. Sayangnya kebutuhan informasi yang besar ini berdampak pada kebutuhan storage (media penyimpanan) yang semakin besar pula. Informasi yang dimaksud adalah informasi yang berupa file text (file berisi tulisan biasa). 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.

Media penyimpanan yang terbatas, membuat semua orang mencoba berpikir untuk menemukan sebuah cara yang dapat digunakan untuk memampatkan data teks. pemampatan ialah proses pengubahan sekumpulan data menjadi suatu bentuk kode untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data .

(15)

1.2 Rumusan Masalah

Dari latar belakang di atas dapatlah dirumuskan beberapa masalah yang menjadi latar belakang penelitian ini, yaitu:

1. Bagaimana cara menerapkan algoritma huffman dan LZW dalam pemampatan data yang berupa data teks dan bagaimana proses encoding pada algoritma Huffman dan LZW untuk data yang akan dimampatkan dari ukuran yang besar menjadi ukuran yang lebih kecil serta bagaimana proses decoding pada algoritma Huffman dan LZW untuk data yang telah dimampatkan agar kembali ke ukuran semula .

2. Menghitung berapa kecepatan pemampatan pada masing-masing algoritma .

3. Berapa rasio/perbandingan ukuran file hasil pemampatan terhadap file asli .

1.3 Batasan masalah

Untuk memfokuskan pada tujuan penelitian maka penulis membatasi pembahasan penelitian ini. Adapun yang menjadi pembatasan masalah adalah sebagai berikut:

1. Data yang dimampatkan berupa text, tidak berupa image, video dan audio.

2. Operating System yang digunakan yaitu Windows XP.

3. File yang dimampatkan adalah file teks (*.txt), file rtf (*.rtf), file html (*.htm) dan file dokumen (*.doc) .

4. Rasio ( perbandingan ) yang dilakukan berdasarkan kecepatan pemampatan dan ukuran file hasil pemampatan terhadap ukuran semula .

(16)

1.4 Tujuan Penelitian

Tujuan dari penelitian ini adalah untuk mengetahui performansi dari masing-masing algoritma baik itu Algoritma Huffman dan Algoritma LZW dalam pemampatan teks serta mengetahui kelebihan dan kekurangan algoritma Huffman dan LZW

1.5 Manfaat Penelitian

Manfaat dari penelitian ini yaitu memahami dan mengetahui bagaimana memilih teknik pemampatan yang tepat, sehingga dapat bermanfaat juga untuk melakukan penyimpanan data dalam ruang penyimpanan yang terbatas .

1.6 Metode Penelitian

Penelitian ini dilakukan dengan beberapa tahapan yaitu :

1) Pembelajaran secara literatur

Metode ini dilaksanakan dengan melakukan studi kepustakaan melalui membaca buku-buku maupun artikel–artikel yang dapat mendukung penelitian.

2) Analisis Masalah

Mencari penyebab dan solusi permasalahan yang telah diidentifikasikan pada rurmusan masalah.

3) Perancangan

(17)

4) Implementasi aplikasi

Tahap ini adalah adalah tahap untuk menterjemahkan rancangan aplikasi ke dalam bentuk yang lebih nyata, dalam hal ini adalah bahasa pemrograman Visual C++.

5) Pengujian

Melakukan serangkaian ujicoba terhadap hasil dari implementasi aplikasi, dan memperbaiki jika masih terdapat kesalahan dan menarik kesimpulan dari analisis yang dilakukan.

6) Penyusunan laporan dalam bentuk skripsi

1.7 Sistematika Penulisan

Dalam penulisan tugas akhir ini, Penulis membagi sistematika penulisan menjadi 5 Bab, yang lebih jelasnya dapat dilihat di bawah ini :

BAB 1 : PENDAHULUAN

Berisi tentang latar belakang diambilnya judul Tugas Akhir “Studi Perbandingan Algoritma Huffman dan LZW (Lempel-Ziv-Welch) pada Pemampatan File Teks” , tujuan dari pembuatan Tugas Akhir ini, batasan masalah dalam perancangan aplikasi, dan sistematika penulisan Tugas Akhir yang menjelaskan secara garis besar susbstansi yang diberikan pada masing-masing bab.

BAB 2 : LANDASAN TEORI

(18)

BAB 3 : ANALISIS DAN PERANCANGAN SISTEM

Berisi analisa dari algoritma Huffman dan LZW, karakteristik dan perancangan kode untuk algoritma Huffman dan LZW.

BAB 4 : IMPLEMENTASI DAN PENGUJIAN SISTEM

Bab ini menjelaskan bagaimana mengimplementasikan aplikasi dirancang dan dilanjutkan dengan menguji aplikasi yang dibangun dengan menggunakan bahasa pemrograman Visual C++.

BAB 5 : KESIMPULAN DAN SARAN

(19)

BAB 2

LANDASAN TEORI

2.1 Pengertian File 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. 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.

(20)

2.1.1 Tipe Teks

Tipe teks merupakan tipe dasar yang sudah sangat dikenal dalam kehidupan sehari-hari. 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 (Purnomo, Herry et al, 2005, hal: 99).

2.1.2 Format Teks

Secara umum, format data teks dibagi menjadi dua bagian, yaitu (Purnomo, Herry et al, 2005, hal: 410) :

1. Teks terformat (formatted text)

Merupakan teks yang terformat dan mengandung styles. Format data dokumen Microsoft Word (*.doc) merupakan contoh format teks jenis ini yang paling popular.

2. Teks sederhana (plain text)

Format data teks (*.txt) merupakan contoh format teks yang paling populer.

Contoh format data teks di atas beserta perangkat lunak yang biasa digunakan diantaranya adalah (Purnomo, Herry et al, 2005, hal: 410):

1. 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. Format data teks (*.txt)

(21)

sebagainya. Satu huruf, angka, karakter, kontrol atau simbol pada arsip teks memakan tempat satu byte. Berbeda dengan jenis teks terformat yang satu huruf saja dapat memakan tempat beberapa byte untuk 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.

3. Hyper Text Markup Language (*.html atau *.htm)

Merupakan format teks standard untuk tampilan dokumen web.

4. Format data dokumen (*.doc)

Doc merupakan ekstensi arsip dokumen perangkat lunak Microsoft Word yang paling banyak digunakan dalam penulisan 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.

2.2 Pohon (Tree)

Secara sederhana tree dapat didefinisikan sebagai kumpulan elemen yang salah satu elemennya disebut root, dan sisa elemen yang lain (yang disebut node) terpecah menjadi sejumlah himpunan yang saling tidak berhubungan satu sama lain (disjoint), yang disebut dengan subtree. Node yang tidak mempunyai cabang disebut terminal node atau leaf, sedangkan node yang mempunyai cabang disebut branch node. Jumlah

node pada sebuah tree merupakan bilangan terbatas (finite number) (Muthohar, Fiqri, 2004).

(22)

v1

v2 v3

v4 v5 v6 v7

Gambar 2.1 Pohon Berakar dengan v1 Sebagai Akar

Pohon secara luas digunakan dalam struktur data ilmu komputer seperti pohon biner, pohon perentang, tumpukan dan lain-lain.

2.3 Pohon Biner (Binary Tree)

Pohon biner merupakan kasus khusus pohon n-ary jika n = 2. Pohon biner adalah himpunan dengan jumlah terbatas yaitu m buah node (m ≥ 0), yang selain kosong (m = 0) hanya dapat berisi sebuah node root yang memiliki dua buah subtree yang masing-masing disebut sub binary tree kiri dan sub binary tree kanan. Jika m = 0 maka disebut empty binary tree (Muthohar, Fiqri, 2004).

Misalkan T adalah pohon biner dan vєV(T)adalah suatu titik cabang dalam T. Subpohon kiri v adalah pohon biner yang (Johnsonbaugh, Richard, 1998) :

1. Titik-titiknya adalah anak kiri v dan semua turunannya.

2. Garis-garisnya adalah garis-garis dalam E(T) yang menghubungkan titik-titik subpohon kiri v.

3. Anaknya adalah anak kiri v.

v

w x

(23)

Gambar di atas merupakan pohon biner dengan dua subpohon, yaitu subpohon kiri v dengan w sebagai akar dan subpohon kanan v dengan x sebagai akar.

2.4 Pengertian Pemampatan Data

Pemampatan (kompresi) adalah proses pengubahan sekumpulan data menjadi bentuk kode dengan tujuan untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data (Linawaty et al,2004, hal:7). Pemampatan hanya mungkin untuk dilakukan apabila data yang direpresentasikan dalam bentuk normal mengandung informasi yang tidak dibutuhkan. Ketika data tersebut sudah ditampilkan dalam format yang seminimal mungkin, maka data tersebut sudah tidak akan bisa dimampatkan lagi. File yang demikian disebut random file.

Pemampatan merupakan salah satu dari teori informasi yang diperkenalkan oleh Shannon yang bertujuan untuk menghilangkan redundansi dari sumber. Pemampatan bermanfaat dalam membantu mengurangi konsumsi sumber daya yang mahal, seperti ruang hard disk atau perpindahan data melalui internet.

Pemampatan data memiliki beberapa aplikasi, diantaranya (Munir, Rinaldi, 2004, hal: 166):

1. Pengiriman data (data transmission) pada saluran komunikasi data

Data yang telah dimampatkan membutuhkan waktu yang lebih singkat dibandingkan data yang tidak dimampatkan.

2. Penyimpanan data (data storing) di dalam media sekunder ( storage )

(24)

2.5 Metode Pemampatan

Metode pemampatan berdasarkan output ada 2 jenis, yaitu:

1. Metode Lossless

Pemampatan data yang menghasilkan file data hasil pemampatan yang dapat dikembalikan menjadi file data asli sebelum dimampatkan secara utuh tanpa perubahan apapun. Pemampatan data lossless bekerja dengan menemukan pola yang berulang di dalam pesan yang akan dimampatkan tersebut dan melakukan proses pengkodean pola tersebut secara efisien. Pemampatan ini juga dapat berarti proses untuk mengurangi redundancy. Pemampatan jenis ini ideal untuk pemampatan text. Algoritma yang termasuk dalam metode pemampatan

lossless diantaranya adalah teknik dictionary coding dan Huffman coding

(Fernando, Hary, 2004).

2. Metode Lossy

Pemampatan data yang menghasilkan file data hasil pemampatan yang tidak dapat dikembalikan menjadi file data sebelum dimampatkan secara utuh. Ketika data hasil pemampatan di-decode kembali, data hasil decoding tersebut tidak dapat dikembalikan menjadi sama dengan data asli tetapi ada bagian data yang hilang. Oleh karena itu, pemampatan jenis ini tidak baik untuk kompresi data yang kritis seperti data teks. Bentuk pemampatan ini sangat cocok untuk digunakan pada file-file gambar, suara, dan film. Contoh penggunaan pemampatan lossy adalah pada format file JPEG, MP3 dan MPEG . ( Nelson, Mark et al, 1996).

Efek pemampatan pada metode pemampatan losseless dapat diukur melalui sejumlah penyusutan suatu file asal dalam membandingkan ukuran dari jenis-jenis pemampatan, yaitu :

(25)

x 100% (2.1) 2. Kecepatan proses pemampatan (ditulis dalam satuan Kbyte/s):

Kecepatan Proses Pemampatan (2.2)

Ada beberapa kriteria yang sering menjadi pertimbangan dalam memilih suatu metode pemampatan yang tepat diantaranya kecepatan pemampatan, sumber daya yang dibutuhkan, kualitas, ukuran file, kompleksitas algoritma dan lain-lain (Munir, Rinaldi, 2004, hal: 166). Kualitas pemampatan dengan kebutuhan memori biasanya berbanding terbalik. Kualitas pemampatan yang bagus umumnya dicapai pada proses pemampatan yang menghasilkan pengurangan memori yang tidak begitu besar dan begitu juga sebaliknya.

2.6 Algoritma Huffman

Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam pemampatan 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. 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 (Ida, Mengyi Pu, 2006).

(26)

Huffman menggunakan metode symbolwise. Metoda 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. Dalam tugas akhir ini algoritma Huffman yang dibahas yaitu algoritma Huffman yang menggunakan metode statik ( Ida, Mengyi Pu, 2006).

Pada awalnya David Huffman hanya menencoding karakter dengan hanya menggunakan pohon biner biasa, namun setelah itu David Huffman menemukan bahwa penggunaan algoritma greedy dapat membentuk kode prefiks yang optimal. Penggunaan algoritma greedy pada algoritma Huffman adalah pada saat pemilihan dua pohon dengan frekuensi terkecil dalam membuat pohon Huffman. Algoritma greedy ini digunakan pada pembentukan pohon Huffman agar meminimumkan total

cost yang dibutuhkan. Cost yang digunakan untuk menggabungkan dua buah pohon pada akar setara dengan jumlah frekuensi dua buah pohon yang digabungkan, oleh karena itu total cost pembentukan pohon Huffman adalah jumlah total seluruh penggabungan. penggabungan dua buah pohon dilakukan setiap langkah dan algoritma Huffman selalu memilih dua buah pohon yang mempunyai frekuensi terkecil untuk meminimumkan total cost (Wardoyo, Irwan et al, 2003, hal:1).

2.6.1 Kode Prefix (Prefix Code)

(27)

2.6.2 Kode Huffman

Huffman memberikan sebuah algoritma untuk memangun sebuah kode Huffman dengan masukan string teks S={s1,s2,…,sn} dan frekuensi kemunculan karakter

F={f1,f2,…,fn}, dihasilkan keluaran berupa kode string biner C={c1,c2,…,cn} atau disebut kode Huffman (Liliana et al, 2003, hal:4).

Algoritma Pemampatan Huffman:

1. Baca file text yang akan dimampatkan (file asal).

2. Hitung frekuensi dari setiap karakter yang ada. Jenis karakter dan frekuensinya disimpan sebagai tree dalam sebuah list.

3. Selama list masih mempunyai node lebih dari satu maka

a. Urutkan list berdasarkan frekuensinya, secara ascending.

b. Buat tree baru, kaki kiri diisi dengan node pertama list dan kaki kanannya diisi dengan node kedua list. Karakter yang disimpan berupa “a“ dan frekuensinya merupakan jumlahan dari frekuensi kedua kakinya.

4. Sebelum hasil pemampatan disimpan dalam file hasil, maka simpan terlebih dahulu tree huffman nya. Pertama simpan jumlah karakter keseluruhan. Kemudian telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka simpan karakter pada leaf tersebut baru kemudian simpan deretan kode yang dihasilkan. Setiap kode disimpan dengan dibatasi “a“. Setelah tree selesai disimpan, untuk membatasi penyimpanan tree dengan hasil kompresi, disisipkan “A“.

5. Telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka deretan kode yang didapat digunakan untuk mengkodekan karakter pada leaf tersebut. Setelah penelusuran selesai maka akan didapat daftar karakter dan kode binernya.

(28)

Tabel karakter-karakter yang diurutkan berdasarkan frekuensi kemunculan karakter tersebut berhubungan dengan distribusi probabilitas atau distribusi peluang. Distribusi probabilitas ini berhubungan pada kemungkinan penempatan akar atau subpohon baru yang telah terbentuk. Probabilitas untuk masing-masing karakter adalah frekuensi karakter tersebut dibagi jumlah frekuensi keseluruhan.

Untuk proses penirmampatan (decompression) merupakan kebalikan dari proses pemampatan (compression), Decompression berarti menyusun kembali data dari string biner menjadi sebuah karakter kembali. Decompression dapat dilakukan dengan dua cara, yang pertama dengan menggunakan tabel dan yang kedua dengan menggunakan algoritma penirmampatan (decompression).

Algoritma penirmampatan

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.

Contoh 2.1

(29)

Dengan menggunakan algoritma Huffman untuk mengkodekan setiap karakter dapat diperoleh kode Huffman sebagai berikut :

Masukan : 18 karakter yang telah diurutkan dan table frekuensi Keluaran : Kode Huffman

1. Pengurutan karakter berdasarkan frekuensi kemunculannya. Karakter pada data diurutkan di dalam tabel secara menaik (ascending order).

Tabel 2.1 Frekuensi Kemunculan Karakter yang Telah Diurutkan

Karakter Frekuensi

spasi 1

r 1

h 1

e 1

m 1

i 1

p 2

n 2

g 3

a 5

Jumlah 18

2. Pembentukan pohon Huffman

(30)

Pengurutan kembali akar yang baru terbentuk berhubungan dengan distribusi probabilitas. Pada contoh ini, ada lebih dari satu kemungkinan tempat yang tersedia pada penggabungan karakter “spasi” dan “r” dengan frekuensi 2. Untuk mencegah penggabungan akar baru terlalu cepat maka akar ditempatkan pada posisi terendah. Jadi, akar baru “spasi” dan “r” ditempatkan sesudah karakter “a”.

Pembentukan pohon biner dari string “piagam penghargaan” adalah :

(31)

h=1 e=1

Gambar 2.3 Pembentukan Pohon Huffman

Keterangan gambar :

(32)

3. Kode Huffman yang diperoleh dari pohon Huffman yang telah terbentuk adalah :

Tabel 2.2 Tabel Kode Huffman untuk Masing-Masing Karakter

Karakter Frekuensi (f)

Kode Huffman Panjang Kode ( shf )

Total Panjang ( f x shf )

Spasi 1 10110 5 5

r 1 10111 5 5

h 1 10100 5 5

e 1 10101 5 5

m 1 00 2 2

i 1 01 2 2

p 2 1000 4 8

n 2 1001 4 8

g 3 110 3 9

a 5 111 3 15

Total 18 34 64

Dengan demikian, jumlah bilangan bit yang dibutuhkan oleh algoritma Huffman untuk merepresentasikan string “piagam penghargaan” adalah 64 bit. String tersebut dimampatkan dengan rasio sebesar :

x 100% x 100%

= 44,4%

Dengan demikian string “piagam penghargaan” dimampatkan menjadi rangkaian bit : 1000011111101110010110100010101100111010100111101111101111111001

(33)

telah terbentuk atau menggunakan algoritma penirmampatan. Pada proses penirmampatan, rangkaian bit biner

1000011111101110010110100010101100111010100111101111101111111001 Dimulai dengan membaca bit pertama yaitu “1”, tidak terdapat bit “1” pada tabel kode Huffman. Lalu baca bit berikutnya, sehingga menjadi “10”, tidak terdapat juga bit “10”, kemudian baca lagi bit berikutnya, sehingga menjadi “100”, tidak terdapat juga bit “100”, kemudian baca lagi bit berikutnya, sehingga menjadi “1000”. Rangkaian bit “1000” ini ditemukan pada tabel kode Huffman yaitu bit yang merepresentasikan karakter “p”. Proses ini terus dilakukan hingga tidak terdapat lagi bit biner.

2.7 Algoritma LZW (Lempel Ziv Welch)

Algoritma Lempel-Ziv-Welch (LZW) menggunakan teknik adaptif dan berbasiskan “kamus” Pendahulu LZW adalah LZ77 dan LZ78 yang dikembangkan oleh Jacob Ziv dan Abraham Lempel pada tahun 1977 dan 1978. Terry Welch mengembangkan teknik tersebut pada tahun 1984. LZW banyak dipergunakan pada UNIX, GIF, V.42 untuk modem ( Cormen et al, 2001).

Algoritma ini melakukan kompresi dengan menggunakan dictionary, di mana fragmen-fragmen teks digantikan dengan indeks yang diperoleh dari sebuah “kamus”. Prinsip sejenis juga digunakan dalam kode Braille, di mana kode-kode khusus digunakan untuk merepresentasikan kata-kata yang ada. Pendekatan ini bersifat

adaptif dan efektif karena banyak karakter dapat dikodekan dengan mengacu pada

string yang telah muncul sebelumnya dalam teks. Prinsip kompresi tercapai jika referensi dalam bentuk pointer dapat disimpan dalam jumlah bit yang lebih sedikit dibandingkan string aslinya (Dobb, 1989).

2.7.1 Kode LZW ( Lempel-Ziv-Welch )

(34)

1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}.

2. P = karakter pertama dalam stream karakter. 3. C = karakter berikutnya dalam stream karakter. 4. Apakah string (P + C) terdapat dalam dictionary ?

• Jika ya, maka P =P + C (gabungkan P dan C menjadi string baru). • Jika tidak, maka :

i. Output sebuah kode untuk menggantikan string P.

ii. Tambahkan string (P + C) ke dalam dictionary dan berikan nomor/kode berikutnya yang belum digunakan dalam dictionary untuk string tersebut. iii. P = C.

5. Apakah masih ada karakter berikutnya dalam stream karakter ? • Jika ya, maka kembali ke langkah 2.

• Jika tidak, maka output kode yang menggantikan string P, lalu terminasi proses (stop).

Isi dictionary pada awal proses diset dengan tiga karakter dasar yang ada. Kolom posisi menyatakan posisi sekarang dari stream karakter dan kolom karakter

menyatakan karakter yang terdapat pada posisi tersebut. Kolom dictionary

menyatakan string baru yang sudah ditambahkan ke dalam dictionary dan nomor indeks untuk string tersebut ditulis dalam kurung siku. Kolom output menyatakan kode output yang dihasilkan oleh langkah kompresi (Linawati et al, 2004, hal: 10).

Algoritma penirmampatan LZW :

1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}. 2. CW = kode pertama dari stream kode (menunjuk ke salah satu karakter dasar).

3. Lihat dictionary dan output string dari kode tersebut (string.CW) ke stream karakter. 4. PW = CW; CW = kode berikutnya dari stream kode.

5. Apakah string.CW terdapat dalam dictionary ? ฀ Jika ada, maka :

(35)

iii. C = karakter pertama dari string.CW

iv. tambahkan string (P+C) ke dalam dictionary ฀ Jika tidak, maka :

i. P = string.PW

ii. C = karakter pertama dari string.PW

iii. output string (P+C) ke stream karakter dan tambahkan string tersebut ke dalam dictionary (sekarang berkorespondensi dengan CW);

6. Apakah terdapat kode lagi di stream kode ? ฀ Jika ya, maka kembali ke langkah 4. ฀ Jika tidak, maka terminasi proses (stop).

Contoh 2.2

String “ABBABABAC” akan dikompresi dengan LZW. Isi dictionary pada awal proses diset dengan tiga karakter dasar yang ada: “A”, “B”, dan “C”. Tahapan proses kompresi ditunjukkan pada Tabel di bawah ini.

Tabel 2.3 Proses Pemampatan LZW

Langkah Posisi Karakter Dictionary Output

1 1 A [4] A B [1]

2 2 B [5] B B [2]

3 3 B [6] B A [2]

4 4 A [7] A B A [4]

5 6 A [8] A B A C [7]

6 9 C --- [3]

Steam karakter: a b b ab aba c

Kode output : [1] [2] [2] [4] [7] [3]

(36)

Proses penirmampatan pada LZW dilakukan dengan prinsip yang sama seperti proses kompresi. Pada awalnya, dictionary diinisialisasi dengan semua karakter dasar yang ada. Lalu pada setiap langkah, kode dibaca satu per satu dari stream kode, dikeluarkan string dari dictionary yang berkorespondensi dengan kode tersebut, dan ditambahkan string baru ke dalam dictionary. Tahapan proses dekompresi ini ditunjukkan pada Tabel di bawah ini (Linawati et al, 2004, hal: 11).

Tabel 2.4 Proses Penirmampatan LZW

Langkah Kode Output Dictionary

1 [1] A ---

2 [2] B [4] A B

3 [2] B [5] B B

4 [4] A B [6] B A

5 [7] A B A [7] A B A

6 [3] C [8] A B A C

(37)

BAB 2

LANDASAN TEORI

2.1 Pengertian File 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. 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.

(38)

2.1.1 Tipe Teks

Tipe teks merupakan tipe dasar yang sudah sangat dikenal dalam kehidupan sehari-hari. 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 (Purnomo, Herry et al, 2005, hal: 99).

2.1.2 Format Teks

Secara umum, format data teks dibagi menjadi dua bagian, yaitu (Purnomo, Herry et al, 2005, hal: 410) :

1. Teks terformat (formatted text)

Merupakan teks yang terformat dan mengandung styles. Format data dokumen Microsoft Word (*.doc) merupakan contoh format teks jenis ini yang paling popular.

2. Teks sederhana (plain text)

Format data teks (*.txt) merupakan contoh format teks yang paling populer.

Contoh format data teks di atas beserta perangkat lunak yang biasa digunakan diantaranya adalah (Purnomo, Herry et al, 2005, hal: 410):

1. 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. Format data teks (*.txt)

(39)

sebagainya. Satu huruf, angka, karakter, kontrol atau simbol pada arsip teks memakan tempat satu byte. Berbeda dengan jenis teks terformat yang satu huruf saja dapat memakan tempat beberapa byte untuk 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.

3. Hyper Text Markup Language (*.html atau *.htm)

Merupakan format teks standard untuk tampilan dokumen web.

4. Format data dokumen (*.doc)

Doc merupakan ekstensi arsip dokumen perangkat lunak Microsoft Word yang paling banyak digunakan dalam penulisan 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.

2.2 Pohon (Tree)

Secara sederhana tree dapat didefinisikan sebagai kumpulan elemen yang salah satu elemennya disebut root, dan sisa elemen yang lain (yang disebut node) terpecah menjadi sejumlah himpunan yang saling tidak berhubungan satu sama lain (disjoint), yang disebut dengan subtree. Node yang tidak mempunyai cabang disebut terminal node atau leaf, sedangkan node yang mempunyai cabang disebut branch node. Jumlah

node pada sebuah tree merupakan bilangan terbatas (finite number) (Muthohar, Fiqri, 2004).

(40)

v1

v2 v3

v4 v5 v6 v7

Gambar 2.1 Pohon Berakar dengan v1 Sebagai Akar

Pohon secara luas digunakan dalam struktur data ilmu komputer seperti pohon biner, pohon perentang, tumpukan dan lain-lain.

2.3 Pohon Biner (Binary Tree)

Pohon biner merupakan kasus khusus pohon n-ary jika n = 2. Pohon biner adalah himpunan dengan jumlah terbatas yaitu m buah node (m ≥ 0), yang selain kosong (m = 0) hanya dapat berisi sebuah node root yang memiliki dua buah subtree yang masing-masing disebut sub binary tree kiri dan sub binary tree kanan. Jika m = 0 maka disebut empty binary tree (Muthohar, Fiqri, 2004).

Misalkan T adalah pohon biner dan vєV(T)adalah suatu titik cabang dalam T. Subpohon kiri v adalah pohon biner yang (Johnsonbaugh, Richard, 1998) :

1. Titik-titiknya adalah anak kiri v dan semua turunannya.

2. Garis-garisnya adalah garis-garis dalam E(T) yang menghubungkan titik-titik subpohon kiri v.

3. Anaknya adalah anak kiri v.

v

w x

(41)

Gambar di atas merupakan pohon biner dengan dua subpohon, yaitu subpohon kiri v dengan w sebagai akar dan subpohon kanan v dengan x sebagai akar.

2.4 Pengertian Pemampatan Data

Pemampatan (kompresi) adalah proses pengubahan sekumpulan data menjadi bentuk kode dengan tujuan untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data (Linawaty et al,2004, hal:7). Pemampatan hanya mungkin untuk dilakukan apabila data yang direpresentasikan dalam bentuk normal mengandung informasi yang tidak dibutuhkan. Ketika data tersebut sudah ditampilkan dalam format yang seminimal mungkin, maka data tersebut sudah tidak akan bisa dimampatkan lagi. File yang demikian disebut random file.

Pemampatan merupakan salah satu dari teori informasi yang diperkenalkan oleh Shannon yang bertujuan untuk menghilangkan redundansi dari sumber. Pemampatan bermanfaat dalam membantu mengurangi konsumsi sumber daya yang mahal, seperti ruang hard disk atau perpindahan data melalui internet.

Pemampatan data memiliki beberapa aplikasi, diantaranya (Munir, Rinaldi, 2004, hal: 166):

1. Pengiriman data (data transmission) pada saluran komunikasi data

Data yang telah dimampatkan membutuhkan waktu yang lebih singkat dibandingkan data yang tidak dimampatkan.

2. Penyimpanan data (data storing) di dalam media sekunder ( storage )

(42)

2.5 Metode Pemampatan

Metode pemampatan berdasarkan output ada 2 jenis, yaitu:

1. Metode Lossless

Pemampatan data yang menghasilkan file data hasil pemampatan yang dapat dikembalikan menjadi file data asli sebelum dimampatkan secara utuh tanpa perubahan apapun. Pemampatan data lossless bekerja dengan menemukan pola yang berulang di dalam pesan yang akan dimampatkan tersebut dan melakukan proses pengkodean pola tersebut secara efisien. Pemampatan ini juga dapat berarti proses untuk mengurangi redundancy. Pemampatan jenis ini ideal untuk pemampatan text. Algoritma yang termasuk dalam metode pemampatan

lossless diantaranya adalah teknik dictionary coding dan Huffman coding

(Fernando, Hary, 2004).

2. Metode Lossy

Pemampatan data yang menghasilkan file data hasil pemampatan yang tidak dapat dikembalikan menjadi file data sebelum dimampatkan secara utuh. Ketika data hasil pemampatan di-decode kembali, data hasil decoding tersebut tidak dapat dikembalikan menjadi sama dengan data asli tetapi ada bagian data yang hilang. Oleh karena itu, pemampatan jenis ini tidak baik untuk kompresi data yang kritis seperti data teks. Bentuk pemampatan ini sangat cocok untuk digunakan pada file-file gambar, suara, dan film. Contoh penggunaan pemampatan lossy adalah pada format file JPEG, MP3 dan MPEG . ( Nelson, Mark et al, 1996).

Efek pemampatan pada metode pemampatan losseless dapat diukur melalui sejumlah penyusutan suatu file asal dalam membandingkan ukuran dari jenis-jenis pemampatan, yaitu :

(43)

x 100% (2.1) 2. Kecepatan proses pemampatan (ditulis dalam satuan Kbyte/s):

Kecepatan Proses Pemampatan (2.2)

Ada beberapa kriteria yang sering menjadi pertimbangan dalam memilih suatu metode pemampatan yang tepat diantaranya kecepatan pemampatan, sumber daya yang dibutuhkan, kualitas, ukuran file, kompleksitas algoritma dan lain-lain (Munir, Rinaldi, 2004, hal: 166). Kualitas pemampatan dengan kebutuhan memori biasanya berbanding terbalik. Kualitas pemampatan yang bagus umumnya dicapai pada proses pemampatan yang menghasilkan pengurangan memori yang tidak begitu besar dan begitu juga sebaliknya.

2.6 Algoritma Huffman

Algoritma Huffman, yang dibuat oleh seorang mahasiswa MIT bernama David Huffman pada tahun 1952, merupakan salah satu metode paling lama dan paling terkenal dalam pemampatan 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. 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 (Ida, Mengyi Pu, 2006).

(44)

Huffman menggunakan metode symbolwise. Metoda 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. Dalam tugas akhir ini algoritma Huffman yang dibahas yaitu algoritma Huffman yang menggunakan metode statik ( Ida, Mengyi Pu, 2006).

Pada awalnya David Huffman hanya menencoding karakter dengan hanya menggunakan pohon biner biasa, namun setelah itu David Huffman menemukan bahwa penggunaan algoritma greedy dapat membentuk kode prefiks yang optimal. Penggunaan algoritma greedy pada algoritma Huffman adalah pada saat pemilihan dua pohon dengan frekuensi terkecil dalam membuat pohon Huffman. Algoritma greedy ini digunakan pada pembentukan pohon Huffman agar meminimumkan total

cost yang dibutuhkan. Cost yang digunakan untuk menggabungkan dua buah pohon pada akar setara dengan jumlah frekuensi dua buah pohon yang digabungkan, oleh karena itu total cost pembentukan pohon Huffman adalah jumlah total seluruh penggabungan. penggabungan dua buah pohon dilakukan setiap langkah dan algoritma Huffman selalu memilih dua buah pohon yang mempunyai frekuensi terkecil untuk meminimumkan total cost (Wardoyo, Irwan et al, 2003, hal:1).

2.6.1 Kode Prefix (Prefix Code)

(45)

2.6.2 Kode Huffman

Huffman memberikan sebuah algoritma untuk memangun sebuah kode Huffman dengan masukan string teks S={s1,s2,…,sn} dan frekuensi kemunculan karakter

F={f1,f2,…,fn}, dihasilkan keluaran berupa kode string biner C={c1,c2,…,cn} atau disebut kode Huffman (Liliana et al, 2003, hal:4).

Algoritma Pemampatan Huffman:

1. Baca file text yang akan dimampatkan (file asal).

2. Hitung frekuensi dari setiap karakter yang ada. Jenis karakter dan frekuensinya disimpan sebagai tree dalam sebuah list.

3. Selama list masih mempunyai node lebih dari satu maka

a. Urutkan list berdasarkan frekuensinya, secara ascending.

b. Buat tree baru, kaki kiri diisi dengan node pertama list dan kaki kanannya diisi dengan node kedua list. Karakter yang disimpan berupa “a“ dan frekuensinya merupakan jumlahan dari frekuensi kedua kakinya.

4. Sebelum hasil pemampatan disimpan dalam file hasil, maka simpan terlebih dahulu tree huffman nya. Pertama simpan jumlah karakter keseluruhan. Kemudian telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka simpan karakter pada leaf tersebut baru kemudian simpan deretan kode yang dihasilkan. Setiap kode disimpan dengan dibatasi “a“. Setelah tree selesai disimpan, untuk membatasi penyimpanan tree dengan hasil kompresi, disisipkan “A“.

5. Telusuri tree secara preorder, kaki kiri diberi kode “0“ dan kaki kanan diberi kode “1“. Setelah sampai pada leaf maka deretan kode yang didapat digunakan untuk mengkodekan karakter pada leaf tersebut. Setelah penelusuran selesai maka akan didapat daftar karakter dan kode binernya.

(46)

Tabel karakter-karakter yang diurutkan berdasarkan frekuensi kemunculan karakter tersebut berhubungan dengan distribusi probabilitas atau distribusi peluang. Distribusi probabilitas ini berhubungan pada kemungkinan penempatan akar atau subpohon baru yang telah terbentuk. Probabilitas untuk masing-masing karakter adalah frekuensi karakter tersebut dibagi jumlah frekuensi keseluruhan.

Untuk proses penirmampatan (decompression) merupakan kebalikan dari proses pemampatan (compression), Decompression berarti menyusun kembali data dari string biner menjadi sebuah karakter kembali. Decompression dapat dilakukan dengan dua cara, yang pertama dengan menggunakan tabel dan yang kedua dengan menggunakan algoritma penirmampatan (decompression).

Algoritma penirmampatan

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.

Contoh 2.1

(47)

Dengan menggunakan algoritma Huffman untuk mengkodekan setiap karakter dapat diperoleh kode Huffman sebagai berikut :

Masukan : 18 karakter yang telah diurutkan dan table frekuensi Keluaran : Kode Huffman

1. Pengurutan karakter berdasarkan frekuensi kemunculannya. Karakter pada data diurutkan di dalam tabel secara menaik (ascending order).

Tabel 2.1 Frekuensi Kemunculan Karakter yang Telah Diurutkan

Karakter Frekuensi

spasi 1

r 1

h 1

e 1

m 1

i 1

p 2

n 2

g 3

a 5

Jumlah 18

2. Pembentukan pohon Huffman

(48)

Pengurutan kembali akar yang baru terbentuk berhubungan dengan distribusi probabilitas. Pada contoh ini, ada lebih dari satu kemungkinan tempat yang tersedia pada penggabungan karakter “spasi” dan “r” dengan frekuensi 2. Untuk mencegah penggabungan akar baru terlalu cepat maka akar ditempatkan pada posisi terendah. Jadi, akar baru “spasi” dan “r” ditempatkan sesudah karakter “a”.

Pembentukan pohon biner dari string “piagam penghargaan” adalah :

(49)

h=1 e=1

Gambar 2.3 Pembentukan Pohon Huffman

Keterangan gambar :

(50)

3. Kode Huffman yang diperoleh dari pohon Huffman yang telah terbentuk adalah :

Tabel 2.2 Tabel Kode Huffman untuk Masing-Masing Karakter

Karakter Frekuensi (f)

Kode Huffman Panjang Kode ( shf )

Total Panjang ( f x shf )

Spasi 1 10110 5 5

r 1 10111 5 5

h 1 10100 5 5

e 1 10101 5 5

m 1 00 2 2

i 1 01 2 2

p 2 1000 4 8

n 2 1001 4 8

g 3 110 3 9

a 5 111 3 15

Total 18 34 64

Dengan demikian, jumlah bilangan bit yang dibutuhkan oleh algoritma Huffman untuk merepresentasikan string “piagam penghargaan” adalah 64 bit. String tersebut dimampatkan dengan rasio sebesar :

x 100% x 100%

= 44,4%

Dengan demikian string “piagam penghargaan” dimampatkan menjadi rangkaian bit : 1000011111101110010110100010101100111010100111101111101111111001

(51)

telah terbentuk atau menggunakan algoritma penirmampatan. Pada proses penirmampatan, rangkaian bit biner

1000011111101110010110100010101100111010100111101111101111111001 Dimulai dengan membaca bit pertama yaitu “1”, tidak terdapat bit “1” pada tabel kode Huffman. Lalu baca bit berikutnya, sehingga menjadi “10”, tidak terdapat juga bit “10”, kemudian baca lagi bit berikutnya, sehingga menjadi “100”, tidak terdapat juga bit “100”, kemudian baca lagi bit berikutnya, sehingga menjadi “1000”. Rangkaian bit “1000” ini ditemukan pada tabel kode Huffman yaitu bit yang merepresentasikan karakter “p”. Proses ini terus dilakukan hingga tidak terdapat lagi bit biner.

2.7 Algoritma LZW (Lempel Ziv Welch)

Algoritma Lempel-Ziv-Welch (LZW) menggunakan teknik adaptif dan berbasiskan “kamus” Pendahulu LZW adalah LZ77 dan LZ78 yang dikembangkan oleh Jacob Ziv dan Abraham Lempel pada tahun 1977 dan 1978. Terry Welch mengembangkan teknik tersebut pada tahun 1984. LZW banyak dipergunakan pada UNIX, GIF, V.42 untuk modem ( Cormen et al, 2001).

Algoritma ini melakukan kompresi dengan menggunakan dictionary, di mana fragmen-fragmen teks digantikan dengan indeks yang diperoleh dari sebuah “kamus”. Prinsip sejenis juga digunakan dalam kode Braille, di mana kode-kode khusus digunakan untuk merepresentasikan kata-kata yang ada. Pendekatan ini bersifat

adaptif dan efektif karena banyak karakter dapat dikodekan dengan mengacu pada

string yang telah muncul sebelumnya dalam teks. Prinsip kompresi tercapai jika referensi dalam bentuk pointer dapat disimpan dalam jumlah bit yang lebih sedikit dibandingkan string aslinya (Dobb, 1989).

2.7.1 Kode LZW ( Lempel-Ziv-Welch )

(52)

1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}.

2. P = karakter pertama dalam stream karakter. 3. C = karakter berikutnya dalam stream karakter. 4. Apakah string (P + C) terdapat dalam dictionary ?

• Jika ya, maka P =P + C (gabungkan P dan C menjadi string baru). • Jika tidak, maka :

i. Output sebuah kode untuk menggantikan string P.

ii. Tambahkan string (P + C) ke dalam dictionary dan berikan nomor/kode berikutnya yang belum digunakan dalam dictionary untuk string tersebut. iii. P = C.

5. Apakah masih ada karakter berikutnya dalam stream karakter ? • Jika ya, maka kembali ke langkah 2.

• Jika tidak, maka output kode yang menggantikan string P, lalu terminasi proses (stop).

Isi dictionary pada awal proses diset dengan tiga karakter dasar yang ada. Kolom posisi menyatakan posisi sekarang dari stream karakter dan kolom karakter

menyatakan karakter yang terdapat pada posisi tersebut. Kolom dictionary

menyatakan string baru yang sudah ditambahkan ke dalam dictionary dan nomor indeks untuk string tersebut ditulis dalam kurung siku. Kolom output menyatakan kode output yang dihasilkan oleh langkah kompresi (Linawati et al, 2004, hal: 10).

Algoritma penirmampatan LZW :

1. Dictionary diinisialisasi dengan semua karakter dasar yang ada : {‘A’..’Z’,’a’..’z’,’0’..’9’}. 2. CW = kode pertama dari stream kode (menunjuk ke salah satu karakter dasar).

3. Lihat dictionary dan output string dari kode tersebut (string.CW) ke stream karakter. 4. PW = CW; CW = kode berikutnya dari stream kode.

5. Apakah string.CW terdapat dalam dictionary ? ฀ Jika ada, maka :

(53)

iii. C = karakter pertama dari string.CW

iv. tambahkan string (P+C) ke dalam dictionary ฀ Jika tidak, maka :

i. P = string.PW

ii. C = karakter pertama dari string.PW

iii. output string (P+C) ke stream karakter dan tambahkan string tersebut ke dalam dictionary (sekarang berkorespondensi dengan CW);

6. Apakah terdapat kode lagi di stream kode ? ฀ Jika ya, maka kembali ke langkah 4. ฀ Jika tidak, maka terminasi proses (stop).

Contoh 2.2

String “ABBABABAC” akan dikompresi dengan LZW. Isi dictionary pada awal proses diset dengan tiga karakter dasar yang ada: “A”, “B”, dan “C”. Tahapan proses kompresi ditunjukkan pada Tabel di bawah ini.

Tabel 2.3 Proses Pemampatan LZW

Langkah Posisi Karakter Dictionary Output

1 1 A [4] A B [1]

2 2 B [5] B B [2]

3 3 B [6] B A [2]

4 4 A [7] A B A [4]

5 6 A [8] A B A C [7]

6 9 C --- [3]

Steam karakter: a b b ab aba c

Kode output : [1] [2] [2] [4] [7] [3]

(54)

Proses penirmampatan pada LZW dilakukan dengan prinsip yang sama seperti proses kompresi. Pada awalnya, dictionary diinisialisasi dengan semua karakter dasar yang ada. Lalu pada setiap langkah, kode dibaca satu per satu dari stream kode, dikeluarkan string dari dictionary yang berkorespondensi dengan kode tersebut, dan ditambahkan string baru ke dalam dictionary. Tahapan proses dekompresi ini ditunjukkan pada Tabel di bawah ini (Linawati et al, 2004, hal: 11).

Tabel 2.4 Proses Penirmampatan LZW

Langkah Kode Output Dictionary

1 [1] A ---

2 [2] B [4] A B

3 [2] B [5] B B

4 [4] A B [6] B A

5 [7] A B A [7] A B A

6 [3] C [8] A B A C

(55)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1Lingkungan Implementasi

Implementasi perangkat lunak sistem pemampatan ini dilakukan dalam lingkungan berbasis Windows. Sistem operasi yang digunakan adalah Microsoft Windows XP.

4.2 Perangkat Keras yang Digunakan

Implementasi perangkat lunak dilakukan dengan menggunakan komputer yang memiliki spesifikasi perangkat keras sebagai berikut :

1. Prosesor Intel Core 2 Duo 1.73 GHz 2. RAM 1 GB

3. Harddisk 80 GB

4. Monitor LCD 14” dengan resolusi layar 1024 x 768 pixel

4.3 Perangkat Lunak yang Digunakan

(56)

4.4 Implementasi Antar Muka

Untuk memudahkan penggunaannya, perangkat lunak sistem ini dilengkapi dengan antarmuka grafis, yang memiliki elemen-elemen sebagai berikut :

1. Tampilan Halaman Utama

Tampilan utama menampilkan menu run untuk memilih algoritma yang akan kita gunakan untuk melakukan pemampatan dan penirmampatan teks, serta menu exit untuk keluar dari aplikasi.

Gambar 4.1 Tampilan Halaman Utama

2. Tampilan Halaman Hasil

Halaman hasil menampilkan kotak teks untuk masukan file asli, file yang akan dimampatkan dan file yang akan dinirmampatkan. Masukan tidak dapat diketikkan langsung pada kotak teks, melainkan harus dipilih dengan menggunakan dialog yang dibuka dengan mengklik tombol “Browse” yang terletak disamping kotak teks yang ingin diisi. Masukan untuk original file

(57)

adalah nama file yang telah dinirmampatkan dan berekstensikan (*.huff.file asli) atau (*.lzw.file asli). Dan tampilan informasi yang berisikan source size

yang merupakan ukuran file asli dalam satuan byte, destination size yang merupakan ukuran file yang telah dimampatkan atau dinirmampatkan dalam satuan byte, ratio yang merupakan persentasi file yang telah dimampatkan atau dinirmampatkan dengan simbol %, time spent yang merupakan waktu yang dibutuhkan untuk melakukan pemampatan atau penirmampatan teks dalam satuan second. Dan tampilan informasi ini juga menampilkan kotak teks yang akan terisi secara otomatis apabila kita mengklik tombol “compress” atau “decompress”. Sedangkan tampilan tombol “compress” adalah tombol yang akan melakukan proses pemampatan data teks dan tampilan tombol “decompress” adalah tombol yang akan melakukan proses penirmampatan data teks.

(58)

Gambar 4.3 Pemampatan File Teks dengan Algoritma Huffman

(59)

Gambar 4.5 Pemampatan File Teks dengan Algoritma LZW

(60)

File yang telah dimampatkan dapat dikembalikan seperti file semula atau file asal dengan melakukan proses penirmampatan atau mengembalikan file hasil pemampatan menjadi file asal.

4.5 Pengujian Sistem Kompresi Teks Sederhana

Pengujian adalah elemen kritis dari jaminan kualitas perangkat lunak dan merepresentasikan kajian pokok dari spesifikasi, desain, dan pengkodean. Pentingnya pengujian perangkat lunak dan implikasinya yang mengacu pada kualitas perangkat lunak tidak dapat terlalu ditekan karena melibatkan sederetan aktivitas produksi di mana peluang terjadinya kesalahan manusia sangat besar dan arena ketidakmampuan manusia untuk melakukan dan berkomunikasi dengan sempurna maka pengembangan perangkat lunak diiringi dengan aktivitas jaminan kualitas.

Sasaran utama dalam pengujian adalah untuk mendapatkan serangkaian pengujian yang memiliki kemungkinan tertinggi di dalam pengungkapan kesalahan pada perangkat lunak. Dalam penelitian ini penulis menggunakan teknik pengujian

black box.

Teknik pengujian black-box berfokus pada domain informasi dari perangkat lunak, dengan melakukan test case dengan mempartisi domain input dari suatu program dengan cara yang memberikan cakupan pengujian yang mendalam.

(61)

Tabel 4.1 Hasil Pengujian Sistem

No Test case Input Output yang

diharapkan

Output yang

didapatkan Cek

1 Menu Run Pilih Algoritma yang akan

2 Browse Original File

dimampatkan OK

4 Browse

dinirmampatkan OK

5 Compress Button File yang akan dimampatkan

File yang akan dinirmampatkan

Setelah algoritma Huffman dan algoritma LZW diimplementasikan ke dalam bahasa pemrograman, 16 tipe file teks diuji untuk dilakukan proses pemampatan. Program diuji pada file teks (*.txt), file dokumen (*.doc dan *.rtf) dan file HTML (*.htm) dimana masing-masing tipe file dengan ukuran yang berbeda-beda. Dari pengujian tersebut diperoleh ukuran file hasil pemampatan, rasio dan waktu yang dibutuhkan selama proses komputasi. Hasil-hasil pengujian yang diperoleh akan digunakan untuk membandingkan kinerja ke dua algoritma.

4.5.1 Analisis Ukuran File

(62)

Tabel 4.2 Rasio Pemampatan 16 File (*.txt) dengan Algoritma Huffman dan

Grafik Rasio Pemampatan File (*.txt)

0 50 100 150

5 30 70 300 800 1252 1607 1904

Ukuran File Sumber (KB)

R

(63)

Tabel 4.3 Rasio Pemampatan 16 File (*.doc) dengan Algoritma Huffman dan

Grafik Rasio Pemampatan File (*.doc)

0

Ukuran File Sumber (KB)

R

(64)

Tabel 4.4 Rasio Pemampatan 16 File (*.htm) dengan Algoritma Huffman dan

Grafik Rasio Pemampatan File (*.htm)

0

Ukuran File Sumber (KB)

R

(65)

Tabel 4.5 Rasio Pemampatan 16 File (*.rtf) dengan Algoritma Huffman dan

Grafik Rasio Pemampatan File (*.rtf)

0

Ukuran File Sumber (KB)

R

(66)

75.12

(*.txt) (*.doc) (*.htm) (*.rtf) rata-rata

Kategori File

Grafik Rasio Pemampatan

Huffman

LZW

Gambar 4.11 Grafik Perbandingan Rasio Pemampatan

Berdasarkan hasil pengujian yang telah dilakukan pada aplikasi pemampatan file teks diperoleh bahwa:

1. Secara rata-rata algoritma Huffman menghasilkan rasio pemampatan yang lebih baik (71,58%) dari pada LZW (90.51%).

2. Dalam penelitian ini ternyata file berekstensi .rtf mampu dimampatkan oleh kedua algoritma Huffman dan Lempel Ziv Welch (LZW). Namun algoritma

Huffman mempunyai unjuk kerja yang baik.

3. Algoritma lempel Ziv Welch ( LZW ) dalam penelitian ini ternyata tidak cocok untuk memampatkan data-data web (.htm) karena dalam berbagai ukuran file

sampel jenis menghasilkan rasio pemampatan bernilai negatif, ini berarti tidak terjadi pemampatan melainkan pemekaran data. Untuk algoritma Huffman

(67)

4.5.2 Analisis Kecepatan Proses

Pengujian terhadap file teks juga dilakukan untuk mengetahui kecepatan pemampatan file teks. Pengujian ini bertujuan untuk mengetahui seberapa besar pengaruh faktor kecepatan proses pada pemampatan suatu file. Untuk melakukan pengujian, dipilih sejumlah file seperti file-file yang terdapat pada Tabel 4.1 kemudian dilakukan analisis yang ditampilkan dalam bentuk tabel dan grafik.

Tabel 4.6 Kecepatan Proses Pemampatan 16 File (*.txt) dengan Algoritma Huffman dan LZW

PRAKTEK.txt 300 0,015000 7,594000 20.000 39,50

Watch.txt 500 0,016000 1,734000 31.250 288,35

Lesson.txt 800 0,016000 4,172000 50.000 191,75

EBook.txt 1.004 0,032000 2,828000 31,38 0,36

Electric.txt 1.252 0,031000 5,562000 40,39 0,23

Switch.txt 1.408 0,031000 5,391000 45,42 0,26

Book.txt 1.607 0,031000 5,906000 51,84 0,27

global.txt 1.804 0,031000 5,609000 58,19 0,32

Surya.txt 1.904 0,047000 5,828000 40,51 0,33

naskah.txt 2.262 0,047000 11,937000 48,13 0,19

(68)

Grafik Kecepatan Pemampatan

0 10000 20000 30000 40000 50000

5 30 70 300 800 1.25 1.61 1.9

Ukuran File Sumber (KB)

Kecep

a

ta

n

(

KB

/s

)

Algoritma Huffman Algoritma LZW

(69)

Tabel 4.7 Kecepatan Proses Pemampatan 16 File (*.doc) dengan Algoritma Huffman dan LZW

Proposal.doc 207 0,016000 1,688000 12.937,5 122,63 kompresiFile.doc 430 0,016000 2,047000 26.875 210,06

(70)

Grafik Kecepatan Pemampatan

Ukuran File Sumber (KB)

Kecep

(71)

Tabel 4.8 Kecepatan Proses Pemampatan 16 File (*.htm) dengan Algoritma Huffman dan LZW

Notebook.htm 1.004 0,016000 2,891000 62,75 0,35

Sound.htm 1.308 0,032000 5,203000 40,88 0,25

Network.htm 1.504 0,047000 5,688000 32 0,26

View.htm 1.804 0,047000 5,688000 38,38 0,32

Table.htm 2.262 0,063000 12,078000 35,90 0,19

Script.htm 2.604 0,062000 13,063000 42 0,20

(72)

Grafik Kecepatan Pemampatan

Ukuran File Sumber (KB)

Kecep

(73)

Tabel 4.9 Kecepatan Proses Pemampatan 16 File (*.rtf) dengan Algoritma Huffman dan LZW

PROPOSAL.rtf 703 0,015000 1,062000 46.866,7 661,95

Qwerty.rtf 959 0,032000 6,000000 29.968,8 159,83

New.rtf 1.319 0,031000 1,188000 42,55 1,11

Paper.rtf 1.536 0,031000 1,516000 49,55 1,01

Ticket.rtf 1.607 0,031000 6,078000 51,84 0,26

Religi.rtf 1.804 0,047000 5,750000 38,38 0,31

Lesson 1c.rtf 2.256 0,062000 1,875000 36,39 1,20

(74)

Grafik Kecepatan Pemampatan

Ukuran File Sumber (KB)

Kecep

(75)

6347.86

(*.txt) (*.doc) (*.htm) (*.rtf) rata-rata

Kategori File

Grafik Perbandingan Kecepatan Pemampatan

Huffman

LZW

Gambar 4.16 Grafik Perbandingan Kecepatan Pemampatan

Dari hasil pengujian yang telah dilakukan pada aplikasi pemampatan file teks diperoleh bahwa:

1. Secara rata-rata algoritma Huffman membutuhkan waktu pemampatan yang tersingkat, kecepatan pemampatannya adalah 7.289, 93 KB/s dari pada algoritma LZW yang kecepatan pemampatannya 139,58 KB/s. LZW mengorbankan kecepatan pemampatan untuk mendapatkan rasio hasil pemampatan yang baik. File yang berukuran besar membutuhkan waktu yang sangat lama bila dimampatkan dengan LZW (contoh: file SMS KOMPRES.htm dengan ukuran 134 KB membutuhkan waktu kompresi 3,7 detik).

(76)

BAB 5

PENUTUP

5.1 Kesimpulan

Dari penelitian ini dapat disimpulkan beberapa hal mengenai perbandingan kinerja kedua metode pemampatan yang telah diimplementasikan, yaitu :

Berdasarkan analisis ukuran file didapat bahwa :

1. Secara rata-rata algoritma Huffman menghasilkan rasio pemampatan yang lebih baik dari pada LZW.

2. Dalam penelitian ini ternyata file berekstensi .rtf mampu dimampatkan oleh kedua algoritma Huffman dan Lempel Ziv Welch (LZW). Namun algoritma

Huffman mempunyai unjuk kerja yang baik.

3. Algoritma lempel Ziv Welch ( LZW ) dalam penelitian ini ternyata tidak cocok untuk memampatkan data-data web (.htm) karena dalam berbagai ukuran file

sampel jenis menghasilkan rasio pemampatan bernilai negatif, ini berarti tidak terjadi pemampatan melainkan pemekaran data. Untuk algoritma Huffman

walaupun terjadi pemampatan namun nilai rasionya kecil (dibawah 100% atau sama).

Berdasarkan analisis kecepatan proses didapat bahwa :

1. Secara rata-rata algoritma Huffman membutuhkan waktu pemampatan yang tersingkat dari pada algoritma LZW.

(77)

Secara umum dapat disimpulkan bahwa berdasarkan analisis terhadap ukuran file diperoleh bahwa algoritma yang paling baik untuk pemampatan setiap file teks tergantung dari karakteristik file yang akan dimampatkan. Sedangkan analisis terhadap kecepatan pemampatan file teks diperoleh bahwa jika ukuran file semakin besar maka semakin lama waktu yang dibutuhkan untuk memampatkan file teks.

5.2 Saran

(78)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Algoritma

Pemampatan data menggambarkan suatu sumber data digital seperti file gambar, teks, suara dengan jumlah bit yang sedikit yang bertujuan untuk mengurangi ukuran file sebelum menyimpan atau memindahkan data tersebut ke dalam media penyimpanan. Algoritma pemampatan yang digunakan pada penelitian ini yaitu Algoritma Huffman dan Algoritma LZW (Lempel Ziv Welch).

Kedua algoritma ini diawali dengan memberikan masukan berupa string, dan bagaimana menghasilkan keluaran algoritma berupa string yang mempunyai jumlah bit yang sedikit dibandingkan dengan string yang tidak dimampatkan. Dengan demikian, masalahnya adalah bagaimana menghasilkan string yang lebih pendek sehingga dapat menghemat kebutuhan tempat penyimpanan dan waktu transmisi data.

Gambar

Gambar 2.3 Pembentukan Pohon Huffman
Gambar 2.1 Pohon Berakar dengan v1 Sebagai Akar
Tabel 2.1 Frekuensi Kemunculan Karakter yang Telah Diurutkan
Gambar 2.3 Pembentukan Pohon Huffman
+7

Referensi

Dokumen terkait

Cara pemecahan masalah adalah beberapa panjang bit dicoba menggunakan program kompresi yang menggunakan LZW, sehingga didapatkan kesimpulan bagaimana pengaruh panjang bit kode yang

Pada penelitian ini, Algoritma Fibonacci Search (FS) diterapka untuk meningkatkan kinerja algoritma LZW dalam hal pencarian kamus kata ( Dictionary ) sehingga dengan

Pada penelitian ini penulis menggunakan algoritma Huffman dan Run Length Encoding yang merupakan salah satu teknik kompresi yang bersifat lossless.. Algoritma Huffman

Laporan Proyek Akhir ini penulis susun berdasarkan pengerjaan Proyek Akhir yang telah dilakukan sesuai dengan judul yang dicantumkan yakni mengenai Kompersi Data

Berdasarkan penelitian terdahulu yang dilakukan oleh Akhmad Pahdi pada tahun 2018 tentang “Algoritma Huffman dalam Pemampatan dan Enkripsi Data” menyatakan bahwa

Tampak pada tabel tersebut bahwa satu file video tidak terkompresi pada metode LZW karena memiliki nilai faktor lebih dari 1, sedangkan pada metode LZWM semua file video

adalah dengan membandingkan algoritma huffman, algoritma LZW, algoritma RLE dan algoritma shannon-fano menggunakan format citra bmp sebanyak tiga citra dengan full colors

Setelah ketiga algoritma diimplementasikan dalam bentuk aplikasi dengan bahasa pemograman PHP, selanjutnya dilakukan pengujian, apakah aplikasi yang dirancang dapat melakukan