Analisa Kebutuhan Proses Perbandingan kompresi teks menggunakan algoritma huffman statis, huffman dinamis dan modifikasi algoritma huffman.

User Sistem Kompresi Data 1. Data teks 2. File hasil kompresi 1. File hasil kompresi 2. Data teks Gambar 3.1 Diagram konteks Selain masukan berupa data teks, dari diagram konteks tersebut user juga bisa memasukan file hasil kompresi agar dapat di dekompresi kembali menjadi data teks sebagai keluarannya. File hasil kompresi yang akan digunakan sebagai masukan adalah file kompresi hasil dari sistem ini, karena file tipe hasil kompresi sistem ini akan berbeda dari sistem kompresi yang lain.

3.3 Analisa Kebutuhan Proses

Setelah melihat gambaran umum sistem, maka tahap selanjutnya adalah menganalisa semua proses yang dibutuhkan dalam sistem. Terdapat dua proses sistem yaitu proses encoding dan decoding. Gambaran proses tersebut akan di tampilkan dalam block diagram berikut : Gambar 3.2 block diagram encoding Gambar 3.3 block diagram decoding Dari gambar detail proses encoding dan decoding tersebut maka diperoleh beberapa proses di dalamnya antara lain : baca teks, pembentukan pohon Huffman, analisis biner, simpan file, baca file dan pengubahan kode.

3.3.1 Baca Teks

Proses baca teks merupakan sebuah proses awal dimana user memilih data yang akan di kompresi. Data yang dipilih hanya tipe data yang sesuai dengan batasan masalah seperti telah disebutkan pada bab 1. Proses pemilihan menggunakan kelas JFileChooser yang merupakan kelas bawaan pada Java untuk membuka kotak dialog browse file. File yang telah dipilih, akan di read setiap byte secara detail. Proses baca akan membaca secara keseluruhan seperti karakter spasi, tanda baca hingga enter. Hasil dari proses ini adalah berupa Arraylist bertipe String yang akan diolah diproses selanjutya.

3.3.2 Pembentukan Pohon Huffman

Setelah proses baca teks dilakukan, maka proses selanjutnya adalah pembentukan pohon Huffman. Proses ini saya sebut sebagai inti dari proses encoding karena dari data teks tersebut disusun sebuah pohon biner Huffman untuk membuat sebuah kode baru yang lebih singkat untuk masing-masing karakter. Proses ini akan berbeda di setiap algoritma, karena pembentukan pohon biner yang memiliki ciri khas di masing-masing algoritma.Arraylist hasil proses baca teks akan di loop dan diambil setiap karakternya lalu dibentuk pohon binernya. Setelah terbentuk pohon biner, maka akan di identifikasi setiap karakter beserta kode yang baru. Hasil proses identifikasi dimasukan ke dalam Arraylist objek sebuah kelas yang berisi atribut karakter dan kode karakter. Hasil tersebut juga merupakan keluaran dari proses ini.

3.3.3 Analisis Biner

Proses analisis biner adalah suatu proses yang meliputi proses identifikasi kode baru tiap karakter serta proses pembentukan rangkaian kode biner baru. Proses ini dapat juga disebut sebagai proses pembentukan sebuah file baru hasil kompresi data yang dimasukan. Hasil dari proses pembentukan pohon Huffman yang berupa Arraylistobjek berisi karakter dan kode, akan di cocokan satu per satu dengan tiap karakter hasil dari proses baca teks yang berupa Arraylist String. Hasil dari proses ini adalah sebuah String yang berisi deretan kode 1 dan 0. Kode inilah merupakan kode karakter yang baru dari setiap karakter pada teks. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

3.3.4 Simpan File

Proses simpan file adalah sebuah proses untuk menyimpanan file hasil kompresi tersebut atau dengan kata lain file yang telah di buat dalam proses analisis biner akan di-stream di media penyimpanan. Dalam proses ini terdapat 3 sub proses di dalamnya, proses-proses tersebut antara lain stream byte, simpan log, dan buat file kompresi.

3.3.4.1 Simpan Log

Proses simpan log ini merupakan sebuah proses yang saya buat untuk menyimpan tabel kode Arraylist objek dari hasil proses pembentukan pohon Huffman. Proses ini nantinya akan membantu pada saat decoding dengan mengambil tabel kode yang tersimpan dalam file log. File ini berada di dalam project tepatnya di folder logs. Untuk menyimpan tabel kode di dalam file log, saya menggunakan stream bertipe objek dengan implements Serializable pada kelasnya. Aturan penamaan file log ini adalah tanggal ditambah waktu pada saat proses kompresi. Sebagai contoh kompresi dilakukan pada tanggal 24 Desember 2014 pukul 11:21:40, maka nama file log menjadi 24122014112140. Penamaan ini secara singkatnya adalah tanggal dalam format angka ditambah waktu dari format jam, menit dan detik yang semuanya digabung tanpa spasi. Seperti file pada umumnya, file ini juga mempunyai extension yang saya beri nama .ldt Log Data. Pemberian extension bertujuan untuk mempermudah program dalam mengidentifikasi file yang akan diproses. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

3.3.4.2 Stream Byte

Pada awalnya, untuk proses stream hasil kompresi akan menggunakan stream bit yaitu stream dengan menggunakan ukuran terkecil dalam data. Ukuran terkecil yang dimaksud adalah jika program mencetak angka 1, maka yang ditulis adalah biner angka 1 bukan angka 1 yang mempunyai kode biner 00000001 seperti halnya String atau Integer. Melihat sangat sulit dilakukan dengan pemrograman berbasis Java, maka stream untuk hasil kompresi menggunakan stream byte. Stream byte adalah program mencetak hasil ke dalam sebuah file dengan menulis tiap karakter. Deretan kode hasil proses analisis biner yang berisi 1 dan 0, akan dipotong menjadi beberapa Stringdengan panjang masing-masing 7 karakter. Pemotongan menjadi 7 karakter ini didasarkan pada jumlah bit yang terdapat di sebuah karakter maksimal adalah 8 yaitu 10000000. Jika pemotongan berjumlah 8 karakter, akan menjadi masalah jika terdapat angka 1 selain di depan dan otomatis tidak akan ada karakter yang sesuai. Sebagai standar, saya menggunakan ASCII dengan maksimal jumlah bit adalah 8 . Proses stream byte ini sama dengan proses stream bit, hanya saja terdapat perbedaan jika dalam stream bit program akan mencetak tiap bit, sedangkan pada stream byte program akan mencetak tiap 7 bit menjadi sebuah karakter.

3.3.4.3 Buat File Kompresi

Untuk file baru hasil kompresi ini, saya akan memberi sebuah extension dengan format .NFCNew File Compression. Tujuan dari pemberian format file ini dengan nama yang baru adalah untuk membedakan file hasil kompresi dengan file hasil kompresi yang lainnya seperti RAR, ZIP, TAR atau sebagainya. Karena proses kompresi ini berbeda dari aplikasi kompresi lainnya, sehingga akan terjadi error jika file ini dibuka dengan aplikasi kompresi pada umumnya. Seperti halnya file hasil kompresi umumnya, pada file ini juga terdapat sebuah informasi yang terdapat di dalamnya. Informasi dalam file ini meliputi nama file log untuk data tersebut. Secara singkat, file hasil kompresi akan berpasangan dengan file log-nya masing-masing. Selain itu juga terdapat informasi tentang metode atau algoritma yang dipakai. Saya memberikan ketentuan sebagai berikut : 1. Algori tma Huffman Statis, diberi kode ‘S’. 2. Algoritma Huffman Dinamis, diberi kode ‘D’. 3. Algoritma Huffman Modifikasi, diberi kode ‘M’. Pemberian kode tersebut digunakan untuk mempermudah program dalam proses decoding sehingga otomatis akan memilih cara yang sesuai. Untuk mempermudah proses pengambilan data atau tokenizer, maka saya menggunakan kata ‘sb’ yang merupakan singkatan dari sub. Alasan saya menggunakan sebuah kata, karena jika menggunakan karakter nantinya akan terjadi ambigu ketika terdapat karakter yang sama seperti karakter pembatas. Kejadian ambigu akan kecil kemungkinannya jika menggunakan sebuah kata. Secara garis besar format penulisan dalam file hasil kompresi adalah sebagai berikut : nama file logsbkode metodesb isi karakter Untuk penamaan file hasil kompresi, saya menyamakan dengan nama file asli ditambah dengan metode yang dipakai. Sebagai contoh file bernama coba.txt di kompresi dengan metode Huffman Dinamis, menghasilkan file hasil coba_dinamis.nfc.

3.3.5 Baca File

Proses baca file adalah proses user untuk memilih file hasil kompresi untuk kemudian di dekompresi menjadi file baru seperti file aslinya. Pada proses ini hanya file berekstensi .NFC yang dapat dibuka, karena output file hasil dari sistem ini adalah file berformat .NFC. Sistem tidak bisa men-decoding jika masukan file tidak berformat seperti aturan tersebut. Pada proses ini program juga akan membaca semua isi file dan akan memasukannya ke dalam sebuah String, lalu kemudian program akan men- tokenizer menjadi 3 data. Hasil pemotongan tersebut adalah nama file log, kode metode dan yang terakhir isi file. Program akan mengambil file log sesuai dengan nama yang terdapat dalam file dan membacanya lalu kemudian memasukannya ke dalam Arraylist objek. Setelah ketiga komponen terpenuhi, yaitu : Arraylist objek berisi tabel kode, kode metode yang dipakai dan isi karakter, maka proses selanjutnya adalah pengubahan kode. PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI

3.3.6 Pengubahan Kode

Proses ini merupakan kebalikan dari proses pembentukan pohon Huffman pada saat encoding. Di dalam proses ini, ketiga komponen yang sudah diambil pada proses baca file akan diolah. Isi karakter akan di loop dan di proses per karakter lalu diubah menjadi bentuk biner. Hasil pengubahan ini adalah sebuah String yang berisi deretan kode 1 dan 0 seperti kode pada saat encoding. Setelah terbentuk deret tersebut, maka akan dicocokan dengan Arraylist yang berisi tabel kode sehingga akan terbentuk sebuah kata yang sesuai dengan kata aslinya. Hasil dari proses ini adalah sebuah String yang nantinya akan diolah pada proses selanjutnya.

3.3.7 Simpan File Proses Decoding

Proses simpan file pada saat decoding berbeda dengan proses simpan file pada saat encoding. Pada proses ini, String hasil dari pengubahan kode akan langsung di stream ke dalam sebuah file baru. Karena melihat dari batasan masalah di mana file masukan hanya untuk berekstensi .TXT, maka file hasil decoding akan langsung diberi extension .TXT. Untuk penamaan file hasil decoding, menggunakan nama dari file hasil kompresi hanya diganti extension .NFC menjadi .TXT. Sebagai contoh file coba_dinamis.nfc hasil decoding menjadi coba_dinamis.txt.

3.4 Optimalisasi Algoritma Huffman