Anda di halaman 1dari 7

Pembuatan Perangkat Lunak Untuk Kompresi File Text Dengan Menggunakan Huffman Tree

Liliana1) , Victor Julian Lipesik2) 1) Dosen tetap Fakultas Teknologi Industri, jurusan Teknik Informatika, Universitas Kristen Petra 2) Mahasiswa Fakultas Teknologi Industri, jurusan Teknik Informatika, Universitas Kristen Petra Jl. Siwalankerto 121-131 Surabaya , (031) 2983455 e-mail : lilian@peter.petra.ac.id , m26403003@john.petra.ac.id Abstrak Ada dua hal yang menjadi perhatian utama dalam bidang teknologi informasi, yaitu kecepatan akses dan kapasitas memori. Kapasitas memori sangat erat hubungannya dengan ukuran file. Ukuran file yang semakin besar akan membuat kecepatan akses menurun. Padahal dengan berkembangnya teknologi informasi dengan begitu pesat menyebabkan ukuran suatu program semakin besar, ukuran file data yang dihasilkan juga semakin besar. Kedua hal tersebut menyebabkan usaha yang dibutuhkan CPU untuk menjalankan program tersebut juga semakin besar. Akibatnya kecepatan proses menjadi berkurang. Perkembangan teknologi informasi yang tidak pernah berhenti, menyebabkan setiap orang yang berkecimpung di dalam dunia teknologi informasi ini harus menyediakan layanan akses yang cepat dan storage data yang cukup besar untuk menampung informasi yang hendak disimpan oleh user. Masalah tersebut dapat diatasi dengan dua cara. Cara yang pertama yaitu dengan menambah kapasitas storage. Namun cara ini bukanlah cara yang tepat karena storage yang besar identik dengan biaya yang mahal karena sampai saat ini belum ada penelitian yang mampu menghasilkan storage yang semakin besar namun harganya semakin murah. Oleh karena itu banyak penelitian yang dilakukan untuk membuat file yang disimpan berukuran sekecil mungkin sebagai alternatif kedua. Selain masalah harga, file dalam ukuran kecil semakin dibutuhkan karena alasan kepraktisan. Mudah dibawa ke mana saja, misalnya disimpan dalam disket, flash disk, ataupun pocket PC. Untuk media berukuran kecil tentunya kapasitas penyimpanannya juga kecil. Dengan demikian maka metode kompresi file menjadi salah satu topik penelitian yang terus-menerus dikembangkan. Salah satu metode untuk kompresi file adalah dengan menggunakan huffman tree. Pertama-tama, file asal akan dikodekan. Kode-kode ini dibuat dalam ukuran bit sehingga satu karakter bisa berukuran lebih kecil dari satu byte (8 bit). Dengan demikian maka file yang bertipe text, dengan penyimpanan satu karakter sebesar satu byte akan disimpan ulang dengan ukuran yang pasti lebih kecil. Dari uji coba yang dilakukan, perangkat lunak yang dikembangkan ini mampu mengkompresi file text dengan ukuran yang lebih kecil jika dibandingkan dengan WinZip. Kata kunci : kompresi file, tree, huffman, file text

1.

Pendahuluan
Kemajuan teknologi memicu kebutuhan informasi yang semakin besar. Sayangnya

kebutuhan informasi yang besar ini berdampak pada kebutuhan storage (media penyimpanan) yang semakin besar pula. Storage yang besar tentu saja membutuhkan cost (harga) yang besar dan kecepatan akses data yang semakin lambat. Untuk mengatasi masalah storage dan kecepatan akses, salah satunya dengan mengkompresi informasi yang disimpan. Informasi yang dimaksud adalah informasi yang berupa file text (file berisi tulisan biasa). Kompresi file adalah sebuah cara yang bertujuan untuk menulis ulang suatu file supaya menjadi lebih ringkas namun informasi yang terdapat di dalam file aslinya tidak mengalami kerusakan atau pengurangan. Salah satu algoritma yang dapat digunakan untuk mengkompresi suatu file adalah algoritma Huffman Tree (pohon huffman). Ide dasar dari algoritma huffman tree ini adalah dengan membangkitkan kode yang akan digunakan untuk mengkodekan file text. Tentu saja kode yang dihasilkan ukurannya akan lebih kecil dari ukuran satu karakter (1 byte). Dengan menggunakan algoritma huffman tree, akan dibentuk Prefix code (kode awalan) untuk setiap karakter dalam sebuah file. Dengan menggunakan huffman tree maka bisa dihasilkan prefix code yang unik untuk setiap karakter yang digunakan dalam sebuah file. Untuk menguraikan file yang sudah dikodekan, digunakan Huffman tree yang dibuat berdasarkan file tersebut. Sehingga huffman tree untuk sebuah file akan selalu disimpan dalam file hasil kompresi, untuk membaca kembali file yang sudah dikodekan tersebut. Dalam pemrogramannya, panjang blok dari output sumber dipetakan dalam blok biner berdasarkan panjang variable. Cara seperti ini disebut sebagai fixed to variable-length coding. Ide dasar dari cara Huffman ini adalah memetakan mulai dari simbol yang paling banyak muncul / digunakan pada sebuah sumber sampai dengan yang jarang muncul menjadi sebuah urutan biner. Dalam variable-length coding, sinkronisasi merupakan suatu masalah. Ini berarti harus terdapat satu cara untuk memecahkan urutan biner yang diterima kedalam suatu codeword. Seperti yang disebutkan diatas, bahwa ide dari Huffman Coding adalah memilih panjang codeword dari yang paling besar probabilitasnya sampai dengan urutan codeword yang paling kecil probabilitasnya. Apabila kita dapat memetakan setiap keluaran sumber dari probabiltas pi ke sebuah codeword dengan panjang 1/pi dan pada saat yang bersamaan dapat memastikan bahwa dapat didekodekan secara unik, kita dapat mecari rata-rata panjang kode H(x). Huffman Code dapat meng-dekodekan secara unik dengan H(x) minimum, dan optimum pada keunikan dari kode-kode tersebut.

2.

Huffman Tree

Kode Huffman digunakan secara luas dan sangat efektif untuk kompresi data. Bisa menghemat 20%-90% dari ukuran semula, tergantung tipe karakter yang dikompresi. Algoritma huffman menggunakan tabel yang menyimpan frekuensi kemunculan dari masingmasing simbol yang digunakan dalam file tersebut dan kemudian mengkodekannya dalam bentuk biner[1]. Pertama-tama buat tabel frekuensi dari semua simbol atau karakter yang muncul dalam suatu file text. Kemudian diurutkan mulai dari simbol dengan frekuensi paling sedikit sampai simbol dengan frekuensi paling banyak. Pembentukan huffman tree dimulai dari dua simbol paling depan untuk dijadikan anak kiri dan anak kanan dari tree yang terbentuk dan frekuensinya dijumlahkan. Setelah itu diurutkan kembali berdasarkan frekuensi yang baru. Demikian dilakukan terus menerus sampai semua simbol terbentuk menjadi tree[3]. Dengan algoritma di atas maka terbentuklah suatu tree yang menyimpan simbol simbol sedemikian rupa sehingga simbol dengan frekuensi kemunculan paling banyak akan ditempatkan di kedalaman yang paling dangkal, sedangkan simbol-simbol dengan frekuensi kemunculan paling sedikit akan ditempatkan di kedalaman yang paling dalam. Setelah proses pembuatan tree selesai maka tree siap digunakan untuk membentuk kode. Dari cara kerja metode ini, maka dibutuhkan tree untuk membaca kembali (encode). Oleh karena itu maka tree hasil proses huffman harus disimpan dalam file kompresi. Jika file yang dikompresi ukurannya kecil, maka tidak banyak bit yang dihemat. Semakin besar ukuran file maka semakin banyak bit yang berhasil dihemat. Tetapi karena harus menyimpan huffman tree yang dihasilkan maka jika ukuran file yang dikompresi kecil maka file hasil kompresi bisa jadi bukannya semakin kecil tetapi malah semakin besar. Selain itu jika variasi huruf dalam file yang akan dikompresi sangat banyak, maka ada kemungkinan tree yang terbentuk sangat dalam dan code yang dihasilkan ukurannya sama dengan ukuran satu karakter. Jika hal ini terjadi maka file hasil kompresi bukannya lebih kecil malah menjadi lebih besar. Kedua dugaan ini akan dibuktikan dengan aplikasi yang dibuat.

3.

Kompresi dan Dekompresi

Ide awal pembentukan huffman tree adalah untuk membuat prefik code, yaitu kode berupa string biner dimana kode yang satu bukan merupakan awalan dari kode yang lain. Secara garis besar proses kompresi dimulai dengan membuat pohon huffman, setelah itu mengubah setiap karakter menjadi kode biner dan terakhir menyimpan kembali menjadi karakter yang lain karena ada pengerutan jumlah bit. Untuk dekompresinya maka pertamatama harus membentuk kembali tree yang disimpan diawal file hasil kompresi. Setelah tree terbentuk kembali maka semua karakter diubah dalam bentuk biner kemudian diterjemahkan satu persatu dengan menggunakan tree, sampai menemukan karakter di setiap leaf(daun).

Yang perlu diperhatikan adalah penyimpanan tree huffman. Jika terjadi kesalahan, maka file kompresi tidak akan terbaca. Berikut akan dibahas lebih mendetail algoritma untuk kompresi file dan dekompresinya. Algoritma kompresi file: 1. Baca file text yang akan dikompresi (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 dan frekuensinya merupakan jumlahan dari frekuensi kedua kakinya. 4. Sebelum hasil kompresi 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 . Setelah tree selesai disimpan, untuk membatasi penyimpanan tree dengan hasil kompresi, disisipkan . 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. 6. Baca setiap karakter pada file asal. Ubah menjadi kode biner. Setelah semua dikodekan, setiap 8 kode dicari desimalnya (ASCI) kemudian simpan kembali sebagai karakter baru. Algoritma dekompresi file: 1. pertama baca dahulu tree dan bentuk kembali tree nya. Antara ada karakter dan deretan biner. Karakter nantinya akan disimpan di leaf. Deretan biner digunakan untuk menelusuri tree, dengan aturan kode0 ke kiri dan kode1 ke kanan. Jika node yang ditelusuri belum ada, maka buat node baru. Karakter disimpan di node terakhir yang dibentuk dari setiap penelusuran kode biner. 2. setelah tree terbentuk, baca setiap karakter kemudian ubah ASCI dari karakter tersebut menjadi biner. Setelah itu telusuri tree dengan aturan, jika kode biner 0 maka telusuri kaki kiri. Jika kode biner 1 maka telusuri kaki kanan. Telusuri

terus sampai leaf. Karakter pada leaf tersebut adalah hasil dekompresinya. Setelah ketemu leaf maka penelusuran dilakukan dari root lagi.

4.

Uji Coba
Uji coba dirancang untuk mengetahui apakah dugaan bahwa jika file yang dikompres

berukuran kecil maka hasil kompresinya malahan lebih besar daripada file asalnya dan juga dugaan bahwa file dengan variasi karakter yang banyak akan membuat file hasil kompresi juga tidak optimal. Untuk pengujian pertama, pada gambar 1. dapat dilihat isi file yang akan disimpan. Kemudian file hasil kompresinya dapat dilihat pada gambar 2. Sedangkan pengujian kedua, file yang akan dikompresi dapat dilihat pada gambar 3. sedangkan file hasilnya dapat dilihat pada gambar 4.

Gambar 1. File uji1.doc, file asal yang berisi sedikit karakter

Gambar 2. File hasil kompresi dari file uji.doc, diberi nama uji1.tex File uji1.txt dan uji1.tex sama-sama berukuran 1 KB. Dalam hal ini tidak ada pengurangan ukuran file seperti yang diharapkan. Malahan banyaknya karakter yang disimpan semakin banyak.

Gambar 3. File uji2.doc, file asal yang berisi variasi karakter yang sangat banyak

Gambar 4. File hasil kompresi dari file uji2.doc

5.
berikut:

Kesimpulan
Dari hasil uji coba yang sudah dilakukan, maka dapat diambil kesimpulan sebagai

kompresi file dengan metode ini tidak berhasil jika karakter yang digunakan
sebanyak 28 (256) jenis dan masing-masing jenis mempunyai frekuensi kemunculan yang hampir sama banyak.

Kompresi file juga kurang berhasil jika isi file terlalu sedikit sehingga ukuran file asli bisa jadi lebih kecil dari file hasil kompresi karena file kompresi masih harus menyimpan huffman tree nya.

Kompresi file hanya bisa diterapkan untuk file yang menggunakan ASCI.

Daftar Pustaka [1] Cormen;Leiserson;Rivest , Introduction to Algorithms, 1990, The MIT Press, Massachusetts [2] Goodaire, Edgar G ; Parmenter, Michael M. Discrete Mathematics with Graph Theory. 1998. Prentice Hall, Inc. New Jersey. [3] Liu, C.L. Element of Discrete Mathematics 2nd.1985. McGraw-Hill,Inc [4] Huffman Codes, didownload dari http://www.maths.abdn.ac.uk/~igc/tch/mx4002/notes/

Anda mungkin juga menyukai