SKRIPSI
SKRIPSI
PERSETUJUAN
Komisi Pembimbing :
Pembimbing 2 Pembimbing 1
Diketahui/disetujui oleh
Program Studi S1 Ilmu Komputer
Ketua,
PERNYATAAN
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa
kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.
PENGHARGAAN
Puji dan syukur penulis ucapkan kepada Allah SWT karena berkat rahmat-Nya
penulis dapat menyelesaikan penulisan skripsi ini dengan sebagaimana mestinya dan
dalam keadaan sehat walafiat. Tidak lupa pula shalawat beriringkan salam kita
panjatkan kepada nabi Muhammad SAW yang telah membawa umatnya ke zaman yang
penuh dengan ilmu pengetahuan seperti sekarang ini.
Pada proses pembuatan skripsi berlangsung tidak dapat dipungkiri penulis dapat
menyelesaikan penulisan skripsi ini berkat bantuan, dukungan, motivasi, serta semangat
yang tidak henti-hentinya dari banyak pihak. Oleh sebab itu, pada kesempatan ini
penulis mengucapkan terima kasih kepada berbagai pihak, antara lain:
1. Prof. Dr. Runtung Sitepu, SH, M.Hum selaku Rektor Universitas Sumatera
Utara.
2. Prof. Dr. Opim Salim Sitompul M.Sc selaku Dekan Fakultas Ilmu Komputer
dan Teknologi Informasi Universitas Sumatera Utara.
3. Bapak Dr. Poltak Sihombing, M.Kom selaku Ketua Program Studi S-1 Ilmu
Komputer Universitas Sumatera Utara sekaligus Dosen Pembimbing II yang
telah memberikan bimbingan, saran, motivasi dan dukungan kepada penulis
dalam pengerjaan skripsi ini.
4. Ibu Dian Rachmawati S.Si, M.Kom selaku Dosen Pembimbing I yang telah
memberikan bimbingan, saran, motivasi dan dukungan kepada penulis dalam
pengerjaan skripsi ini.
5. Seluruh staf pengajar dan pegawai di Fakultas Ilmu Komputer dan
Teknologi Informasi USU.
6. Ibunda Almh. Sri Yulinarti yang selalu menjadi motivasi penulis.
7. Kedua orangtua Ayahanda Pusito dan ibunda Wiwin Andriani serta saudara-
saudara terkasih Indah Sri Puspita, M. Azri Maulana, Raihana Ghafira, dan
Raihana Yasmina Faiha yang selalu memberi semangat serta do’a kepada
penulis.
Penulis
ABSTRAK
Masalah ukuran data telah menjadi permasalahan penting dalam proses pertukaran data.
Khususnya file video, merupakan file yang ukurannya rata-rata lebih besar
dibandingkan dengan jenis file lainya seperti file teks, gambar, maupun suara. Besarnya
ukuran data menimbulkan hambatan-hambatan pada penegelolaan data tersebut seperti
dibutuhkannya ruang penyimpanan yang besar serta waktu transfer yang lama. Untuk
mengatasi permasalahan tersebut adalah dengan melakukan teknik kompresi. Pengguna
dapat memasukkan file video yang akan dikompresi serta memilih algoritma kompresi.
Pada Penelitian ini, diterapkan algoritma Shannon Fano dan Levenstein Code untuk
melakukan proses kompresi pada file video dan kemudian dibandingkan kinerjanya
berdasarkan parameter yang telah ditetapkan. Setelah dilakukan implementasi dan
pengujian sistem dapat diketahui bahwa, algoritma Shannon Fano mempunyai Rate of
Compression (Rc) dan Space Saving (Ss) yang lebih baik dibandingkan algoritma
Levenstein Code pada proses kompresi file video. Namun, pada waktu kompresi dan
dekompresi algoritma Levenstein Code membutuhkan waktu yang lebih sedikit
dibandingkan algoritma Shannon Fano pada kompresi file video. Kompleksitas
algoritma yang didapat dari algoritma Shannon Fano dan Levenstein Code adalah 𝜃(n2).
Kata kunci : Shannon Fano, Kompresi, Levenstein Code, File Video, Kompleksitas
ABSTRACT
The problem of data size becomes an important problem in data exchange process.
Especially video files, are files that have an average size larger than other types or files
such as text, images, and sounds files. The size of data raises obstacles in the
management of such data, such as the need of large storage space and long transfer
times. This problem can be overcome by doing compression technics. By this system,
users can input the vifedo files which will be compressed and choose a compression
algorithm. In this study, The Sannon Fano and Levenstein algorithm is applied to
perform the compression process on the video file and then compare its performance
based on parameter that have been determinated. After the implementation and testing
of the system, it can be seen that the Shannon Fano algorithm has a better Rate of
Compression (Rc) and Space Saving (Ss) than the Levenstein algorithm in compression
video file. However, at the time of compression and decompression the Levenstein
algorithm take less time than the Shannon Fano Algorithmin compression video file.
The complexity of the algorithm which is obtained from Shannon Fano and Levenstein
algotihm is 𝜃(n2).
Keyword: Shannon Fano, Compression, Levenstein Code, Video file, Complexity
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak vi
Abstract vii
Daftar Isi viii
Daftar Tabel x
Daftar Gambar xi
Daftar Lampiran xii
Bab 1 Pendahuluan
1.1 Latar Belakang 1
1.2 Rumusan Masalah 2
1.3 Batasan Masalah 2
1.4 Tujuan Penelitian 2
1.5 Manfaat Penelitian 3
1.6 Penelitian Yang Relevan 3
1.7 Metode Penelitian 4
1.8 Sistematika Penulisan 5
Daftar Pustaka 65
Lampiran
DAFTAR TABEL
Halaman
DAFTAR GAMBAR
Halaman
DAFTAR LAMPIRAN
Halaman
BAB I
PENDAHULUAN
yaitu Compression Ratio (CR), Space Saving (SS), waktu kompresi dan dekompresi
yang dihitung dalam satuan milisekon (ms) sehingga didapatkan algoritma yang lebih
efisien digunakan dalam kompresi file video. Algoritma yang dipakai adalah Shannon
Fano dan Levenstein.
Algoritma Shannon-Fano dan Algoritma Levenstein adalah bagian dari teknik
kompresi Lossless. Teknik kompresi lossless merupakan metode kompresi yang bisa
mengembalikan semula hasil kompresi tanpa menghilangkan informasi dari data
tersebut. Algoritma Shannon fano ataupun Levenstein biasanya diterapkan pada
kompresi file text dan sangat jarang digunakan untuk mengkompresi file Video.
Berdasarkan penjelasan diatas, penulis tertarik untuk mengajukan penelitian
mengenai “Analisis Perbandingan Kinerja Algoritma Shannon Fano dan Levenstein
pada Kompresi File Video” unutk melihat seberapa efisien algoritma-algoritma tersebut
untuk diterapkan pada kompresi file video.
kompresi metode statik lebih kecil dibandingkan metode dinamik tetapi dengan
jumlah data yang berbeda perlu dipertimbangkan juga beban komputasi yang akan
terjadi, terutama setelah diterapkan pada sebuah aplikasi hardware yang bergantung
pada besarnya memori yang digunakan.
4. Umri Erdiansyah (2014) pada penelitian yang berjudul “Perbandingan Algoritma
Elias Delta Code dengan Levenstein untuk Kompresi File Teks” menjelaskan
bahwa hasil pengujian kompresi file teks dengan karakter yang sama (homogen)
rasio kompresinya lebih kecil dibandingkan dengan hasil pengujian kompresi file
teks dengan karakter yang berbeda (heterogen). Lalu, Hasil pengujian dekompresi
file teks dengan karakter yang sama dan karakter yang berbeda dengan metode
Levenstein dan Elias Delta Code menunjukkan bahwa Elias Delta memerlukan
waktu yang lebih sedikit untuk mengembalikan file teks hasil kompresi ke file teks
hasil kompresi ke file teks semula.
5. Luluk Anjar Fitriya, Tito Waluyo Purboyo, dan Anggunmeka Lubur Prasasti (2017)
pada jurnal yang berjudul “A Review of Data Compression Techniques”
Menjelaskan bahwa Menggunakan teknik kompresi dapat mengurangi jumlah
ukuran file. data yang memiliki ukuran besar menjadi ukuran lebih kecil yang dapat
menghemat penyimpanan di komputer. kompresi data dapat diimplementasikan
pada data teks, foto, dan video. berbagai teknik algoritma kompresi memiliki
kelebihan dan kekurangan dalam melakukan kompresi.
digambarkan dalam bentuk desain interface, struktur data, diagram alir (flowchart),
UML, dan diagram Ishikawa.
3. Implementasi
Pada tahap ini, membuat sebuah sistem dengan menggunakan bahasa pemrograman
C# sesuai dengan diagram alir yang telah dirancang.
4. Pengujian
Pada tahap ini, sistem yang telah dirancang dilakukan uji coba menggunakan file
video berekstensi *.avi.
5. Dokumentasi
Pada tahap ini, penelitian yang telah dilakukan, didokumentasikan mulai dari tahap
analisa sampai kepada pengujian dalam bentuk skripsi.
BAB 1. PENDAHULUAN
Bab ini akan menjelaskan mengenai latar belakang masalah yang dibahas dalam skripsi
ini, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, penelitian
sebelumnya, metode penelitian, dan sistematika penulisan skripsi.
BAB 2. LANDASAN TEORI
Bab ini merupakan tinjauan teoritis yang berkaitan dengan algoritma Shannon Fano dan
algoritma Levenstein Code, serta file Video.
BAB 3. ANALISIS DAN PERANCANGAN SISTEM
Pada bab ini berisi penjelasan tentang analisis masalah yang dibangun dalam sistem dan
menganalisis tentang hal – hal yang dibutuhkan dalam membangun sistem ini,
kemudian dilanjutkan dengan tahapan perancangan sistem yang berupa perancangan
interface sistem.
BAB 4 : IMPLEMENTASI DAN PENGUJIAN SISTEM
Pada bab ini berisi tentang implementasi sistem yang berdasarkan tahapan perancangan
dengan menggunakan bahasa pemrograman C#. Kemudian dilanjutkan dengan tahapan
pengujian sistem untuk menguji apakah sistem sudah berjalan sesuai dengan
perancangan.
BAB II
LANDASAN TEORI
Kompresi data adalah teknik untuk mengurangi ukuran data agar menyimpannya jauh
lebih kompak serta untuk mengurangi waktu transfernya. Dalam sistem komputasi
modern, karakter atau simbol biasanya dikodekan dalam ASCII. Setiap simbol yang
muncul di layar komputer memiliki kode ASCII yang berbeda. Karena panjang setiap
kode ASCII dalam biner adalah 8, ada 28 simbol unik dalam tabel ASCII
(Budiman,2017).
Kompresi data banyak digunakan oleh banyak orang karena melalui kompresi
kita bisa menghemat penyimpanan. Data kompresi juga dapat mempercepat pengiriman
data dari satu orang ke orang lain. Dalam melakukan suatu kompresi dibutuhkan suatu
metode kompresi data yang bisa digunakan, metode bisa kemudian digunakan untuk
kompres data. Data yang dapat dikompresi bukan hanya data teks tetapi bisa berupa
gambar dan video. Teknik kompresi Data terbagi menjadi 2 yaitu lossy kompresi dan
kompresi lossless(Luluk,2017). Proses kompresi data dapat dilihat pada gambar 2.1.
data yang telah direkonstruksi(Sayood,2018). Contoh dari algoritma lossless, yaitu: Run
length Encoding (RLE), Huffman Coding, Levenstein, dan Shannon Fano.
hurus yang berulang sehingga langkah algoritma sudah terpenuhi. Tabel 2.1 berikut
adalah hasil dari setiap langkah kompresi yang ditampilkan berurutan dalam bentuk
tabel.
Tabel 1 adalah daftar karakter yang ada pada teks dan probabilitasnya. Langkah
selanjutnya pada Tabel 2.2, adalah langkah pertama yaitu mengurutkan karakter
berdasarkan probabilitas tertinggi.
Selanjutnya, pada tabel 2.2 mulanya kelompok dibagi dengan sisi kiri diberi
kode nol dan sisi dengan kode satu. Pemberian kode dibagi berdasarkan jumlah
probabilitas yang paling mendekati seimbang antara kelompok kode nol dan satu.
kelompok kedua kembali dibagi dan diberikan kode nol pada bagian atas dan
selebihnya diberikan kode satu. Begitu seterusnya sehingga tidak ada lagi kemungkinan
membagi kelompok-kelompok tersebut. Dapat dilihat pada gambar 2.2.
1. Set angka pertama dari C dengan 1. Letakkan Kode-Sementara (KS) pada string
kosong.
2. Ambil nilai biner dari n tanpa angka 1 di awal dan tambahkan pada Kode-
Sementara.
3. Nyatakan M sebagai jumlah bit yang ditambahkan pada tahap 2.
Pada tabel 2.3, dapat dilihat kode Levenstein untuk beberapa nilai n. Untuk
contoh kasus, inisialisasikan C = 1 dan kita anggap n = 4. Nilai biner dari 4 adalah 100.
Ambil biner dari n tanpa angka awal dan masukkan ke KS, maka KS = ”00”. Hitung
jumlah bit KS dan masukkan ke M, maka M = 2. Karena M ≠ 0, C = 1+1 = 2, dan ambil
biner dari M masukkan ke n, maka n = “10”, masukkan KS dengan nilai biner n tanpa
angka awal, maka KS = “000”, masukkan M dengan hitung bit nilai n terakhir yang
dimasukkan ke KS, maka M = 1. Karena M ≠ 0, maka C = 2+1 = 3, dan ambil biner
dari M masukkan ke n, maka n = “1”, sehingga tidak ada yang bisa dimasukkan ke KS
dan nilainya tetap “000”. M = 0. Hitung kode Levenstein dengan memasukkan 1
sebanyak C, diikuti dengan nilai 0, dan memasukkan nilai KS terakhir. Sehingga kode
levenstein dari n = 4 adalah 1110|000.
Video merupakan elemen tambahan yang berisi rekaman dari kaset video atau
lainnya yang berada analog, kemudian ke dalam lingkungan komputer, sehingga
berubah menjadi gambar-gambar digital yang tidak jauh dengan animasi yang memakai
suara. Pada video atau animasi terdapat satuan fps yang digunakan untuk menyatakan
jumlah citra yang dipakai. Pengertian fps (frame per second) adalah jumlah bingkai citra
yang ditunjukkan dalam satu detik untuk citra bergerak, pengukuran peforma
keseluruhan dari sebuah kartu grafis dapat menggunakan frame rate sebagai acuan.
Frame rate adalah jumlah bingkai citra atau frame yang ditunjukkan setiap detik dalam
membuat citra bergerak, diwujudkan dalam satuan fps (frame per second), semakin
tinggi angka fps, semakin mulus pergerakan citra. Frame rate menggambarkan berapa
banyak citra yang diselesaikan oleh kartu grafis dan ditampilkan dalam frame setiap
detiknya (Sofyan, 2009).
Jika citra-citra tersebut dimainkan dengan sangat cepat, maka akan terlihat
sebuah pergerakan yang halus, inilah prinsip dasar film, video, dan animasi. Jumlah
citra yang terlihat setiap detik disebut dengan frame rate. Diperlukan frame rate
minimal 10 fps (frame per second) untuk menghasilkan citra dengan pergerakan halus
(Sofyan, 2009). Gambar 2.3 merupakan ilustrasi dari file video.
Beberapa format file video yang umum digunakan, diantaranya (Malaga, 2017):
dari sumber pengambilan video tanpa terkompresi. Maka dari itu biasanya file ini
menghasilkan ukuran yang besar. Karena mereka tidak terkompresi, dan sebagian
besar video editing software dapat dengan mudah mengimpor mereka. file AVI
sering digunakan saat merekam, sebelum mengkonversi ke format untuk distribusi
berbasis web.
2. Windows Media Video (.wmv)
Windows Media Video (. wmv) adalah metode kompresi video yang pertama kali
diusulkan oleh Microsoft di 2003 (WMV9) dan diterima sebagai standar terbuka di
2006 (sebagai VC-1). The. wmv standar memungkinkan untuk kompresi melalui
codec dengan array yang besar. Codec ini memungkinkan untuk keduanya,
kompresi lossless dan lossy dalam jumlah resolusi yang luas dan bitrate.
3. QuickTime (MOV)
QuickTime adalah format kompresi video yang dikembangkan oleh Apple. Untuk
melihat file. MOV di Windows PC atau komputer Mac, diperlukan QuickTime
Player. Meskipun hal ini mungkin mengharuskan untuk mengunduh perangkat
lunak, QuickTime diinstal bersama dengan iTunes (yang mungkin telah banyak
diinstal sebelumnya). Organisasi internasional untuk Standardisasi (ISO)
menggunakan QuickTime sebagai dasar untuk standar MPEG-4 (ISO/IEC 14496-
14:2003). Oleh karena itu, penggunaan. MOV telah digantikan oleh MPEG-4.
4. MPEG-4 (.mp4)
Seperti disebutkan di atas MPEG-4 (. mp4) adalah standar format video
internasional berdasarkan QuickTime file format (QTFF). Standar MPEG-4
memungkinkan untuk penggunaan berbagai skema codec dan kompresi. Namun,
MPEG-4 Bagian 10 (juga dikenal sebagai Advanced Video Coding atau AVC)
menggunakan codec kompresi H. 264 yang telah menjadi standar secara de facto.
Ini adalah standar yang digunakan untuk Blu-Ray Disc berkapasitas tinggi dan pada
situs streaming video populer, seperti YouTube dan iTunes.
atau AVI. Namun kualitas dan resolusi video digital dengan format FLV lebih
rendah daripada jenis video digital lainnya. Untuk memutar file dengan format FLV
maka dibutuhkan sebuah codec khusus.
Setiap algoritma memiliki dua buah ciri khas yang dapat digunakan sebagai
parameter pembanding, yaitu jumlah proses yang dilakukan dan jumlah memori yang
digunakan untuk melakukan proses. Jumlah proses ini dikenal sebagai kompleksitas
waktu yang disimbolkan dengan T(n), diukur dari jumlah tahapan komputasi yang
dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n, dimana
ukuran masukan (n) merupakan jumlah data yang diproses oleh sebuah algoritma.
Sedangkan jumlah memori dikenal sebagai kompleksitas ruang yang disimbolkan
dengan S(n), diukur dari memori yang digunakan oleh struktur data yang terdapat
didalam algoritma sebagai fungsi dari masukan (Ryan Rheinadi, 2009).
Berdasarkan kodisi dari kompleksitas algortima ada 3 kondisi yang dilihat dari beberapa
kasus yaitu :
a. Ω (Big-Omega)
Waktu tempuh yang bernilai minimum dari suatu fungsi f(n) untuk setiap input atau
disebut juga suatu keadaan yang terbaik dari suatu proses algoritma. Grafik Fungsi
Notasi Ω (Big-Omega) dapat dilihat pada Gambar 2.4.
b. Ο (Big-Oh)
Waktu tempuh yang bernilai maksimum dari suatu fungsi f(n) untuk setiap input
atau keadaan ini disebut juga dengan keadaan terburuk. Dari suatu proses
algoritma. Grafik Fungsi Notasi O (Big-Oh) dapat dilihat pada Gambar 2.5.
c. Θ (Big-Theta)
Merupakan suatu keadaan dari suatu waktu tempuh yang equivalen dengan nilai
eksperimentasi dari fungsi f(n) untuk setiap input. Grafik Fungsi Notasi Θ (Big-
Theta) dapat dilihat pada Gambar 2.6.
BAB III
Analisis sistem merupakan suatu proses yang berisikan tahapan-tahapan yang dilakukan
untuk mengetahui kebutuhan-kebutuhan pada sebuah sistem serta mengetahui
permasalahan-permasalahan yang terjadi dan bertujuan untuk merancang sebuah sistem
yang beru ataupun memperbaiki sistem yang telah ada.
Langkah-langkah alur kerja sistem berdasarkan General Arsitektur pada gambar 3.2:
1. Pengguna menjalankan aplikasi yang telah dirancang lalu memasukkan file video
yang akan dikompresi kedalam aplikasi.
2. Kemudian, pengguna memilih metode yang akan digunakan untuk meng-
Kompresi file video yang telah dimasukkan, yaitu metode Shannon Fano atau
Levenstein Code.
3. Setelah proses kompresi selesai, maka akan tampil hasil kompresi beserta
informasinya.
1. Kebutuhan fungsional
Kebutuhan fungsional dari aplikasi yang dirancang adalah sebagai berikut :
a. Sistem harus mampu membaca file video yang di input oleh pengguna.
b. Sistem harus mampu melakukan kompresi file video menggunakan algoritma
Shannon Fano.
c. Sistem harus mampu melakukan kompresi file video menggunakan algoritma
Levenstein Code.
d. Sistem harus mampu menampilkan size bit file video sebelum dan sesudah
proses kompresi dilakukan, Compression Ratio (CR), Space Saving (SS), serta
waktu kompresi dan dekompresi yang dihitung dalam satuan milisekon (ms).
2. Kebutuhan non-fungsional
Kebutuhan non-fungsional mencakup beberapa karakteristik sebagai berikut :
a. Efisiensi
Sistem yang dirancang harus mudah dipahami dan digunakan sehingga tidak
menyulitkan pengguna.
b. Desain
Pada gambar 3.2 menjelaskan bahwa pada saat pengguna menjalankan sistem,
yang pertama kali dilakukan adalah memilih proses yang diinginkan, kompresi atau
dekompresi. Pada Proses kompresi langkah awalnya adalah pengguna menginputkan
file video berekstensi *.avi. Lalu, memilih algoritma kompresi Shannon Fano atau
Levenstein Code. Setelah itu, sistem akan mulai mengkompresi file yang telah
diinputkan dengan algoritma kompresi yang telah dipilih. Setelah file berhasil
dikompresi, akan ditampilkan informasi terkait hasil kompresi tersebut. Lalu, pengguna
dapat menyimpan hasil kompresi ataupun mereset kembali inputan file.
Pada proses dekompresi, awalnya pengguna akan menginputkan file hasil
kompresi. Setelah itu, file hasil kompresi didekompresi oleh sistem. Setelah proses
dekompresi selesai pengguna dapat menyimpan file hasil dekompresi tersebut ataupun
mereset inputan file.
Berikut ini adalah narrative use case kompresi file video yang dapat dilihat pada
Tabel 3.1.
Langkah 5:
Sistem memulai proses
kompresi file
Langkah 6:
Sistem menampilkan
informasi mengenai file
yang telah dikompresi
Alternate Course -
Post Condition Sistem menampilkan file yang telah berhasil dikompresi dan
informasi mengenai file yang telah dikompres berupa: ukuran
file, Compression Ratio (CR), Space Saving (SS), serta waktu
kompresi
Berikut ini adalah narrative use case dekompresi file video yang dapat dilihat
pada Tabel 3.2.
Langkah 2:
Sistem akan menerima
inputan berupa file video
Langkah 3:
Memilih algoritma yang akan
digunakan untuk dekompresi file
Langkah 4:
Sistem menerima inputan
algoritma yang dipilih
pengguna
Langkah 6:
Sistem memulai proses
dekompresi
Langkah 7:
Sistem menampilkan
informasi bahwa proses
dekompresi selesai
Alternate Course -
Post Condition Sistem menampilkan file yang telah berhasil di dekompresi
Berdasarkan gambar 3.3 dapat dilihat bahwa, pada mulanya user harus
mengitputkan file video berkestensi *.avi pada program, dan sistem akan menerima
inputan tersebut. Setelah file dipilih, program akan menampilkan direktori file beserta
nama file tersebut. Setelah itu, pengguna memilih algoritma untuk mengkompresi file
yang telah dipilih dengan metode algoritma Shannon Fano atau algoritma Levenstein
Code. Lalu, pengguna dapat memuai proses kompresi dengan menekan tombol
“Kompresi File”. Setelah proses kompresi selesai, maka akan tampil informasi dari file
yang telah berhasil dikompresi yang berupa ukuran file kompresi, waktu kompresi,
Ratio of Compression, dan Space Saving. Terakhir, pengguna dapat menyimpan file
yang telah dikompresi.
Berdasarkan gambar 3.5 dapat dilihat bahwa, pada mulanya user harus
mengitputkan file video yagn telah dikompresi, dan sistem akan menerima inputan
tersebut. Setelah file dipilih, program akan menampilkan direktori file beserta nama file
tersebut. Setelah itu, pengguna memilih algoritma untuk mendekompresi file yang telah
dipilih. Lalu, pengguna dapat memulai proses dekompresi dengan menekan tombol
“Dekompresi File”. Setelah proses kompresi selesai, maka akan tampil informasi dari
file yang telah berhasil dikompresi yang berupa waktu dekompresi.
3.3. Flowchart
Flowchart merupakan penyajian yang sistematis tentang proses dan logika dari
kegiatan penanganan informasi atau penggambaran dari langkah-langkah dan urut-
urutan prosedur dari suatu program (Muslim et al, 2013).
Algoritma proses kompresi memiliki alur kerja seperti yang ditunjukkan pada
gambar 3.8. Langkah awal ialah pengguna memasukkan file video yang ingin
dikompresi kedalam sistem. Lalu, setelah sistem akan membaca nilai bit pada file video.
Setelah nilai bit dibaca, sistem akan menegurutkan bit video berdasarkan frekuensi
kemunculan. Lalu, seetelah itu, pilih algoritma untuk melakukan kompresi file. Setelah
proses kompresi selesai, tampilkan hasil kompresi.
Sedangkan Flowchart proses dekompresi untuk sistem yang dirancang pada
penelitian ini dapat dilihat pada gambar 3.9.
Algoritma proses dekompresi memiliki alur kerja seperti yang ditunjukkan pada
gambar 3.9. Langkah awal ialah pengguna memasukkan file video yang telah
terkompresi kedalam sistem. Lalu, setelah sistem akan membaca nilai bit pada file
video. Setelah nilai bit dibaca, sistem akan mengecek dan mengubah bit sesuai kode
algoritma. Lalu, setelah itu, pilih algoritma untuk melakukan dekompresi file. Setelah
proses dekompresi selesai, tampilkan hasil dekompresi.
Flowchart Algoritma Shannon Fano memiliki alur kerja seperti yang ditunjukkan
pada gambar 3.10. Langkah awal ialah pengguna memasukkan teks yang akan
dikomrpesi. Lalu, urutkan karakter sesuai dengan frekuensi kemunculan dari yang
terbanyak. Lalu, pisahkan menjadi kedua kelompok dibagi berdasarkan yang paling
mendekati seimbang frekuensinya. Berikan kode nol dan satu pada masing-masing
kelompok yang telah dibagi. Ketika tidak ada lagi kelompok yang bisa dibagi, maka
hitung kode algoritma tiap karakter berdasarkan seluruh kode yang diberikan.
Sedangkan Flowchart Algoritma Levenstein Code untuk sistem yang dirancang
pada penelitian ini dapat dilihat pada gambar 3.11.
Keterangan gambar :
1. Button : untuk ke menu kompresi file
2. Button : untuk ke menu dekompresi file
Keterangan gambar :
1. Label (judul) : untuk judul halaman
2. Group box : untuk mengelompokkan fungsi-fungsi kompresi
3. Button : untuk mengakses file pada direktori komputer
4. Text Box : untuk menampilkan informasi direktori file
5. Label : menjelaskan keterangan teks nama dan ukuran file
6. Label : menampilkan nama dan ukuran file
7. Label : menjelaskan keterangan teks pilihan algoritma
8. Button : memproses kompresi file menggunakan algoritma
Shannon fano
Keterangan gambar :
1. Label (judul) : untuk judul halaman
2. Group box : untuk mengelompokkan fungsi-fungsi dekompresi
3. Button : untuk mengakses file terkompresi pada direktori
komputer
4. Text Box : untuk menampilkan informasi direktori file
5. Label : menjelaskan keterangan teks nama dan ukuran file
6. Label : menampilkan nama dan ukuran file
7. Label : menjelaskan keterangan teks pilihan algoritma
8. Button : memproses dekompresi file dari file kompresi
menggunakan algoritma Shannon fano
9. Button : memproses dekompresi file dari file kompresi
menggunakan algoritma Levenstein Code
10. Progress bar : menampilkan progres dari proses dekompresi file yang
sedang berjalan
11. Text Box : Menampilkan informasi file terdekompresi
12. Button : untuk menyimpan file hasil dekompresi
13. Group Box : untuk mengelompokkan fungsi-fungsi informasi file
Terkompresi
14. Label : menjelaskan keterangan teks waktu dekompresi
15. Text box : menampilkan waktu dekompresi
16. Button : untuk mengembalikan halaman seperti awal
17. Button : untuk kembali ke halaman beranda
Keterangan gambar :
1. Label (judul) : untuk judul halaman
2. Tab Menu : untuk pilihan jendela sub-menu halaman bantuan
3. Picture Box : untuk menampilkan gambar dari halaman sistem
4. Label : untuk menjelaskan mengenai langkah-langkah untuk
menjalankan program
5. Button : untuk kembali ke halaman beranda
Keterangan gambar :
1. Label (judul) : untuk judul halaman
2. Label : menjelaskan keterangan teks mengenai penjelasan
program
3. Picture Box : untuk menampilkan foto dari pembuat sistem
4. Label : untuk menamplkan keterangan teks identitas pembuat
Sistem
5. Button : untuk kembali ke halaman beranda
BAB IV
4.1. Implementasi
Implementasi merupakan tahap yang dilakukan setelah tahap perancangan sistem. Pada
penelitian ini, sistem dibangun dengan mengguunakan bahasa pemrograman C# dan
dibuat dengan IDE Sharp Develop 5.1. Berdasarkan rancangan sistem yang telah
direncanakan, sistem terdiri dari lima halaman, yaitu halaman beranda, halaman
kompresi file, halaman dekompresi file, halaman bantuan, dan halaman tentang.
dilakukan pengujian terhadap file dengan ekstensi *.avi. Terdapat dua proses yang akan
diuji pada tahap ini yaitu, proses kompresi file dan proses dekompresi file.
Lalu, untuk memulai proses kompresi file, pengguna dapat menekan tombol
Shannon Fano Algorithm atau Levenstein Code Algorithm untuk memilih algoritma
kompresi yang akan digunakan untuk melakukan kompresi file. Setelah proses
kompresi file selesai, maka akan muncul messageBox yang menandakan bahwa proses
kompresi file telah selesai. Seperti dapat dilihat pada gambar 4.11.
direktori penyimpanan file akan tampil pada textBox yang tersedia. Dapat dilihat pada
gambar 4.14.
Setelah proses dekompresi selesai, maka akan tampil informasi berupa waktu
dekompresi pada textBox yang tersedia. Pengguna dapat menyimpan file hasil
dekompresi dengan menekan button “Dekompresi File”. Dapat dilihat pada gambar
4.16.
Tabel 4.1. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Ratio of Compression (Rc)
100
50
0
48,39 84,43 103,08 164,14 198,11
Ukuran File (KB)
Tabel 4.2. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein Code
Terhadap Space Saving (Ss)
Ukuran Ukuran
Space Saving
Algoritma Nama File awal Kompresi
(Ss)
(KB) (KB)
Sample1.avi 48,39 40 15,7%
Sample2.avi 84,43 79 6,42%
Shannon Sample3.avi 103,08 98 4,23%
Fano Sample4.avi 164,14 160 2,05%
Sample5.avi 198,11 195 1,1%
Sample1.avi 48,39 59 -22,8%
Sample2.avi 84,43 123 -45,71%
Levenstein
Sample3.avi 103,08 152 -48,38%
Code
Sample4.avi 164,14 262 -59,83%
Sample5.avi 198,11 319 -61,4%
0
48,39 84,43 103,08 164,14 198,11
-20
Ss (%)
-40
-60
-80
Ukuran File (KB)
Dari gambar 4.18 terlihat bahwa rata-rata Space Saving (Ss) hasil kompresi
menggunakan algoritma Shannon Fano lebih besar daripada algoritma Leventein. Ini
menunjukkan bahwa algoritma Shannon Fano lebih baik daripada algoritma Leventein
pada kompresi file video dalam hal Space Saving (Ss). Selanjutnya, Hasil pengujian
dengan menggunakan algoritma Shannon Fano dan algoritma Levenstein Code
terhadap waktu kompresi dapat dilihat pada tabel 4.3.
Tabel 4.3. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein Code
Terhadap Waktu Kompresi
Ukuran Ukuran
Waktu
Algoritma Nama File awal Kompresi
kompresi (ms)
(KB) (KB)
Sample1.avi 48,39 40 148,9
Sample2.avi 84,43 79 521,5
Shannon Sample3.avi 103,08 98 811,3
Fano Sample4.avi 164,14 160 2159
Sample5.avi 198,11 195 3328
Sample1.avi 48,39 59 0,6
Sample2.avi 84,43 123 1,19
Levenstein
Sample3.avi 103,08 152 1,32
Code
Sample4.avi 164,14 262 2,17
Sample5.avi 198,11 319 2,61
Waktu Kompresi
3500
Berdasarkan Gambar 4.19 dapat dilihat bahwa proses kompresi file video
menggunakan algoritma Levenstein Code lebih sedikit memakan waktu dibandingkan
dengan algoritma Shannon Fano. Selanjutnya, Hasil pengujian dengan menggunakan
algoritma Shannon Fano dan algoritma Levenstein Code terhadap waktu kompresi
dapat dilihat pada tabel 4.4.
Tabel 4.4. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein Code
Terhadap Waktu Dekompresi
Ukuran Ukuran
Waktu
Algoritma Nama File awal Kompresi
dekompresi
(KB) (KB)
Sample1.avi 48,39 40 12,29
Sample2.avi 84,43 79 49,83
Shannon Sample3.avi 103,08 98 70,23
Fano Sample4.avi 164,14 160 178,74
Sample5.avi 198,11 195 230,15
Sample1.avi 48,39 59 4,2
Sample2.avi 84,43 123 8,78
Levenstein
Sample3.avi 103,08 152 10,53
Code
Sample4.avi 164,14 262 18,18
Sample5.avi 198,11 319 22,16
Waktu Dekompresi
250
Waktu Dekompresi (ms)
200
150
100
50
0
48,39 84,43 103,08 164,14 198,11
Ukuran File (KB)
Berdasarkan Gambar 4.16 dapat dilihat bahwa proses dekompresi file video
menggunakan algoritma Levenstein Code lebih sedikit memakan waktu dibandingkan
dengan algoritma Shannon Fano.
firstpart.Add(nodes[position]); C1 n2 C1n2
position++; C1 n2 C1n2
}
for (int i = position; i < nodes.Count; i++) C2 n2 C2n2
{
secondpart.Add(nodes[i]); C1 n2 C1n2
}
foreach (ShannonFanoNode node in firstpart) C6 n2 C6n2
{
node.Code.Add('0'); C1 n2 C1n2
}
foreach (ShannonFanoNode node in secondpart) C6 n2 C6n2
{
node.Code.Add('1'); C1 n2 C1n2
}
if (containssymbol(firstpart, Symbol)) C4 n2 C4n2
{
nodes = firstpart; C1 n2 C1n2
}
Else
{
nodes = secondpart; C1 n2 C1n2
}
}
return nodes[0].Code; C10 1 C10
}
private int
calculatefrequency(List<ShannonFanoNode> nodes)
{
int result = 0; C9 1 C9
foreach (ShannonFanoNode node in nodes) C6 n C6n2
{
Kolom C pada tabel 4.1 merupakan keterangan berapa kali processor melakukan
komputasi, kolom # sebagai variabel untuk menghitung pengerjaan baris program,
kolom C*# sebagai hasil dari perkalian kolom C dan #. Dari perhitungan kompleksitas
pada Tabel 4.1 maka didapat T(n) yang merupakan jumlah kolom C*# sebagai berikut:
T (n) = 4C1 + C9 + 3C10 + 9C1n + C2n + C3n + 2C4n + 2C5n + 4C6n + C7n + C8n
T (n) = 𝜃 (n2)
bin.Insert(0, r); C7 1 C7
dec = dec / 2; C4 1 C4
while (dec != 0) C8 n C8
{
r = dec % 2; C4 n C4n
bin.Insert(0, r); C7 n C7n
dec = dec / 2; C4 n C4n
}
return bin.ToString(); C5 1 C5
}
public static int BinToDec(String bin)
{
StringBuilder sb = new C6 1 C6
StringBuilder(Reverse(bin));
int n = 1; C1 1 C1
int dec = 0; C1 1 C1
for (int i = 0; i < sb.Length; i++) C2 n C2n
{
dec = dec + C4 n C4n
(int)(Char.GetNumericValue(sb[i])) * n;
n = n * 2; C4 n C4n
}
return dec; C5 1 C5
}
public static String StringToStb(List<int> st,
List<int> c, String[] s)
{
StringBuilder stb = new StringBuilder(); C6 1 C6
for (int i = 0; i < st.Count; i++) C2 n C2n
{
for(int j=0; j<c.Count; j++) C2 n2 C2n2
{
if(c[j]==st[i]) C3 n2 C3n2
{
int k = j; C1 n2 C1n2
stb.Append(s[k]); C7 n2 C7n2
}
}
}
int x = stb.Length % 8; C1 1 C1
int pad = 0; C1 1 C1
if (x != 0) C3 1 C3
{
pad = 8 - x; C4 1 C4
for (int i = 0; i < pad; i++) C2 n C2n
stb.Append("0"); C7 n C7n
}
String d = DecToBin(pad); C6 1 C6
int y = 8 - d.Length; C1 1 C1
for (int i = 0; i < y; i++) C2 n C2n
stb.Append("0"); C7 n C7n
stb.Append(d); C7 n C7n
return stb.ToString(); C5 n C5n
}
public static List<int> Encode(String stb)
{
List<int> code = new List<int>(); C4 1 C4
for (int i = 0; i < stb.Length; i+= 8) C2 n C2n
{
String x = stb.Substring(i, 8); C6 n C6n
int y = (BinToDec(x)); C1 n C1n
code.Add(y); C8 n C8n
}
return code; C5 1 C5
}
public static String Decode(List<int> code)
{
StringBuilder sb = new StringBuilder(); C6 1 C6
int t = code.Count; C1 1 C1
for (int i = 0; i < t; i++) C2 n C2n
{
StringBuilder y = new C6 n C6n
StringBuilder(DecToBin(code[i]));
if (y.Length < 8) C3 n C3n
{
int z = 8 - y.Length % 8; C1 n C1n
for (int j = 0; j < z; j++) C2 n2 C2n2
y.Insert(0, "0"); C9 n2 C9n2
}
sb.Append(y); C7 n C7n
}
return sb.ToString(); C5 1 C5
}
public static List<int> Decompress(String stb,
List<int> c, String[] s)
{
List<int> st = new List<int>(); C4 1 C4
StringBuilder bit = new StringBuilder(); C6 1 C6
StringBuilder stb2; C6 1 C6
int t = stb.Length; C1 1 C1
int pad = BinToDec(stb.Substring(t - 8, 8)); C1 1 C1
stb2 = new StringBuilder(stb.Substring(0, t - pad - C4 1 C4
8));
for (int i = 0; i < stb2.Length; i++) C2 N C2n
{
bit.Append(stb2[i]); C7 N C7n
}
Code = "0" + Code; C4 1 C4
for(int j=0; j<C; j++) C2 n C2n
Code = "1" + Code; C4 n C4n
}
return Code; C5 1 C5
}
public static void LevensteinCodes(List<int> st)
{
init(st); C12 1 C12
int t = ch.Count; C1 1 C1
lv = new String[t]; C4 1 C4
int c = 0; C1 1 C1
for (int n = 0; n < t; n++) C2 n C2n
{
lv[c] = GetLevenstein(n); C4 n C4n
c++; C11 n C11n
}
}
Berdasarkan perhitungan kompleksitas pada Tabel 4.2 maka didapat T(n) yang
merupakan jumlah kolom C*# sebagai berikut:
T (n) = 14C1 + 2C3 + 11C4 + 7C5 + 11C6 + C7 + C8 + C12 + 3C1n + 10C2n + 2C3n +
13C4n + C5n + 2C6n + 6C7n + 2C8n + C10n + 2C11n + 3C1n2 + 3C2n2 + 2C3n2 +
T (n) = (14C1 + 2C3 + 11C4 + 7C5 + 11C6 + C7 + C8 + C12) n0 + (3C1 + 10C2 + 2C3 +
T (n) = 𝜃 (n2)
BAB V
5.1. Kesimpulan
Dari Analisis, perancangan, pengujian, serta hasil pengujian proses kompresi algoritma
Shannon Fano dan Levenstein Code pada File video. Dapat disimpulkan bahwa
1. Dari hasil Ratio of Compression (Rc) yang didapat pada pengujian sistem kompresi
file video, menunjukkan bahwa Algoritma Shannon Fano lebih baik dari pada
algoritma Levenstein Code karena algoritma Shannon Fano menghasilkan rata-rata
nilai Ratio of Compression (Rc) yang lebih kecil.
2. Dari hasil Space Saving (Ss) yang didapat pada pengujian sistem kompresi file
video, menunjukkan bahwa Algoritma Shannon Fano lebih baik dari pada
algoritma Levenstein Code karena algoritma Shannon Fano menghasilkan rata-rata
nilai Space Saving (Ss) yang lebih besar.
3. Dari hasil waktu kompresi yang didapat pada pengujian sistem kompresi file video,
menunjukkan bahwa Algoritma Levenstein Code lebih baik dari pada algoritma
Levenstein Code karena algoritma Levenstein Code membutuhkan waktu yang
lebih sedikit dibandingkan algoritma Shannon Fano dalam menjalankan proses
kompresi file video.
4. Dari hasil waktu dekompresi yang didapat pada pengujian sistem kompresi file
video, menunjukkan bahwa Algoritma Levenstein Code lebih baik dari pada
algoritma Shannon Fano karena algoritma Levenstein Code membutuhkan waktu
yang lebih sedikit dibandingkan algoritma Shannon Fano dalam menjalankan
proses dekompresi file video.
5. Pada pengujian algoritma Levenstein Code, ukuran file yang dihasilkan tidak
mengecil, hal tersebut dikarenakan bit pada file video sangat banyak dan variatif,
sehingga kode Levenstein Code yang dihasilkan jauh lebih banyak dari jumlah bit
sebelum dikompresi.
6. Berdasarkan perhitungan yang dilakukan, nilai kompleksitas algoritma Shannon
Fano dan Levenstein Code yang didapat dalam penelitian ini adalah 𝜃(n2)
5.2. Saran
Berdasarkan penelitian yang dilakukan, beberapa saran yang dapat dipertimbangkan
untuk penelitian selanjutnya adalah adalah sebagai berikut:
1. Pada penelitian ini, sistem yang dibangun hanya dapat melakukan proses kompresi
pada file video, diharapkan kedepannya dapat juga melakukan proses kompresi
jenis-jenis file lainnya seperti file teks, gambar, ataupun audio.
2. Pada penelitian ini, proses kompresi hanya dapat dilakukan pada file video
berekstensi *.avi, diharapkan pada penelitian selanjutnya dapat juga mampu
mengkompresi file video berkekstensi lainnya seperti *.mp4, *.mkv, *.mov, dan
lain-lain.
3. Pada penelitian ini, sistem berjalan pada aplikasi desktop, diharapkan kedepannya
dapat dibangun pada platform lainnya seperti web, mobile, dan lain-lain.
DAFTAR PUSTAKA
Barakbah, Ali Ridho, Tita Karlita, Ahmad Syauqi Ahsan, 2013. Logika dan Algoritma.
Politkenik Elektronika Negeri Surabaya: Surabaya
Budiman,M A dan Rachmawati, D. (2017). On Using Goldbach G0 Codes and Even-
Rodeh Codes for Text Compression. Jakarta. Jurnal Ilmu Komputer dan
Teknologi Informasi. Vol. 1, No. 2, Hal: 1-3.
Cormen, T.H., Leiserson, C.E., Rivest, R.L. and Stein, C. 2009. Introduction to
Algorithms. Third Edition. The MIT Press : London.
Erdiyansyah, Umri. 2014. Perbandingan Algoritma Elias Delta Code Dengan
Levenstein Code Untuk Kompresi File Teks. Skripsi. Universitas Sumatera
Utara. Medan.
Fitria, Luluk A., Tito W. Purboyo, & Anggunmeka L. Prasasti. (2017). A Review of
Data Compression Techniques. International Journal of Applied Engineering
Research ISSN 0973-4562. Vol. 12, No. 19. Hal: 8957-8963.
Kumalasari, Devy. (2017). Analisa Perbandingan Kompleksitas Algoritma Bubble Sort,
Cocktail Sort Dan Comb Sort Dengan Bahasa Pemrograman C++. Journal
Speed, Sentra Penelitian Engineering dan Edukasi Vol. 9, No. 2. Hal: 2-3.
Lubis, Nuzul Sakinah. 2013. Analisis Perbandingan Kompresi File Video dengan
Motion Picture Expert Group-4 dan Flash Video dengan Menggunakan
Algoritma Huffman. Skripsi. Universitas Sumatera Utara. Medan.
Malaga, Ross A. Dan Nicole B. Koppel. (2017). A Comparison of Video Formats for
Online Teaching. Contemporary Issues in Education Research Vol. 10, No.1.
Hal: 8-9.
Putra, Ridho Amanda. 2017. Perbandingan Algoritma Boldi-Vigna(C4) Codes dengan
Algoritma Taboo Codes dalam Kompresi File Teks. Skripsi. Universitas
Sumatera Utara. Medan
Rheinadi, Ryan. 2009. Analisis Algoritma Bubble Sort. Sekolah Teknik Elektro dan
Informatika ITB: Bandung
Salomon, D. 2010. Data Compression The Complette Reference. 5th Edition. London:
Springer-Verlag.
LISTING PROGRAM
MainForm.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Skripsi_Reza
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
this.Hide();
kompresi komp = new kompresi();
komp.Show();
}
void Button2Click(object sender, EventArgs e)
{
this.Hide();
dekompresi dekomp = new dekompresi();
dekomp.Show();
}
void Button3Click(object sender, EventArgs e)
{
this.Hide();
bantuan help = new bantuan();
help.Show();
}
void Button4Click(object sender, EventArgs e)
{
this.Hide();
tentang about = new tentang();
about.Show();
}
void Button5Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Kompresi.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace Skripsi_Reza
{
public partial class kompresi : Form
{
public string metode = "";
public List<int> code = new List<int>();
public List<int> ch = new List<int>();
public String[] lv;
public String[] sf;
Stopwatch time = new Stopwatch();
List<int> plain = new List<int>();
public kompresi()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
this.Hide();
MainForm main = new MainForm();
main.Show();
}
void KompresiLoad(object sender, EventArgs e)
{
if(dlg.ShowDialog() == DialogResult.OK){
}
}
}
void Button6Click(object sender, EventArgs e)
{
metode = "lv";
byte[] konversi= File.ReadAllBytes(textBox1.Text);
for (int i = 0; i < konversi.Length; i++) {
plain.Add(Convert.ToInt32(konversi[i]));
}
time.Restart();
Levenstein.LevensteinCodes(plain);
String stb = Levenstein.StringToStb(plain, Levenstein.ch,
Levenstein.lv);
code = Levenstein.Encode(stb);
time.Stop();
MessageBox.Show("Berhasil dikompresi dengan Levenstein");
textBox2.Text = (stb.Length/8000).ToString() + " KB";
double CR = ((plain.Count)* 8 * 1.0) / stb.Length;
double RC = (stb.Length/((plain.Count)* 8 * 1.0))*100;
textBox4.Text =Math.Round(RC,2).ToString() + " %";
double SS = (1.0 - 1.0/CR) * 100;
textBox5.Text =Math.Round(SS,2).ToString() + " %";
textBox3.Text =
Math.Round(Convert.ToDecimal(time.Elapsed.TotalMilliseconds/1000),4).
ToString() + " ms";
}
sww.WriteLine(stbnya);
for (int n = 0; n < Levenstein.lv.Length; n++)
sww.Write(Levenstein.lv[n]+"~");
sww.Flush();
sww.Close();
}
}
if (metode == "sf")
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "Compressed Files( *.sf)|*.sf";
simpan.FileName = "*.sf";
if (simpan.ShowDialog() == DialogResult.OK)
{
FileStream fstream=new
FileStream(simpan.FileName,FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fstream);
SeekOrigin seekorigin = new SeekOrigin();
sw.BaseStream.Seek(0, seekorigin);
sw.WriteLine(Shannon_Fano_Encoder.message);
sw.Flush();
sw.Close();
string
filenamee=simpan.FileName.Substring(0,simpan.FileName.Length- 3) +
"f.dat";
FileStream fstreamm=new
FileStream(filenamee,FileMode.OpenOrCreate);
StreamWriter sww = new StreamWriter(fstreamm);
SeekOrigin seekoriginn = new SeekOrigin();
sww.BaseStream.Seek(0, seekoriginn);
List<Code> codes = Shannon_Fano_Encoder.codes;
sww.WriteLine(Shannon_Fano_Encoder.codes.Count);
StringBuilder stbnya = new StringBuilder();
for(int i=0; i<codes.Count; i++)
{
sww.Write(Convert.ToInt32(codes[i].Symbol)+"~
"+codes[i].code+"~");
}
sww.Flush();
sww.Close();
}
}
}
void Button2Click(object sender, EventArgs e)
{
lblFile.Text = null;
metode = "";
code = new List<int>();
ch = new List<int>();
plain = new List<int>();
textBox1.Text = null;
textBox2.Text = null;
textBox3.Text = null;
textBox4.Text = null;
textBox5.Text = null;
}
Shannon-Fano-Encoder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Skripsi_Reza
{
class Shannon_Fano_Encoder
{
public static String message { get; set; }
public static List<Code> codes { get; set; }
public Shannon_Fano_Encoder(List<int> toencode)
{
Dictionary<char, int> values = new Dictionary<char,
int>();
for (int i = 0; i < toencode.Count; i++)
{
char ch = Convert.ToChar(toencode[i]);
if (!values.ContainsKey(ch))
{
values.Add(ch, 0);
}
values[ch]++;
}
codes = new List<Code>();
foreach (KeyValuePair<char, int> symbol in values)
{
List<Char> encoded = Encode(values, symbol.Key);
String cod = "";
foreach (Char enc in encoded)
{
cod = cod + enc;
}
Code code = new Code() { Symbol = symbol.Key, code =
cod };
codes.Add(code);
}
message = "";
foreach (char ch in toencode)
{
List<Char> encoded = Encode(values, ch);
foreach (Char enc in encoded)
{
message = message + enc;
}
}
}
{
int result = 0;
foreach (ShannonFanoNode node in nodes)
{
result = result + node.Frequency;
}
return result;
}
ShannonFanoNode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Skripsi_Reza
{
class ShannonFanoNode
{
public Char Symbol { get; set; }
public int Frequency { get; set; }
public List<Char> Code { get; set; }
}
}
Levenstein.cs
using System;
using System.Text;
using System.Collections.Generic;
namespace Skripsi_Reza
{
public class Levenstein
{
public static int[] fr;
public static List<int> ch = new List<int>();
public static String[] lv;
public static void InsertionSort(int[] freq, List<int>
charset)
{
int n = charset.Count;
for (int i = 1; i < n; i++)
for (int j = 0; j < i; j++)
if (fr[i] > fr[j])
{
int frtemp = fr[i];
fr[i] = fr[j];
fr[j] = frtemp;
int sbtemp = charset[i];
charset[i] = charset[j];
charset[j] = sbtemp;
}
}
y.Insert(0, "0");
}
sb.Append(y);
}
return sb.ToString();
}
}
return Code;
}
fr = new int[ch.Count];
for(int i=0; i<ch.Count;i++)
fr[i] = 0;
}
}
Dekompresi.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace Skripsi_Reza
{
public partial class dekompresi : Form
{
public byte[] hasil;
public String message;
List<Code> codes = new List<Code>();
public string metode = "";
public List<int> code = new List<int>();
public List<int> ch = new List<int>();
public String[] lv;
public String[] sf;
Stopwatch time = new Stopwatch();
List<int> plain = new List<int>();
public dekompresi()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
this.Hide();
MainForm main = new MainForm();
main.Show();
}
void Button4Click(object sender, EventArgs e)
{
if (metode == "lv")
{
Stopwatch time1 = new Stopwatch();// running time
time1.Restart();
String dc = Levenstein.Decode(code);
List<int> ds = Levenstein.Decompress(dc, ch, lv);
time1.Stop();
textBox2.Text =
Math.Round(Convert.ToDecimal(time1.Elapsed.TotalMilliseconds/1000),4)
.ToString() + " ms";
hasil = new byte[ds.Count];
for (int i = 0; i < ds.Count; i++)
{
hasil[i] = Convert.ToByte(ds[i]);
}
MessageBox.Show("Berhasil didekompresi");
}
if (metode == "sf")
{
Stopwatch time1 = new Stopwatch();// running time
time1.Restart();
Decoder decoder = new Decoder(codes, message);
time1.Stop();
textBox2.Text =
Math.Round(Convert.ToDecimal(time1.Elapsed.TotalMilliseconds/1000),4)
.ToString() + " ms";
hasil = new byte[Decoder.hasil.Count];
for (int i = 0; i < Decoder.hasil.Count; i++)
{
hasil[i] = Convert.ToByte(Decoder.hasil[i]);
}
MessageBox.Show("Berhasil didekompresi");
}
}
void Button3Click(object sender, EventArgs e)
{
code = new List<int>();
ch = new List<int>();
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Compressed Files( *.lv)|*.lv|Compressed
Files( *.sf)|*.sf";
if (open.ShowDialog() == DialogResult.OK)
{
metode =
open.FileName.Substring(open.FileName.Length-2,2);
if (metode == "lv")
{
string nama = open.FileName.Substring(0,
open.FileName.Length);
textBox1.Text = nama;
string[] lines = File.ReadAllLines(nama);
int linecount =
File.ReadAllLines(nama).Length;
for (int i=0; i<linecount;i++)
{
code.Add(int.Parse(lines[i]));
}
string namaa = open.FileName.Substring(0,
open.FileName.Length- 3) + "l.dat";
FileStream fstreamm = new
FileStream(namaa, FileMode.Open,FileAccess.ReadWrite);
StreamReader sreaderr = new
StreamReader(fstreamm);
sreaderr.BaseStream.Seek(0,
SeekOrigin.Begin);
string keterangan = sreaderr.ReadLine();
string[] info = new string[3];
info = keterangan.Split('~');
int n = int.Parse(keterangan);
keterangan = sreaderr.ReadLine();
info = new string[n];
info = keterangan.Split('~');
for(int i = 0;i<n;i++)
ch.Add(int.Parse(info[i]));
keterangan = sreaderr.ReadLine();
info = new string[n];
lv = new string[n];
info = keterangan.Split('~');
for(int i = 0;i<n;i++)
lv[i] = info[i];
sreaderr.Close();
}
if (metode == "sf")
{
string nama = open.FileName.Substring(0,
open.FileName.Length);
textBox1.Text = nama;
string[] lines = File.ReadAllLines(nama);
int linecount =
File.ReadAllLines(nama).Length;
message = lines[0];
string namaa = open.FileName.Substring(0,
open.FileName.Length- 3) + "f.dat";
FileStream fstreamm = new
FileStream(namaa, FileMode.Open,FileAccess.ReadWrite);
StreamReader sreaderr = new
StreamReader(fstreamm);
sreaderr.BaseStream.Seek(0,
SeekOrigin.Begin);
string keterangan = sreaderr.ReadLine();
string[] info = new string[3];
info = keterangan.Split('~');
int n = int.Parse(keterangan);
keterangan = sreaderr.ReadLine();
info = new string[2*n];
info = keterangan.Split('~');
for (int i = 0; i < 2*n; i = i+2)
{
Code codenya = new Code() {
Symbol = Convert.ToInt32(info[i]), code = info[i+1] };
codes.Add(codenya);
}
sreaderr.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
void Button2Click(object sender, EventArgs e)
{
metode = "";
code = new List<int>();
ch = new List<int>();
plain = new List<int>();
textBox1.Text = null;
textBox2.Text = null;
}
void Button5Click(object sender, EventArgs e)
{
if (metode == "lv")
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "AVI Files( *.avi)|*.avi";
simpan.FileName = "*.avi";
if (simpan.ShowDialog() == DialogResult.OK)
{
File.WriteAllBytes(simpan.FileName,hasil);
}
}
if (metode == "sf")
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "AVI Files( *.avi)|*.avi";
simpan.FileName = "*.avi";
if (simpan.ShowDialog() == DialogResult.OK)
{
File.WriteAllBytes(simpan.FileName,hasil);
}
}
}
void LblFileClick(object sender, EventArgs e)
{
}
}
}
Decoder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Skripsi_Reza
{
class Decoder
{
public static List<int> hasil = new List<int>();
Bantuan.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Skripsi_Reza
{
public partial class bantuan : Form
{
public bantuan()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
this.Hide();
MainForm main = new MainForm();
main.Show();
}
void PictureBox1Click(object sender, EventArgs e)
{
}
void Label2Click(object sender, EventArgs e)
{
}
}
}
Tentang.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Skripsi_Reza
{
/// <summary>
/// Description of tentang.
/// </summary>
public partial class tentang : Form
{
public tentang()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
this.Hide();
MainForm main = new MainForm();
main.Show();
}
void Label3Click(object sender, EventArgs e)
{
}
}
}
CURRICULUM VITAE
PENDIDIKAN
Perguruan Tinggi
Universitas Sumatera Utara
Fakultas Ilmu Komputer dan Teknologi Informasi
Program Studi S1 Ilmu Komputer
IPK 3.6
2015 - Sekarang
Sekolah Dasar
SD Negeri 3 Lhokseumawe
2003-2009
KEMAMPUAN KOMPUTER
Programming: C/C++, C#
IDE : CodeBlocks, Sharp Develop
Database : MySQL
Software : Ms. Office, Adobe Photoshop, Corel Draw
PENGALAMAN PELATIHAN
PENGALAMAN ORGANISASI/KEPANITIAAN
No Organisasi Jabatan Tahun
1. IMILKOM USU Anggota 2016-2017
Sahabat Beasiswa Untuk
2. Anggota 2016-2017
Negeri (SABUN)
3. IPTR komisariat USU Ketua Bidang 2017-2018
4. PEMA FASILKOM-TI Anggota 2018-2019
SEMINAR