Anda di halaman 1dari 98

ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON FANO

DAN LEVENSTEIN CODE PADA KOMPRESI FILE VIDEO

SKRIPSI

MUHAMMAD REZA PRASETIO


151401125

PROGRAM STUDI S1 ILMU KOMPUTER


FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2019

UNIVERSITAS SUMATERA UTARA


i

ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON FANO DAN


LEVENSTEIN CODE PADA KOMPRESI FILE VIDEO

SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah


Sarjana Ilmu Komputer

MUHAMMAD REZA PRASETIO


151401125

PROGRAM STUDI S1 ILMU KOMPUTER


FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
MEDAN
2019

UNIVERSITAS SUMATERA UTARA


ii

PERSETUJUAN

Judul : ANALISIS PERBANDINGAN KINERJA


ALGORITMA SHANNON FANO DAN LEVENSTEIN
CODE
PADA KOMPRESI FILE VIDEO
Kategori : SKRIPSI
Nama : MUHAMMAD REZA PRASETIO
Nomor Induk Mahasiswa : 151401125
Program Studi : SARJANA (S-1) ILMU KOMPUTER
Fakultas : ILMU KOMPUTER DAN TEKNOLOGI
INFORMASI UNIVERSITAS SUMATERA UTARA

Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Dr. Poltak Sihombing, M.Kom Dian Rachmawati,S.Si, M.Kom


NIP. 196203171991031001 NIP. 198307232009122004

Diketahui/disetujui oleh
Program Studi S1 Ilmu Komputer
Ketua,

Dr. Poltak Sihombing, M.Kom


NIP. 196203171991031001

UNIVERSITAS SUMATERA UTARA


iii

PERNYATAAN

ANALISIS PERBANDINGAN KINERJA ALGORITMA SHANNON FANO DAN


LEVENSTEIN CODE PADA KOMPRESI FILE VIDEO

SKRIPSI

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

Medan, Oktober 2019

Muhammad Reza Prasetio


151401125

UNIVERSITAS SUMATERA UTARA


iv

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 dasarnya penyusunan skripsi merupakan syarat utama yang harus


dilakukan untuk menyelesaikan pendidikan dan menyandang gelar Sarjana Komputer
pada Program Studi S1 Ilmu Komputer Fasilkom-TI Universitas Sumatera Utara.

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.

UNIVERSITAS SUMATERA UTARA


v

8. Balhqis Aisyah, S.Ak yang tidak henti-hentinya memberi dukungan, semangat


serta do’a kepada penulis.
9. Seluruh teman-teman seperjuangan yang telah memberi banyak bantuan,
semangat serta motivasi kepada penulis. Defri, Gisella, Cindy, Reni, Wahyu,
Zikri, Kevin, Yogi, Adi, Rizali, Aldoni, dan Habibie
10. Sahabat-sahabat penulis yang senantiasa memberi dukungan serta tempat
berbagi suka dan duka. Nazlazahrina, dan Awis Kurni.
11. Keluarga Kom B 2015 Ilmu Komputer Universitas Sumatera Utara yang banyak
memberi bantuan kepada penulis dalam pengerjaan skripsi ini.
12. Seluruh organisasi yang memberikan banyak sekali pelajaran mengenai
akademik maupun kehidupan kampus, IPTR Komisariat USU, IMILKOM
USU, Sahabat Beasiswa Untuk Negeri, dan Pemerintahan Mahasiswa
FASILKOM-TI.
13. Dan semua pihak yang telah membantu yang tidak dapat disebutkan satu per
satu.
Terima kasih kepada semua pihak, semoga semua kebaikan, perhatian, bantuan
serta dukungan yang telah diberikan kepada penulis semoga mendapatkan balasan yang
setimpal dari Allah swt. Semoga Skripsi ini dapat bermanfaat bagi orang banyak.

Medan, Oktober 2019

Penulis

UNIVERSITAS SUMATERA UTARA


vi

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

UNIVERSITAS SUMATERA UTARA


vii

COMPARISON ANALYSIS OF PERFORMANCE OF SHANNON FANO


ALGORITHM AND LEVENSTEIN CODE ALGORITHM
ON VIDEO FILE COMPRESSION

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

UNIVERSITAS SUMATERA UTARA


viii

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

Bab 2 Landasan Teori


2.1 Kompresi Data 7
2.2.1 Teknik Kompresi Loseless 7
2.2.2 Teknik Kompresi Lossy 8
2.2 Algoritma Shannon Fano 8
2.3 Algoritma Levenstein Code 11
2.4 File Video 11
2.5 Kompleksitas Algoritma 14

Bab 3 Analisis dan Perancangan Sistem


3.1 Analisis Sistem 17
3.1.1 Analisis Masalah 17
3.1.2 General Arsitektur 18
3.1.3 Analisis Kebutuhan 19
3.1.4 Analisis Proses 20
3.2 Pemodelan Sistem 20
3.2.1 Use Case Diagram 20
3.2.2 Activity Diagram 24
3.2.3 Sequence Diagram 27
3.3 Flowchart 28

UNIVERSITAS SUMATERA UTARA


ix

3.3.1 Flowchart Sistem 28


3.3.2 Flowchart Algoritma 30
3.3.3 Flowchart Algoritma Steepest Ascent Hill Climbing 30
3.4 Perancangan Antarmuka (Interface) 32
3.4.1 Rancangan Halaman Beranda 32
3.4.2 Rancangan Halaman Kompresi File 33
3.4.3 Rancangan Halaman Dekompresi File 34
3.4.4 Rancangan Halaman Bantuan 35
3.4.5 Rancangan Halaman Tentang 36

Bab 4 Implementasi dan Pengujian Sistem


4.1 Implementasi 38
4.1.1 Halaman Beranda 38
4.1.2 Halaman Kompresi File 39
4.1.3 Halaman Dekompresi File 39
4.1.3 Halaman Bantuan 40
4.1.3 Halaman Tentang 41

4.2 Pengujian Sistem 41


4.2.1 Pengujian Proses Kompresi File 42
4.2.2 Pengujian Proses Dekompresi File 43
4.3 Hasil Pengujian 45
4.4 Kompleksitas Algoritma 51

Bab 5 Kesimpulan dan Saran


5.1 Kesimpulan 63
5.2. Saran 64

Daftar Pustaka 65
Lampiran

UNIVERSITAS SUMATERA UTARA


x

DAFTAR TABEL

Halaman

Tabel 2.1 Probablitas Huruf 9


Tabel 2.2 Pemberian Kode Kelompok Pertama 9
Tabel 2.3 Kode Levenstein 11
Tabel 3.1 Narrative Use Case Kompresi File Video 22
Tabel 3.2 Narrative Use Case Kompresi File Video 23
Tabel 4.1 Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Ratio of Compression (Rc) 46
Tabel 4.2 Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Space Saving (Ss) 47
Tabel 4.3 Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Waktu Kompresi 49
Tabel 4.4 Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Waktu Dekompresi 50
Tabel 4.5 Kompleksitas Algoritma Shannon Fano 51
Tabel 4.6 Kompleksitas Algoritma Levenstein Code 55

UNIVERSITAS SUMATERA UTARA


xi

DAFTAR GAMBAR

Halaman

Gambar 2.1 Proses Kompresi Data 7


Gambar 2.2 Pohon Kode Shannon Fano 10
Gambar 2.3 Ilustrasi File Video 12
Gambar 2.4 Grafik Fungsi Notasi Ω (Big-Omega) 15
Gambar 2.5 Grafik Fungsi Notasi Ο (Big-Oh) 15
Gambar 2.6 Grafik Fungsi Notasi Θ (Big-Theta) 16
Gambar 3.1 Diagram Ishikawa 18
Gambar 3.2 General Arsitektur 18
Gambar 3.3 Use Case Diagram 21
Gambar 3.4 Activity Diagram Kompresi File 25
Gambar 3.5 Activity Diagram Dekompresi File 26
Gambar 3.6 Sequence Diagram Kompresi 27
Gambar 3.7 Sequence Diagram Dekompresi 27
Gambar 3.8 Flowchart Proses Kompresi 28
Gambar 3.9 Flowchart Proses Dekompresi 29
Gambar 3.10 Flowchart Algoritma Shannon Fano 30
Gambar 3.11 Flowchart Algoritma Levenstein Code 31
Gambar 3.12 Tampilan Menu Beranda 32
Gambar 3.13 Tampilan Menu Kompresi File 33
Gambar 3.14 Tampilan Menu Dekompresi File 34
Gambar 3.15 Tampilan Menu Bantuan 36
Gambar 3.16 Tampilan Menu Tentang 37
Gambar 4.1 Halaman Beranda 38
Gambar 4.2 Halaman Kompresi File 39
Gambar 4.3 Source code kompresi Shanon Fano 39
Gambar 4.4 Source code kompresi Levenstein 40
Gambar 4.5 Halaman Dekompresi File 40
Gambar 4.6 Source code dekompresi Shanon Fano 41
Gambar 4.7 Source code dekompresi Levenstein 41
Gambar 4.8 Halaman Bantuan 42
Gambar 4.9 Halaman Tentang 42
Gambar 4.10 File video sebelum proses kompresi 43
Gambar 4.11 messageBox proses kompresi selesai 43
Gambar 4.12 Hasil Proses kompresi menggunakan algoritma Shannon Fano 44
Gambar 4.13 Hasil Proses kompresi menggunakan algoritma Levenstein Code 44
Gambar 4.14 File Video sebelum proses dekompresi 45
Gambar 4.15 MessageBox proses kompresi selesai 45
Gambar 4.16 Hasil proses dekompresi file 46
Gambar 4.17 Grafik Ratio of Compression (Rc) Terhadap Ukuran File 47
Gambar 4.18 Grafik Space Saving (Ss) Terhadap Ukuran File 48
Gambar 4.19 Grafik Waktu Kompresi Terhadap Ukuran File 50
Gambar 4.20 Grafik Waktu Dekompresi Terhadap Ukuran File 51

UNIVERSITAS SUMATERA UTARA


xii

DAFTAR LAMPIRAN

Halaman

Lampiran 1 Listing Program A-1


Lampiran 2 Curriculum Vitae B-1

UNIVERSITAS SUMATERA UTARA


1

BAB I

PENDAHULUAN

1.1. Latar Belakang

Video adalah teknologi untuk menangkap, merekam, memproses, mentransmisikan,


dan menata ulang gambar yang bergerak. Biasanya menggunakan film seluloid, sinyal
elektronik, atau media digital (Luluk, 2017). Pesatnya perkembangan teknologi
menjadikan video tidak hanya penting bagi komunikasi, tapi juga sebagai media
hiburan. Biasanya, file video memiliki ukuran yang besar sehingga membutuhkan ruang
penyimpanan yang besar contohmya seperti salah satu format file video AVI (Audio
Video Interleaved) yang memiliki ukuran file yang sangat besar karena resolusi yang
dipakai sesuai dengan resolusi asli sumber video.
Namun, seiring dengan berkembang pesatnya teknologi muncul pula berbagai
masalah terkait dengan pengolahan file video tersebut. Ukuran file video yang semakin
bertambah besar menyebabkan diperlukannya ruang penyimpanan data yang besar, dan
diperlukan koneksi yang cepat untuk mentransfer file dengan kapasitas yang besar
sehingga membutuhkan harga yang mahal untuk penyediaan ruang penyimpanan data
maupun kecepatan akses tersebut. Solusi utama dari permasalahan-permasalahan
tersebut dengan dilakukannya teknik pengolahan file, salah satunya adalah pemampatan
(Kompresi) data agar dapat mengurangi ukuran file tanpa mengurangi informasi di
dalamnya sehingga dapat mempercepat pertukaran file.
Kompresi data adalah proses konversi aliran data masukan (aliran sumber atau
data mentah asli) ke dalam aliran data lain (keluaran, atau aliran terkompresi) yang
memiliki ukuran lebih kecil (Salomon, 2010). Secara spesifik, kompresi data bertujuan
untuk mereduksi tempat (space) penyimpanan data dan mereduksi waktu untuk
mentransmisikan file atau data yang memiliki kapasitas besar (Wryadinata, R.2007).
Terdapat berbagai macam algoritma yang dipakai pada teknik kompresi data,
namun pada penelitian ini penulis memakai dua algoritma yang akan dibandingkan
kinerja keduanya untuk digunakan pada kompresi file video. Terdapat beberapa aspek
yang menjadi pertimbangan dari hasil perbandingan kedua algoritma yang dipakai,

UNIVERSITAS SUMATERA UTARA


2

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.

1.2. Rumusan Masalah


Dibutuhkannya algoritma yang efisien untuk mengkompresi file video yang notabene
memiliki ukuran yang lebih besar daripada jenis file lainnya.

1.3. Batasan Masalah


Dalam penelitian ini, peneliti membatasi ruang lingkup masalah yang akan diteliti
dengan batasan masalah sebagai berikut:
1. Membandingkan 2 algoritma kompresi data yaitu algoritma Shannon Fano dan
Levenstein.
2. Data masukkan yang digunakan adalah file video berekstensi *.avi
3. Parameter untuk kompresi adalah ukuran file hasil kompresi, nilai Ratio Of
Compression (Rc), Compression Ratio (Cr), Space Savings (Ss), waktu kompresi
dan waktu dekompresi.
4. Bahasa pemrograman yang digunakan adalah C#.

1.4. Tujuan Penelitian


Tujuan penelitian ini adalah:
1. Membandingkan kinerja algoritma Shannon Fano dan Levenstein Code untuk
mengkompresi file video.

UNIVERSITAS SUMATERA UTARA


3

2. Membangun aplikasi kompresi file Video menggunakan algoritma Shannon Fano


dan Levenstein.

1.5. Manfaat Penelitian


Manfaat dari penelitian ini adalah mengetahui performansi algoritma mana yang lebih
efisien berdasarkan parameter yang telah ditetapkan dalam penerapannya pada
kompresi file video.

1.6. Penelitian Yang Relevan


Terdapat beberapa penelitian terdahulu yang revelan terhadap penelitian yang akan
dilakukan oleh penulis yaitu sebagai berikut:
1. M. Mary Shanthi Rani, P. Chitra dan K. Anandharaj (2017) pada jurnal yang
berjudul “A Study of Various Video Compression Techniques” menjelaskan bahwa
pada jurnal ini menyajikan analisi komparatif dari tiga algoritma kompresi video
berdasarkan teknik berbasis transformasi, yaitu Discrete Cosine Transform (DCT),
Discrete Wavelet Transform (DWT), dan Huffman Coding. Dari Pengamatan hasil
yang didapat, menunjukkan bahwa Transform (Hybrid - DCT - DWT)
menghasilkan rasio kebisingan sinyal puncak tinggi (PSNR) dan rasio kompresi
untuk transmisi yang efektif.
2. Nuzul Sakinah Lubis (2013) pada penelitian yang berjudul “Analisis Perbandingan
Kompresi File Video Dengan Motion Picture Expert Group-4 dan Flash Video
dengan Menggunakan Algoritma Huffman” Menjelaskan bahwa waktu kompresi
yang dibutuhkan cukup cepat namun waktu dekompresi yang dibutuhkan terbilang
lambat, hasil kompresi tidak selalu lebih kecil daripada ukuran file awal, Algoritma
Huffman menghasilkan file dekompresi yang tidak mengalami perubahan kualitas
dengan file awal sebelum dikompresi.
3. Romi Wiryadinata (2007) pada jurnal yang berjudul “Data Compression Coding
Using Static and Dinamic Method Of Shannon-Fano Algrithm” menjelaskan bahwa
Untuk input stream yang sama menggunakan metode Shannon-Fano Statik jika
dilakukan dengan cara mengurutkan simbol yang berbeda akan tetap menghasilkan
jumlah bit output yang sama. Jumlah bit output hasil kompresi menggunakan
metode Shannon-Fano statik lebih sedikit dibanding jumlah bit output hasil
kompresi metode Shannon-Fano dinamik untuk input stream yang sama. Rasio

UNIVERSITAS SUMATERA UTARA


4

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.

1.7. Metode Penelitian


Metode penelitian yang dilakukan dalam penelitian ini adalah:
1. Studi Pustaka
Pada tahap ini, penulis memulai penelitian dengan mencari referensi dari berbagai
sumber dan melakukan peninjauan pustaka melalui buku-buku, artikel ilmiah, dan
penelitian-penelitian sebelumnya dalam bentuk jurnal maupun skripsi yang
berhubungan dengan kompresi file video, Algoritma Shannon Fano dan Algoritma
Levenstein Code.
2. Analisis dan Perancangan
Pada tahap ini, penulis melakukan analisa terhadap apa saja yang akan dibutuhkan
oleh sistem yang akan dibuat. Selain itu, penulis juga melakukan perancangan yang

UNIVERSITAS SUMATERA UTARA


5

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.

1.8. Sistematika Penulisan


Sistematika penulisan dari skripsi ini terdiri dari beberapa bagian utama sebagai
berikut :

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.

UNIVERSITAS SUMATERA UTARA


6

BAB 5 : KESIMPULAN DAN SARAN


Bab ini merupakan bab penutup yang menguraikan mengenai kesimpulan yang penulis
ambil dari pembahasan pada bab-bab sebelumnya dan saran sebagai masukan terhadap
permasalahan yang muncul yang diharapkan dapat bermanfaat bagi pemecahan masalah
tersebut.

UNIVERSITAS SUMATERA UTARA


7

BAB II

LANDASAN TEORI

2.1. Kompresi Data

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.

Gambar 2.1. Proses kompresi data

Teknik Kompresi dibagi menjadi dua, yaitu:


2.1.1. Teknik Kompresi Lossless
Teknik kompresi lossless, merupakan teknik kompresi yang tidak menyebabkan
kehilangan informasi. jika data telah dikompresi tanpa kehilangan, data asli dapat
dipulihkan dengan persis dari data yang telah dikompresi. kompresi lossless umumnya
digunakan untuk aplikasi yang tidak dapat mentolerir perbedaan antara data asli dan

UNIVERSITAS SUMATERA UTARA


8

data yang telah direkonstruksi(Sayood,2018). Contoh dari algoritma lossless, yaitu: Run
length Encoding (RLE), Huffman Coding, Levenstein, dan Shannon Fano.

2.1.2. Teknik Kompresi Lossy


Teknik kompresi lossy menyebabkan data kehilangan beberapa informasi, dan data
yang telah dikompres menggunakan teknik lossy umumnya tidak dapat dipulihkan atau
direkonstruksi dengan persis. Sebagai imbalan dari penyimpangan ini dalam
rekonstruksi, kita umumnya dapat memperoleh rasio kompresi yang jauh lebih tinggi
daripada yang dimungkinkan oleh kompresi lossless(Sayood,2018). Contoh dari
algoritma lossy, yaitu: Discrete Cosine Transform (DCT), Continious Wavelet
Transform (CWT), dan Embedded Zerotree of Wavelet Coefficient (EZW).

2.2. Algoritma Shannon-Fano


Algoritma Shannon-Fano coding ditemukan oleh Claude Shannon (bapak teori
informasi) dan Robert Fano pada tahun 1949. Pada saat itu metode ini merupakan
metode yang paling baik tetapi hampir tidak pernah digunakan dan dikembangkan lagi
setelah kemunculan algoritma Hufman. Pada dasarnya metode ini menggantikan setiap
simbol dengan sebuah alternatif kode biner yang panjangnya ditentukan berdasarkan
probabilitas dari simbol tersebut (Rhee, M.Y., 2003).

Langkah-langkah percobaan algoritma Shanno Fano:

1. Menentukan jumlah probabilitas huruf,


2. Mengurutkan huruf pada suatu tabel,
3. Meletakan pada baris pertama untuk huruf yang memiliki probabilitas tertinggi,
4. Melakukan pembagian terhadap tabel atas dua kelompok dengan probabilitas yang
sama atau saling mendekati,
5. Memberikan kode nol pada kelompok pertama dan kode satu pada kelompok
kedua,
6. Mengulangi langkah empat dan lima sampai tidak ada lagi kemungkinan untuk
membagi kelompok-kelompok tersebut dalam dua sub kelompok lagi.

Untuk contoh kasus, kita menggunakan pesan teks “MUHAMMADREZA”, yang


terdiri dari M, U, H, A, D, R, E, Z. Pemilihan teks tersebut karena memiliki rangkaian

UNIVERSITAS SUMATERA UTARA


9

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 2.1. Probabilitas Huruf

Huruf Jumlah Probabilitas


M 3
U 1
H 1
A 3
D 1
R 1
E 1
Z 1

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.

Tabel 2.2. Pemberian kode kelompok pertama

Huruf Jumlah Probabilitas


M 3
A 3
U 1
H 1
D 1
R 1
E 1
Z 1

UNIVERSITAS SUMATERA UTARA


10

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.

Gambar 2.2 Pohon kode Shannon Fano


Gambar 2.2 merupakan pohon kode Shannon Fano untuk teks
“MUHAMMADREZA”. Tanpa kompresi, teks “MUHAMMADREZA” memiliki 12
karakter dikali 8 bit sama dengan 96 bit dengan asumsi 1 huruf membutuhkan alokasi
sekitar 8 bit. Tetapi, dengan kompresi teks “MUHAMMADREZA” menjadi 34 bit.

2.3. Algoritma Levenstein Code


Kode yang sedikit diketahui untuk bilangan bulat non-negatif ini digagas pada
tahun 1968 oleh Vladimir Levenshtein. Baik encoding dan decoding adalah proses multi
langkah (Salomon, 2007). Levenstein kode untuk nol adalah 0 tunggal. Untuk kode
angka positif n, berikut adalah langkah encode-nya:

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.

UNIVERSITAS SUMATERA UTARA


11

4. Jika M ≠ 0, tambahkan C dengan 1 dan lakukan langkah 2 kembali, tetapi dengan


nilai M, bukan n.
5. Jika M = 0, tambahkan 1 diikuti dengan 0 pada C ke Kode-Smentara (KS) dan
berhenti.
Tabel 2.3. Tabel Kode Levenstein (Salomon,2010).

n Kode Levenstein n Kode Levenstein


0 0 9 11100 1 001
1 10 10 11100 1 010
2 110 0 11 11100 1 011
3 110 1 12 11100 1 100
4 1110 0 00 13 11100 1 101
5 1110 0 01 14 11100 1 110
6 1110 0 10 15 11100 1 111
7 1110 0 11 16 11100 1 00 0000

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.

2.4. File Video

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

UNIVERSITAS SUMATERA UTARA


12

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.

Gambar 2.3. Ilustrasi file video


Representasi sinyal video meliputi 3 dimensi, yaitu Representasi Visual. Tujuan
utamanya adalah agar orang yang melihat merasa berada di scene (lokasi) atau ikut
berpartisipasi dalam kejadian yang ditampilkan. Oleh sebab itu, suatu gambar harus
dapat menyampaikan informasi spatial dan temporal dari suatu scene.

Beberapa format file video yang umum digunakan, diantaranya (Malaga, 2017):

1. Audio Video Interleaved (.avi)


Microsoft pertama kali memperkenalkan format audio video Interleave (dengan
ekstensi file. AVI) di 1992. Pada dasarnya file .avi merupakan file yang dihasilkan

UNIVERSITAS SUMATERA UTARA


13

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.

5. Flash Video (.flv)


FLV adalah video dengan format flash movie yang biasa digunakan untuk
streaming video di Internet. FLV biasanya menjadi format standar yang digunakan
oleh sebagian situs pemutar video online seperti Youtube, Google Video,
Reuters.com, Yahoo!Video, MySpace, dan lain-lain. Format FLV biasanya
ukurannya lebih kecil daripada video Digital yang menggunakan format MPEG

UNIVERSITAS SUMATERA UTARA


14

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.

2.5. Kompleksitas Algoritma

Kompleksitas suatu algoritma merupakan ukuran banyaknya perhitungan yang


dibutuhkan sebuah algoritma untuk menyelesaikan masalah. Algoritma dengan
penyelesaian permasalahan dalam waktu singkat memiliki kompleksitas yang rendah,
sedangkan algoritma dengan penyelesaian permasalahan yang membutuhkan waktu
lama untuk menyelesaikan masalah mempunyai kompleksitas yang tinggi (Devy,2017).

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.

UNIVERSITAS SUMATERA UTARA


15

Gambar 2.4. Grafik Fungsi Notasi Ω (Big-Omega) (Cormen, et al., 2009)

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.

Gambar 2.5. Grafik Fungsi Notasi Ο (Big-Oh) (Cormen, et al., 2009)

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.

Gambar 2.6. Grafik Fungsi Notasi Θ (Big-Theta) (Cormen, et al., 2009)

UNIVERSITAS SUMATERA UTARA


17

BAB III

ANALISIS DAN PERANCANGAN

3.1. Analisis Sistem

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.

3.1.1. Analisis Masalah


Masalah yang dibahas dalam penelitian ini adalah Bagaimana kinerja antara algoitma
Shannon Fano dan Levenstein Code pada proses kompresi file video dan perbandingan
kinerja kedua algoritma tersebut berdasarkan parameter Compression Ratio (CR),
Space Saving (SS), serta waktu kompresi dan dekompresi yang dihitung dalam satuan
milisekon (ms). Setiap masalah pasti memiliki sebab dan akibat, oleh sebab itu untuk
mengidentifikasi permasalahan tersebut diperlukan sebuah Diagram Ishikawa.
Diagram Ishikawa merupakan diagram yang menunjukkan sebuah akibat dari sebuah
permasalahan dengan berbagai penyebabnya. Efek atau akibat dituliskan pada bagian
kepala. Sedangkan bagian-bagian yang berbentk tulang ikan diisi oleh sebab-sebab
sesuai dengan pendekatan permasalahannya. Dikatakan diagram Cause and Effect
(Sebab dan Akibat) karena diagram tersebut menunjukkan hubungan antara sebab dan
akibat. Diagram Ishikawa sistem ini dapat dilihat pada Gambar 3.1.
Terdapat 3 bagian penting dari Diagram Ishikawa (Rizky, M. 2016):
a. Bagian kepala berfungsi sebagai akibat (effect), yaitu masalah yang akan
dianalisis.
b. Bagian tulang sebagai penyebab utama (main cause), yaitu faktor-faktor
penyebab terjadinya masalah.
c. Bagian panah pada tulang berfungsi sebagai pernyataan sekunder dari penyebab
utama

UNIVERSITAS SUMATERA UTARA


18

Gambar 3.1 Diagram Ishikawa

3.1.2. General Arsitektur


General arsitektur adalah gambaran dari perancangan yang telah dibuat yang
merepresentasikan bagaimana proses dari sebuah program berjalan. Pada general
arsitektur terdapat komponen-komponen serta interaksi antar komponen yang
terhubung menjadi kesatuan yang utuh. Perancangan seluruh program ini dijabarkan
pada gambar 3.2.

Gambar 3.2 General Arsitektur

UNIVERSITAS SUMATERA UTARA


19

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.

3.1.3. Analisis Kebutuhan


Analisis kebutuhan merupakan tahap identifikasi kebutuhan yang dibutuhkan
oleh sebuah sistem. Analisis Kebutuhan terbagi dua, yaitu kebutuhan fungsional dan
kebutuhan non-fungsional. Kebutuhan fungsional merupakan penjelasan mengenai
fitur-fitur utama yang ada pada sistem yang akan dirancang, sedangkan kebutuhan non-
fungsional merupakan penjelasan mengenai fitur, karakteristik, serta batasan-batasan
yang ada pada sistem yang akan dirancang.

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

UNIVERSITAS SUMATERA UTARA


20

Tampilan sistem sederhana dan menarik bagi pengguna.


c. Bantuan
Sistem memiliki fitur bantuan agar dapat membantu pengguna ketika tidak
memahami cara kerja sistem.
d. Informasi
Sistem yang dirancang dapat menampilkan informasi yang berkaitan dengan
file video dengan jelas.
e. Dokumentasi
Sistem dapat menyimpan file setelah melakukan proses kompresi.

3.1.4. Analisis Proses


Pada penelitian ini sistem yang akan dirancang akan dilakukan perbandingan
kinerja algoritma Shannon Fano dan algoritma Levenstein Code berdasarkan beberapa
parameter yang telah ditetapkan.
Langkah awal pada sistem ini, pengguna memilih menu kompresi file, dan akan
muncul tampilan untuk meunggah file video serta pilihan algoritma yaitu Shannon fano
atau Levenstein Code. Setelah itu akan file akan dikomresi sesuai dengan algoritma yang
telah dipilih oleh pengguna. Setelah proses kompresi selesai, akan tampil informasi dari
file yang telah terkompresi, seperti ukuran file, Compression Ratio (CR), Space Saving
(SS), serta waktu kompresi dan dekompresi dalam satuan milisekon (ms).

3.2. Pemodelan Sistem


Pemodelan sistem berisikan tahapan-tahapan yang menjelaskan kondisi maupun
keterkaitan antara pengguna dengan sistem yang akan dirancang. Pada penelitian ini
pemodelan dilakukan dengan menggunakan Unified Modeling Language (UML) untuk
digunakan pada perencanaan sistem yang akan dirancang. UML merupakan bahasa
spesifikasi standar yang digunakan untuk menejelaskan mengenai komponen-
komponen untuk membangun sistem dan interaksi antar komponen. Adapun model
UML yang digunakan use case, activity diagram, dan sequence diagram.

3.2.1 Use Case Diagram


Use Case Diagram merupakan gambaran dari layanan atau fungsi-fungsi yang
terdapat pada sistem yang dirancang untuk penggunanya (Henderi et al, 2008). Use case

UNIVERSITAS SUMATERA UTARA


21

diagram menggambarkan fungsionalitas yang diharapkan dari sebuah sistem, sehingga


pengguna dapat dengan mudah memahami fungsi dari sistem tersebut. Pada use case
diagram, pengguna berperan untuk menjalankan dan berkomunikasi dengan sistem.
Pengguna dan use case dihubungkan dengan garis lurus. Sedangkan antara use case
dengan use case lainnya dihubungkan menggunakan garis putus-putus yang dinamakan
dengan include. Sedangkan untuk menghubungkan use case yang akan dilakukan jika
kondisi terpenuhi dengan use case yang lainnya disebut dengan extend. Use case
diagram pada sistem ditampilkan pada Gambar 3.3.

Gambar 3.3. Use Case Diagram

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.

UNIVERSITAS SUMATERA UTARA


22

Berikut ini adalah narrative use case kompresi file video yang dapat dilihat pada
Tabel 3.1.

Tabel 3.1 Narrative use case kompresi file video


Use Case name Kompresi file video
Actor Pengguna sistem
Description Use case menjelaskan tahapan bagaimana pengguna dapat
melakukan proses kompresi file video
Precondition Pengguna menjalankan sistem
Typical course of Aksi Pengguna Respon sistem
event Langkah 1:
Memilih proses yang akan
dilakukan
Langkah 2:
Sistem akan menerima
inputan dan menampilkan
tampilan menu proses
Langkah 3:
Memilih algoritma yang akan
digunakan untuk mengkompresi
file
Langkah 4:
Sistem menerima inputan
algoritma yang dipilih
pengguna

Langkah 5:
Sistem memulai proses
kompresi file

Langkah 6:

UNIVERSITAS SUMATERA UTARA


23

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.

Tabel 3.2 Narrative use case dekompresi file video


Use Case name Dekompresi file video
Actor Pengguna sistem
Description Use case menjelaskan tahapan bagaimana pengguna dapat
melakukan proses dekompresi file video
Precondition Pengguna menjalankan sistem
Typical course of Aksi Pengguna Respon sistem
event Langkah 1:
Menginputkan file hasil kompresi

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

UNIVERSITAS SUMATERA UTARA


24

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

3.2.2 Activity Diagram


Activity diagram menggambarkan aktifitas interaksi antara pengguna dan sistem
secara berurutan. Pada activity diagram menjelaskan alur aktifitas yang dilakukan
pengguna terhadap sistem yang dirancang dari awal hingga bagaimana mereka berakhir.
1. Activity Diagram proses kompresi
Activity diagram ini merupakan gambaran proses kompresi menggunakan
algoritma Shannnon Fano atau algoritma Levenstein Code yang dilakukan oleh
sistem. Activity diagram berikut dapat dilihat pada Gambar 3.4.

UNIVERSITAS SUMATERA UTARA


25

Gambar 3.4. activity diagram kompresi file

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,

UNIVERSITAS SUMATERA UTARA


26

Ratio of Compression, dan Space Saving. Terakhir, pengguna dapat menyimpan file
yang telah dikompresi.

2. Activity Diagram Proses Dekompresi


Activity diagram ini menggambarkan proses dekompresi yang dilakukan oleh
sistem. Activity diagram dekompresi dapat dilihat pada Gambar 3.5.

Gambar 3.5. Activity Diagram Dekompresi File

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

UNIVERSITAS SUMATERA UTARA


27

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.2.3. Sequence Diagram


Sequence diagram merupakan sebuah diagram yang menggambarkan interaksi
antar objek pada sistem dalam sebuah rangkaian waktu. Sequence Diagram
menggambarkan bagaimana objek saling berinteraksi didalam sebuah sistem. Interaksi
antar objek tersebut berupa perintah terhadap sistem dan juga feedback yang dihasilkan
sistem. Sequence Diagram proses kompresi untuk sistem yang dirancang pada
penelitian ini dapat dilihat pada Gambar 3.6.

Gambar 3.6. Sequence Diagram Kompresi

Sedangkan sequence diagram untuk proses dekompresi untuk sistem yang


dirancang pada penelitian ini dapat dilihat pada gambar 3.7.

Gambar 3.6. Sequence Diagram Dekompresi

UNIVERSITAS SUMATERA UTARA


28

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).

3.3.1 Flowchart Sistem


Pada penelitian ini flowchart sistem terdiri dari dua flowchart yaitu flowchart proses
kompresi dan flowchart proses dekompresi. Flowchart proses kompresi yang dapat
dilihat pada Gambar 3.8

Gambar 3.8. Flowchart Proses Kompresi

UNIVERSITAS SUMATERA UTARA


29

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.

Gambar 3.9. Flowchart Proses Dekompresi

UNIVERSITAS SUMATERA UTARA


30

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.

3.3.2 Flowchart Algoritma


Pada penelitian ini flowchart Algoritma terdiri dari dua flowchart yaitu flowchart
Algoritma Shannon Fano yang dapat dilihat pada Gambar 3.10

Gambar 3.10. Flowchart Algoritma Shannon Fano

UNIVERSITAS SUMATERA UTARA


31

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.

Gambar 3.11. Flowchart Algoritma Levenstein Code

UNIVERSITAS SUMATERA UTARA


32

Flowchart Algoritma Levenstein Code memiliki alur kerja seperti yang


ditunjukkan pada gambar 3.11. Langkah awal ialah pengguna menginisialisasikan C
sebagi 1 dan masukkan Kode Sementara pada string kosong. Lalu, ambil nilai biner n
tanpa angka awal dan masukkan ke Kode Sementara. Lalu, nyatakan M sebagai jumlah
bit yang ditambah pada tahap 2. Jika M ≠ 0, tambahkan C dengan 1 lalu alkukan langkah
2 kembali namun dengan nilai M, bukan n. Jika M =0, maka hitung kode dengan
menambahkan 1sebanyak C diikuti dengan 0 lalu tambahkan dengan Kode Sementara.

3.4. Perancangan Antarmuka (Interface)


Perancangan Antarmuka (Interface) merupakan sarana interaksi antara user dan
sistem yang berupa tampilan beserta fungsi-fungsi yang terdapat didalamnya. Hal ini
berfungsi untuk memudahkan user dalam melakukan proses sistem.
3.4.1 Rancangan Halaman Beranda
Halaman Beranda merupakan halaman yang pertama ditampilkan saat sistem
dijalankan. Didalam halaman Beranda terdapat beberapa menu untuk menjalankan
halaman lain seperti terlihat pada gambar 3.12.

3.12. Tampilan Menu Beranda

Keterangan gambar :
1. Button : untuk ke menu kompresi file
2. Button : untuk ke menu dekompresi file

UNIVERSITAS SUMATERA UTARA


33

3. Button : untuk ke menu bantuan


4. Button : untuk ke menu tentang
5. Label : untuk menampilkan judul serta identitas pembuat sistem
6. Picture Box : untuk menampilkan logo Universitas Sumatera Utara
7. Label : untuk menampilkan identitas instansi pendidikan
8. Button : untuk keluar dari program

3.4.2 Rancangan Halaman Kompresi File


Halaman kompresi file merupakan halaman dimana menu proses kompresi file
dilakukan. Pengguna dapat memasukkan file yang akan dikompresi dan memilih
algoritma kompresi file. Di menu ini juga terdapat informasi-informasi dari file yang
terkompresi seperti yang terlihat pada gambar 3.13

Gambar 3.13. Tampilan Menu Kompresi 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

UNIVERSITAS SUMATERA UTARA


34

9. Button : memproses kompresi file menggunakan algoritma


Levenstein Code
10. Progress bar : menampilkan progres dari proses kompresi file yang
sedang berjalan
11. Text Box : Menampilkan informasi file terkompresi
12. Button : untuk menyimpan file hasil kompresi
13. Group Box : untuk mengelompokkan fungsi-fungsi informasi file
Terkompresi
14. Text box : menampilkan ukuran file hasil kompresi
15. Text box : menampilkan waktu kompresi
16. Text box : menampilkan Ratio of Compression
17. Text box : menampilkan Space Saving
18. Labe : menjelaskan keterangan teks ukuran file kompresi
19. Label : menjelaskan keterangan teks waktu kompresi
20. Label : menjelaskan keterangan teks Ratio of Compression
21. Label : menjelaskan keterangan teks Space Saving
22. Button : untuk mengembalikan halaman seperti awal
23. Button : untuk kembali ke halaman beranda

3.4.3 Rancangan Halaman Dekompresi File


Halaman dekompresi file merupakan halaman dimana proses dekompresi file
dilakukan. Pengguna dapat memasukkan file yang telah terkompresi dan memilih
algoritma dekompresi file, sehingga akan muncul informasi dari file yang telah
didekompresi seperti yang terlihat pada gambar 3.14

Gambar 3.14. Tampilan Menu Dekompresi File

UNIVERSITAS SUMATERA UTARA


35

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

3.4.4 Rancangan Halaman Bantuan


Halaman Bantuan merupakan halaman dimana user dapat melihat petunjuk
penggunaan sistem apabila mengalami kesulitan seperti yang terlihat pada gambar 3.15

UNIVERSITAS SUMATERA UTARA


36

3.15. Tampilan Menu Bantuan

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

3.4.5 Rancangan Halaman Tentang


Halaman Tentang merupakan halaman dimana user dapat melihat informasi
mengenai penjelasan sistem serta informasi dari pembuat sistem seperti yang terlihat
pada gambar 3.16

UNIVERSITAS SUMATERA UTARA


37

3.16. Tampilan Menu Tentang

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

UNIVERSITAS SUMATERA UTARA


38

BAB IV

ANALISIS DAN PERANCANGAN

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.

4.1.1. Halaman Beranda


Halaman beranda merupakan halaman awal saat pengguna menjalankan program. Pada
halaman ini terdapat beberapa informasi-informasi seperti judul penelitian, logo
universitas, serta identitas pembuat sistem. Dan juga terdapat fungsi-fungsi button
untuk mengakses ke halaman lainnya. Halaman beranda dapat dilihat pada gambar 4.1.

Gambar 4.1. Halaman Beranda

UNIVERSITAS SUMATERA UTARA


39

4.1.2. Halaman Kompresi File


Halaman ini berfungsi untuk melakukan proses kompresi file video yang
diinputkan oleh pengguna dengan menggunakan algoritma Shannon Fano dan
Levenstein Code, serta menampilkan informasi file terkompresi.
Pada halaman ini terdapat button Browse yang berguna untuk memilih file dari
direktori untuk dikompresi oleh program. Selain itu juga terdapat button Shannon Fano
algorithm dan Levenstein Code algorithm untuk memilih algoritma kompresi sesuai
yang diinginkan. Lalu, ketika proses kompresi selesai maka akan muncul messageBox
yang menandakan proses kompresi telah selesai dan akan muncul informasi-informasi
dari file yang terkompresi pada textBox yang tersedia. Lalu, pengguna juga dapat
menyimpan file terkompresi dengan menekan button “Save File”. Untuk mengulang
proses kompresi dapat menekan tombol “Reset”. Halaman Kompresi File dapat dilihat
pada gambar 4.2. sedangkan Source code kompresi Shanon Fano dan Levenstein dapat
dilihat pada gambat 4.3 dan gambar 4.4.

Gambar 4.2. Halaman Kompresi File

Gambar 4.3. Source code kompresi Shannon Fano

UNIVERSITAS SUMATERA UTARA


40

Gambar 4.4. Source code kompresi Levenstein

4.1.3. Halaman Dekompresi File


Halaman ini berfungsi untuk melakukan proses dekompresi file hasil kompresi
pada halaman kompresi file serta menampilkan informasi dari file yang telah
didekompresi.
Pada halaman ini terdapat button “Browse” yang berfungsi untuk memilih file
yang telah dikompresi pada proses kompresi file. Setelah file dipilih, proses dekompresi
file dapat dilakukan dengan menekan button “Dekompresi File”. Setelah proses
dekompresi selesai, maka akan muncul messageBox yang menandakan proses
dekompresi telah selesai serta akan muncul informasi berupa waktu dekompresi pada
textBox yang tersedia. Lalu, pengguna dapat menyimpan file hasil dekompresi dengan
menekan button “Save File”. Untuk mengulang proses dekompresi dapat menekan
tombol “Reset”. Halaman Kompresi File dapat dilihat pada gambar 4.5. sedangkan
Source code dekompresi Shanon Fano dan Levenstein dapat dilihat pada gambat 4.6
dan gambar 4.7.

Gambar 4.5. Halaman Dekompresi File

UNIVERSITAS SUMATERA UTARA


41

Gambar 4.6. Source code dekompresi Shannon Fano

Gambar 4.7. Source code kompresi Levenstein

4.1.4. Halaman bantuan


Halaman ini berfungsi untuk menampilkan informasi mengenai langkah-
langkah penggunaan sistem sehingga memudahkan pengguna untuk memahami alur
penggunaan sistem. Halaman bantuan dapat dilihat pada gambar 4.8.

UNIVERSITAS SUMATERA UTARA


42

Gambar 4.8. Halaman Bantuan

4.1.5. Halaman Tentang


Halaman ini berfungsi untuk menampilkan informasi mengenai pembuat sistem.
Tampilan halaman tentang dapat dilihat pada gambar 4.9.

Gambar 4.9. Halaman Tentang

4.2. Pengujian Sistem


Pada tahap ini dilakukan pengujian terhadap sistem yang telah dibangun
berdasarkan fungsi-fungsi yang sebelumnya telah ditentukan dan bertujuan untuk
mengetahui kinerja dari masing-masing algoritma. Pada tahap pengujian sistem ini akan

UNIVERSITAS SUMATERA UTARA


43

dilakukan pengujian terhadap file dengan ekstensi *.avi. Terdapat dua proses yang akan
diuji pada tahap ini yaitu, proses kompresi file dan proses dekompresi file.

4.2.1. Pengujian Proses Kompresi File


Langkah awal yang dilakukan untuk memulai proses kompresi adalah dengan
memilih file video *.avi dengan menekan button “Browse” yang tersedia. Ketika file
video sudah terpilih, maka pada textBox akan muncul direktori dimana file video
tersebut tersimpan serta akan tampil nama dan ukuran file video tersebut pada label
yang tersedia. Seperti yang dapat dilihat pada Gambar 4.10.

Gambar 4.10. File video sebelum proses kompresi

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.

Gambar 4.11. MessageBox proses kompresi selesai

UNIVERSITAS SUMATERA UTARA


44

Lalu, setelah dikompresi maka akan muncul informasi-informasi dari file


terkompresi berupa ukuran file terkompresi, waktu kompresi, Ratio of Compression
(RC), serta Space Saving (SS) pada textBox yang tersedia. Setelah itu, pengguna dapat
menyimpan file hasil proses kompresi dengan menekan button “Save File”. Jika ingin
mengulang proses kompresi file, pengguna juga dapat menekan button “Reset”. Hasil
proses kompresi untuk algoritma Shannon Fano dapat dilihat pada Gambar 4.12, dan
untuk algoritma Levenstein Code dapat dilihat pada Gambar 4.13.

Gambar 4.12. Hasil Proses kompresi menggunakan algoritma Shannon Fano

Gambar 4.13. Hasil Proses kompresi menggunakan algoritma Levenstein Code

4.2.2 Pengujian Proses Dekompresi File


Seperti halnya pada proses sebelumnya, pada proses dekompresi file pengguna
memilih file yang akan didekompresi. Namun, file yang dapat didekomrpesi hanyalah
file hasil kompresi pada proses sebelumnya dengan ekstensi *.sf atau *.lv. Setelah itu,

UNIVERSITAS SUMATERA UTARA


45

direktori penyimpanan file akan tampil pada textBox yang tersedia. Dapat dilihat pada
gambar 4.14.

Gambar 4.14. File Video sebelum proses dekompresi

Setelah file terkompresi dipilih, selanjutnya pengguna dapat memulai proses


dekompresi dengan menekan button “Dekompresi File!”. Setelah proses dekompresi
file selesai, akan muncul messageBox yang menandakan bahwa proses telah selesai.
Dapat dilihat pada gambar 4.15.

Gambar 4.15. MessageBox proses kompresi selesai

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.

UNIVERSITAS SUMATERA UTARA


46

Gambar 4.16. Hasil proses dekompresi file

4.3. Hasil pengujian


Setelah pengujian sistem telah selesai dilakukan, selanjutnya akan dilihat algoritma
yang lebih efisien di antara Shannon Fano dan Levenstein Code dalam melakukan
kompresi dalam hal ini file video berekstensi *.avi. Hal ini dilihat berdasarkan hasil
pengujian terhadap beberapa parameter yang telah ditentukan dan akan dibandingkan
dari proses kompresi maupun dekompresi yang telah diuji menggunakan beberapa data.
Hasil pengujian dengan menggunakan algoritma Shannon Fano dan algoritma
Levenstein Code terhadap Ratio of Compression (Rc) dapat dilihat pada tabel 4.1

Tabel 4.1. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein
Code Terhadap Ratio of Compression (Rc)

UNIVERSITAS SUMATERA UTARA


47

Berdasarkan informasi pada tabel 4.1 dibuat grafik perbandingan berdasarkan


kedua algoritma berdasarkan Ratio of Compression (Rc). Grafik tersebut dibuat untuk
memudahkan melihat hasil perbandingan kedua algoritma. Grafik Rc terlihat Gambar
4.17.

Ratio of Compression (Rc)


200
150
Rc (%)

100
50
0
48,39 84,43 103,08 164,14 198,11
Ukuran File (KB)

Shannon Fano Algorithm Levenstein Algorithm

Gambar 4.17. Grafik Ratio of Compression (Rc) Terhadap Ukuran File

Berdasarkan grafik Ratio of Compression (Rc) pada Gambar 4.17 dapat


disimpulkan bahwa Ratio of Compression (Rc) hasil kompresi menggunakan
menggunakan algoritma Shannon Fano lebih baik dibandingkan dengan algoritma
Levenstein Code karena rata-rata nilai Ratio of Compression (Rc) algoritma Shannon
Fano lebih kecil.dari pada algoritma Levenstein Code.
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 yang dihasilkan jauh lebih banyak dari jumlah bit sebelum
dikompresi. Selanjutnya, Hasil pengujian dengan menggunakan algoritma Shannon
Fano dan algoritma Levenstein Code terhadap Space Saving (Ss) dapat dilihat pada
tabel 4.2.

Tabel 4.2. Hasil Pengujian Kompresi Algoritma Shannon Fano dan Levenstein Code
Terhadap Space Saving (Ss)

UNIVERSITAS SUMATERA UTARA


48

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%

Berdasarkan informasi pada tabel 4.2 dibuat grafik perbandingan berdasarkan


kedua algoritma berdasarkan Space Saving (Ss). Grafik tersebut dibuat untuk
memudahkan melihat hasil perbandingan kedua algoritma. Grafik Ss terlihat Gambar
4.18.

Space Saving (Ss)


20

0
48,39 84,43 103,08 164,14 198,11
-20
Ss (%)

-40

-60

-80
Ukuran File (KB)

Shannon Fano Algorithm Levenstein Algorithm

Gambar 4.18. Grafik Space Saving (Ss) Terhadap Ukuran File

Dari gambar 4.18 terlihat bahwa rata-rata Space Saving (Ss) hasil kompresi
menggunakan algoritma Shannon Fano lebih besar daripada algoritma Leventein. Ini

UNIVERSITAS SUMATERA UTARA


49

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

Berdasarkan informasi pada tabel 4.3 dibuat grafik perbandingan berdasarkan


kedua algoritma berdasarkan Waktu Kompresi. Grafik tersebut dibuat untuk
memudahkan melihat hasil perbandingan kedua algoritma. Grafik waktu kompresi
terlihat Gambar 4.19.

UNIVERSITAS SUMATERA UTARA


50

Waktu Kompresi
3500

Waktu Kompresi (ms)


3000
2500
2000
1500
1000
500
0
48,39 84,43 103,08 164,14 198,11
Ukuran File (KB)

Shannon Fano Algorithm Levenstein Algorithm

Gambar 4.19. Grafik Waktu Kompresi Terhadap Ukuran File

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

UNIVERSITAS SUMATERA UTARA


51

Berdasarkan informasi pada tabel 4.3 dibuat grafik perbandingan berdasarkan


kedua algoritma berdasarkan Waktu Dekompresi. Grafik tersebut dibuat untuk
memudahkan melihat hasil perbandingan kedua algoritma. Grafik waktu dekompresi
terlihat Gambar 4.20.

Waktu Dekompresi
250
Waktu Dekompresi (ms)

200

150

100

50

0
48,39 84,43 103,08 164,14 198,11
Ukuran File (KB)

Shannon Fano Algorithm Levenstein Algorithm

Gambar 4.20. Grafik Waktu Dekompresi Terhadap Ukuran File

Berdasarkan Gambar 4.16 dapat dilihat bahwa proses dekompresi file video
menggunakan algoritma Levenstein Code lebih sedikit memakan waktu dibandingkan
dengan algoritma Shannon Fano.

4.4. Kompleksitas Algoritma


Kompleksitas algoritma diperoleh dari proses analisis terhadap kode program yang
dibuat, untuk menjadi acuan dalam mengetahui real time dari algoritma yang
digunakan.

4.4.1. Kompleksitas Algoritma Shannon Fano


Kompleksitas kompresi menggunakan algoritma Shannon Fano dapat dilihat pada tabel
4.3 dibawah ini.

UNIVERSITAS SUMATERA UTARA


52

Tabel 4.5. Kompleksitas Algoritma Shannon Fano


No. Kode Program C # C*#
1 public Shannon_Fano_Encoder(List<int> toencode)
2 {
3 Dictionary<char, int> values = new Dictionary<char, C1 1 C1
int>();
4 for (int i = 0; i < toencode.Count; i++) C2 n C2n
5 {
6 char ch = Convert.ToChar(toencode[i]); C3 n C3n
7 if (!values.ContainsKey(ch)) C4 n C4n
{
values.Add(ch, 0); C5 n C5n
}
values[ch]++; C5 n C5n
}
codes = new List<Code>(); C1 1 C1
foreach (KeyValuePair<char, int> symbol in values) C6 n C6n
{
List<Char> encoded = Encode(values, C1 n C1n
symbol.Key);
String cod = ""; C7 n C7n
foreach (Char enc in encoded) C6 n2 C6n2
{
cod = cod + enc; C1 n2 C1n2
}
Code code = new Code() { Symbol = symbol.Key, C1 n C1n
code = cod };
codes.Add(code); C1 n C1n
}
message = ""; C1 1 C1
foreach (char ch in toencode) C6 n C6n
{

UNIVERSITAS SUMATERA UTARA


53

List<Char> encoded = Encode(values, ch); C1 n C1n


foreach (Char enc in encoded) C6 n2 C6n2
{
message = message + enc; C1 n2 C1n2
}
}
}
private List<Char> Encode(Dictionary<char, int>
values, char Symbol)
{
List<ShannonFanoNode> nodes = new C1 1 C1
List<ShannonFanoNode>();
foreach (KeyValuePair<char, int> symbol in values) C6 n C6n
{
nodes.Add(new ShannonFanoNode() { Symbol = C1 n C1n
symbol.Key, Frequency = symbol.Value, Code = new
List<Char>() });
}
while (nodes.Count > 1) C8 n C8n
{
nodes = nodes.OrderByDescending(node => C1 n C1n
node.Frequency).ToList<ShannonFanoNode>();
List<ShannonFanoNode> firstpart = new C1 n C1n
List<ShannonFanoNode>();
List<ShannonFanoNode> secondpart = new C1 n C1n
List<ShannonFanoNode>();
int halffrequency = (int)calculatefrequency(nodes) / C9 n C9n
2;
int position = 0; C9 n C9n
while (calculatefrequency(firstpart) < C8 n2 C8n2
halffrequency)
{

UNIVERSITAS SUMATERA UTARA


54

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
{

UNIVERSITAS SUMATERA UTARA


55

result = result + node.Frequency; C1 n C1n


}
return result; C10 1 C10
}
private bool containssymbol(List<ShannonFanoNode>
nodes, char Symbol)
{
foreach (ShannonFanoNode node in nodes) C6 n C6n
{
if (node.Symbol == Symbol) C4 n C4n
{
return true; C10 N C10n
}
}
return false; C10 1 C10
}

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

+ 2C9n + C10n + 9C1n2 + C4n2 + 5C6n2 + C8n2

T (n) = (4C1 + C9 + 3C10) n0 + (9C1 + C2 + C3 + 2C4 + 2 C5 + 4C6 + C7 + C8 +2C9

+ C10) n1 + (9C1 + C2 + C4 + 5C6 + C8) n2

T (n) = 𝜃 (n2)

Berdasarkan perhitungan diatas maka diperoleh hasil perhitungan kompleksitas


algoritma Shannon Fano adalah 𝜃 (n2).

4.4.2 Kompleksitas Algoritma Levenstein Code

UNIVERSITAS SUMATERA UTARA


56

Kompleksitas pencarian menggunakan algoritma Levenstein Code dapat dilihat pada


Tabel 4.4 berikut.

Tabel 4.6. Kompleksitas Algoritma Levenstein Code


No Kode Program C # C*#
public static void InsertionSort(int[] freq, List<int>
charset)
{
int n = charset.Count; C1 1 C1
for (int i = 1; i < n; i++) C2 n C2n
for (int j = 0; j < i; j++) C2 n2 C2n2

if (fr[i] > fr[j]) C3 n2 C3n2


{
int frtemp = fr[i]; C1 n2 C1n2
fr[i] = fr[j]; C4 n2 C4n2
fr[j] = frtemp; C4 n2 C4n2
int sbtemp = charset[i]; C1 n2 C1n2
charset[i] = charset[j]; C4 n2 C4n2
charset[j] = sbtemp; C4 n2 C4n2
}
}
public static String Reverse(String sb)
{
char[] charArray = sb.ToCharArray(); C4 1 C4
Array.Reverse(charArray); C4 1 C4
return new String(charArray); C5 1 C5
}
public static String DecToBin(int dec)
{
StringBuilder bin = new StringBuilder(); C6 1 C6
int r = dec % 2; C1 1 C1

UNIVERSITAS SUMATERA UTARA


57

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
{

UNIVERSITAS SUMATERA UTARA


58

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

UNIVERSITAS SUMATERA UTARA


59

}
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

UNIVERSITAS SUMATERA UTARA


60

List<string> list = new List<string>(s); C4 N C4n


if (list.Contains(bit.ToString())) C3 N C3n
{
int x = list.IndexOf(bit.ToString()); C1 N C1n
st.Add(c[x]); C8 N C8n
bit = new StringBuilder(); C4 n C4n
}
}
return st; C5 1 C5
}
public static String GetLevenstein(int n)
{
String Code = ""; C6 1 C6
if (n==0) C3 1 C3
Code = "0"; C4 1 C4
Else
{
int C = 1; C1 1 C1
String nbin = DecToBin(n); C6 1 C6
String kiri = nbin.Substring(0,1); C6 1 C6
String kanan = nbin.Substring(1,nbin.Length- C6 1 C6
1);
int M = kanan.Length; C1 1 C1
Code = kanan; C4 1 C4
while(M != 0) C10 n C10n
{
C++; C11 n C11n
nbin = DecToBin(M); C4 n C4n
kiri = nbin.Substring(0,1); C4 n C4n
kanan = nbin.Substring(1,nbin.Length-1); C4 n C4n
Code = kanan + Code; C4 n C4n
M = kanan.Length; C4 n C4n

UNIVERSITAS SUMATERA UTARA


61

}
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 +

4C4n2 + C7n2 + C9n2

T (n) = (14C1 + 2C3 + 11C4 + 7C5 + 11C6 + C7 + C8 + C12) n0 + (3C1 + 10C2 + 2C3 +

13C4 + C5 + 2C6 + 6C7 + 2C8 +C10

+ 2C11) n1 + (3C1 + 3C2 + 2C3 + 4C4 + C7 + C9) n2

T (n) = 𝜃 (n2)

UNIVERSITAS SUMATERA UTARA


62

Berdasarkan perhitungan diatas maka diperoleh hasil perhitungan kompleksitas


algoritma Levenstein Code adalah 𝜃 (n2).

UNIVERSITAS SUMATERA UTARA


63

BAB V

KESIMPULAN DAN SARAN

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)

UNIVERSITAS SUMATERA UTARA


A-64

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.

UNIVERSITAS SUMATERA UTARA


A-65

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.

UNIVERSITAS SUMATERA UTARA


A-66

Sayood, Khalid. 2012. Introduction To Data Compression Fourth Edition. Morgan


Kaufman Publishers: San Fransisco
Shanti Rani, M. Mary, P. Chitra, & K. Anandharaj. (2017). A Study of Various Video
Compression Techniques. Conference: 5th National conference on
Computational Methods, Communication Techniques and Informatics.
Sofyan, A.F. dan Purwanto, Agus. 2009. Digital Multimedia:Animasi, Sound Editing,
dan Video Editing. Yogyakarta: Andi

UNIVERSITAS SUMATERA UTARA


A-1

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;

UNIVERSITAS SUMATERA UTARA


A-2

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)
{

// Method tampil nama file & size file

private string GetFileSize(double byteCount)


{
string size = "0 Bytes";
if (byteCount >= 1073741824.0)
size = String.Format("{0:##.##}", byteCount /
1073741824.0) + " GB";
else if(byteCount>=1048576.0)
size = String.Format("{0:##.##}", byteCount /
1048576.0) + " MB";
else if(byteCount>=1024.0)
size = String.Format("{0:##.##}", byteCount / 1024.0)
+ " KB";
else if(byteCount>0 && byteCount<1024.0)
size = byteCount.ToString()+ " Bytes";
return size;
}

void Button3Click(object sender, EventArgs e)


{

UNIVERSITAS SUMATERA UTARA


A-3

OpenFileDialog dlg = new OpenFileDialog();

dlg.Filter = "All Media


Files|*.wma;*.wmv;*.avi;*.mpg;*.mpeg;*.mp4;*.mov;*.m4a;*.mkv;*.WMA;*.W
MV;*.AVI;*.MPG;*.MPEG;*.MP4;*.MOV;*.MKV";

if(dlg.ShowDialog() == DialogResult.OK){

string info = "";


textBox1.Text = dlg.FileName;
FileInfo file = new FileInfo(textBox1.Text);
info += Path.GetFileName (textBox1.Text);
info += Environment.NewLine;
info += GetFileSize((int)file.Length);
lblFile.Text = info;
lblFile.Refresh();

}
}

void Button4Click(object sender, EventArgs e)


{
metode = "sf";
byte[] konversi= File.ReadAllBytes(textBox1.Text);
for (int i = 0; i < konversi.Length; i++)
{
plain.Add(Convert.ToInt32(konversi[i]));
}
time.Restart();
Shannon_Fano_Encoder encoder = new
Shannon_Fano_Encoder(plain);
time.Stop();
MessageBox.Show("Berhasil dikompresi dengan Shannon
Fano");
textBox2.Text =
(Shannon_Fano_Encoder.message.Length/8000).ToString() + " KB";
double CR = ((plain.Count)* 8 * 1.0) /
Shannon_Fano_Encoder.message.Length;
double RC =
(Shannon_Fano_Encoder.message.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";

}
void Button6Click(object sender, EventArgs e)
{
metode = "lv";
byte[] konversi= File.ReadAllBytes(textBox1.Text);
for (int i = 0; i < konversi.Length; i++) {

UNIVERSITAS SUMATERA UTARA


A-4

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";
}

void Button5Click(object sender, EventArgs e)


{
if (metode == "lv")
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "Compressed Files( *.lv)|*.lv";
simpan.FileName = "*.lv";
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);
for(int i=0; i<code.Count; i++)
{
sw.WriteLine(code[i]);
}
sw.Flush();
sw.Close();
string
filenamee=simpan.FileName.Substring(0,simpan.FileName.Length- 3) +
"l.dat";
FileStream fstreamm=new
FileStream(filenamee,FileMode.OpenOrCreate);
StreamWriter sww = new StreamWriter(fstreamm);
SeekOrigin seekoriginn = new SeekOrigin();
sww.BaseStream.Seek(0, seekoriginn);
sww.WriteLine(Levenstein.ch.Count);
StringBuilder stbnya = new StringBuilder();
for(int i=0; i<Levenstein.ch.Count; i++)
{
stbnya.Append(Levenstein.ch[i]+"~");
}

UNIVERSITAS SUMATERA UTARA


A-5

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;

UNIVERSITAS SUMATERA UTARA


A-6

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;
}

UNIVERSITAS SUMATERA UTARA


A-7

}
}

private List<Char> Encode(Dictionary<char, int> values, char


Symbol)
{
List<ShannonFanoNode> nodes = new
List<ShannonFanoNode>();
foreach (KeyValuePair<char, int> symbol in values)
{
nodes.Add(new ShannonFanoNode() { Symbol =
symbol.Key, Frequency = symbol.Value, Code = new List<Char>() });
}
while (nodes.Count > 1)
{
nodes = nodes.OrderByDescending(node =>
node.Frequency).ToList<ShannonFanoNode>();
List<ShannonFanoNode> firstpart = new
List<ShannonFanoNode>();
List<ShannonFanoNode> secondpart = new
List<ShannonFanoNode>();
int halffrequency = (int)calculatefrequency(nodes) /
2;
int position = 0;
while (calculatefrequency(firstpart) < halffrequency)
{
firstpart.Add(nodes[position]);
position++;
}
for (int i = position; i < nodes.Count; i++)
{
secondpart.Add(nodes[i]);
}
foreach (ShannonFanoNode node in firstpart)
{
node.Code.Add('0');
}
foreach (ShannonFanoNode node in secondpart)
{
node.Code.Add('1');
}
if (containssymbol(firstpart, Symbol))
{
nodes = firstpart;
}
else
{
nodes = secondpart;
}
}
return nodes[0].Code;
}

private int calculatefrequency(List<ShannonFanoNode> nodes)

UNIVERSITAS SUMATERA UTARA


A-8

{
int result = 0;
foreach (ShannonFanoNode node in nodes)
{
result = result + node.Frequency;
}
return result;
}

private bool containssymbol(List<ShannonFanoNode> nodes, char


Symbol)
{
foreach (ShannonFanoNode node in nodes)
{
if (node.Symbol == Symbol)
{
return true;
}
}
return false;
}
}
}

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

UNIVERSITAS SUMATERA UTARA


A-9

{
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;
}
}

public static String Reverse(String sb)


{
char[] charArray = sb.ToCharArray();
Array.Reverse(charArray);
return new String(charArray);
}

public static String DecToBin(int dec)


{
StringBuilder bin = new StringBuilder();
int r = dec % 2;
bin.Insert(0, r);
dec = dec / 2;
while (dec != 0)
{
r = dec % 2;
bin.Insert(0, r);
dec = dec / 2;
}
return bin.ToString();
}

public static int BinToDec(String bin)


{
StringBuilder sb = new StringBuilder(Reverse(bin));
int n = 1;
int dec = 0;
for (int i = 0; i < sb.Length; i++)
{
dec = dec + (int)(Char.GetNumericValue(sb[i])) * n;
n = n * 2;
}
return dec;
}

UNIVERSITAS SUMATERA UTARA


A-10

// converts strings into stringbits


public static String StringToStb(List<int> st, List<int>
c, String[] s)
{
StringBuilder stb = new StringBuilder();
for (int i = 0; i < st.Count; i++)
{
for(int j=0; j<c.Count; j++)
{
if(c[j]==st[i])
{
int k = j;
stb.Append(s[k]);
}
}
}
int x = stb.Length % 8;
int pad = 0;
if (x != 0)
{
pad = 8 - x;
for (int i = 0; i < pad; i++)
stb.Append("0");
}
String d = DecToBin(pad);
int y = 8 - d.Length;
for (int i = 0; i < y; i++)
stb.Append("0");
stb.Append(d);
return stb.ToString();
}

public static List<int> Encode(String stb)


{
List<int> code = new List<int>();
for (int i = 0; i < stb.Length; i+= 8)
{
String x = stb.Substring(i, 8);
int y = (BinToDec(x));
code.Add(y);
}
return code;
}

public static String Decode(List<int> code)


{
StringBuilder sb = new StringBuilder();
int t = code.Count;
for (int i = 0; i < t; i++)
{
StringBuilder y = new
StringBuilder(DecToBin(code[i]));
if (y.Length < 8)
{
int z = 8 - y.Length % 8;
for (int j = 0; j < z; j++)

UNIVERSITAS SUMATERA UTARA


A-11

y.Insert(0, "0");
}
sb.Append(y);
}
return sb.ToString();
}

public static List<int> Decompress(String stb, List<int>


c, String[] s)
{
List<int> st = new List<int>();
StringBuilder bit = new StringBuilder();
StringBuilder stb2;
int t = stb.Length;
int pad = BinToDec(stb.Substring(t - 8, 8));
stb2 = new StringBuilder(stb.Substring(0, t - pad -
8));
for (int i = 0; i < stb2.Length; i++)
{
bit.Append(stb2[i]);
List<string> list = new List<string>(s);
if (list.Contains(bit.ToString()))
{
int x = list.IndexOf(bit.ToString());
st.Add(c[x]);
bit = new StringBuilder();
}
}
return st;
}

public static String GetLevenstein(int n)


{
String Code = "";
if (n==0)
Code = "0";
else
{
int C = 1;
String nbin = DecToBin(n);
String kiri = nbin.Substring(0,1);
String kanan = nbin.Substring(1,nbin.Length-1);
int M = kanan.Length;
Code = kanan;
while(M != 0)
{
C++;
nbin = DecToBin(M);
kiri = nbin.Substring(0,1);
kanan = nbin.Substring(1,nbin.Length-1);
Code = kanan + Code;
M = kanan.Length;
}
Code = "0" + Code;
for(int j=0; j<C; j++)
Code = "1" + Code;

UNIVERSITAS SUMATERA UTARA


A-12

}
return Code;
}

public static void LevensteinCodes(List<int> st)


{
init(st);
int t = ch.Count;
lv = new String[t];
int c = 0;
for (int n = 0; n < t; n++)
{
lv[c] = GetLevenstein(n);
c++;
}
}

public static bool cek(int x)


{
for(int i=0; i<ch.Count; i++)
{
if(ch[i] == x)
return false;
}
return true;
}

public static void freq(int x)


{
for(int i=0; i<ch.Count; i++)
{
if(ch[i] == x)
fr[i]++;
}
}

public static void init(List<int> st)


{
ch.Clear();
for(int i=0; i<st.Count; i++)
{
if(cek(st[i]))
ch.Add(st[i]);
}

fr = new int[ch.Count];
for(int i=0; i<ch.Count;i++)
fr[i] = 0;

for(int i=0; i<st.Count; i++)


{
freq(st[i]);
}
InsertionSort(fr,ch);
}

UNIVERSITAS SUMATERA UTARA


A-13

}
}

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")

UNIVERSITAS SUMATERA UTARA


A-14

{
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('~');

UNIVERSITAS SUMATERA UTARA


A-15

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());
}

UNIVERSITAS SUMATERA UTARA


A-16

}
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>();

UNIVERSITAS SUMATERA UTARA


A-17

public Decoder(List<Code> codes, String message)


{
List<char> chars = new List<char>();
foreach (char ch in message)
{
chars.Add(ch);
}
String cod = "";
while (chars.Count > 0)
{
cod = cod + chars[0];
chars.RemoveAt(0);
foreach(Code code in codes)
{
if(code.code == cod)
{
hasil.Add(Convert.ToInt32(code.Symbol));
cod = "";
break;
}
}
}
}
}
}

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)
{
}
}
}

UNIVERSITAS SUMATERA UTARA


A-18

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)
{
}
}
}

UNIVERSITAS SUMATERA UTARA


A-19
B-1
B-1

CURRICULUM VITAE

Nama Lengkap : Muhammad Reza Prasetio


Nama Panggilan : Reza
Tempat/Tanggal Lahir : Lhokseumawe / 06 Mei 1996
Jenis Kelamin : Pria
Agama : Islam
Warga Negara : Indonesia
Alamat : Jl. Melati Raya Komplek Grand
Pavilion no.110, Medan Selayang,
Medan, Sumatera Utara
Mobile Phone : 089515221161
E-mail : mhdrezaprasetyo@gmail.com

PENDIDIKAN

Perguruan Tinggi
Universitas Sumatera Utara
Fakultas Ilmu Komputer dan Teknologi Informasi
Program Studi S1 Ilmu Komputer
IPK 3.6
2015 - Sekarang

Sekolah Menengah Atas


SMA Negeri 1 Lhokseumawe
2011-2014

Sekolah Menengah Pertama


SMP Negeri 1 Lhokseumawe
2009-2011

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

UNIVERSITAS SUMATERA UTARA


A-20
B-2

PENGALAMAN PELATIHAN

No. Pelatihan Tahun


1. Pelatihan Desain Grafis Kompetitif IMILKOM USU 2016
2. Pelatihan Dasar Organisasi IMILKOM 2016
3. Leadership Training IMIKOM 2017

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

No. Seminar Tahun


1. Seminar What will you be 2015
2. Seminar Technologreen 2016
Seminar Nasional Melalui Inovasi Teknologi untuk
3. 2016
Menciptakan Mahasiswa Kreatif dan Mandiri
4. Artechno 2017 2017

UNIVERSITAS SUMATERA UTARA

Anda mungkin juga menyukai