Anda di halaman 1dari 12

IMPLEMENTASI METODE

KOMPRESI LZMA PADA


MATLAB
GEDE HARI YOGISWARA | (1101110031)
PUTU DEBBY WANANDA | (1101110170)
DEWA GEDE EDUARD PRAMANA MORTON | (1101114287)

File adalah data yang berbentuk informasi informasi bisa


berupa text, image, voice, ataupun video. Penyimpanan file
secara terus menerus akan menyebabkan penumpukan data
yang tidak terhingga, sehingga diperlukan teknik kompresi data
untuk memampatkan penyimpanan file file tersebut[1].

LZMA (Lempel-Ziv-Markov Chain-Algorithm) teknik kompresi data


yang dapat memampatkan suatu file. Teknik LZMA (Lempel-ZivMarkov Chain-Algorithm) ini merupakan pembaharuan dari teknik
LZ77 dan tidak lepas dari tujuan mengkompresi data yaitu
mengurangi waktu dalam pengiriman data.

Pada penelitian sebelumnya, teknik LZMA ini sudah diaplikasikan


dalam software pemrograman C++ dengan mengkompresi
sebuah file. Dalam jurnal ini, penulis akan mengimplementasikan
teknik kompresi data LZMA ini pada software pemrograman
Matlab untuk mengkompresi sebuah text.

Algoritma LZMA
Lzma adalah teknik pemampatan data yang merupakan pembaruan
dari LZ77. Lzma termasuk metode lossless yang memampatkan
data tanpa menghilangkan bagian apapun ketika dikembalikan ke
data aslinya. Dalam kompresi LZMA, aliran dikompresi adalah aliran
bit, dikodekan menggunakan biner adaptif rentang coder. Aliran ini
dibagi menjadi paket-paket, setiap paket menggambarkan baik satu
byte, atau urutan LZ77 dengan panjang dan jarak implisit atau
eksplisit dikodekan akan overflow, selain itu kompresi diciptakan
untuk mengurangi waktu dan biaya dalam pengiriman data
terutama melalui media internet.

Proses kompresi LZMA adalah


sebagai berikut :
1. Sebuah dictionary yang dipakai mempunyai satu buffer simbol yang
terbagi dalam dua bagian dictionary buffer dan lookaheadbuffer.
a. Dictionary buffer, menyimpan l1 rangkaian huruf yang sudah dikodekan
dari input.
b. Lookahead buffer, menyimpan l2 rangkaian huruf yang akan dikodekan

2. Untuk proses inisialisasi awal kompresi, dictionary buffer diisi dengan


huruf pertama dari rangkaian huruf yang akan dikompresi.
3. Pada setiap literasi carilah sepanjang mungkin rangkaian huruf di
dictionary buffer yang matching dengan prefix pada lookahead buffer.
Jika match ditemukan, maka output yang dihasilkan berbentuk
token/triple (p,l) s. Dimana :
a. p(offset) posisi match ditemukan atau letak indexnya. Ukuran p=2
bit.
b. l(length) panjang rangkaian huruf yang match dengan dictionary
buffer. Ukuran l=2 bit.
c. s(symbol) huruf selanjutnya yang akan dibaca pada lookahead buffer.
Ukuran s= 8 bit. Sehingga untuk setiap satu literasi akan menghasilkan
sebuah kode yang besarnya 12 bit.
4. Setiap satu proses literasi selesai, keselurahan buffer digeser kekiri
sepanjang l ditambah 1, selanjutnya rangkaian kata baru digeser masuk.

Encoding

Input
STE
P

Misalkan string KODING KOMPRESI , maka akan dibentuk search


buffer dan lookahed buffer untuk menghasilkan output.
Pertama adalah proses inisialisasi. Ambil data pertama dari tabel
yang berisi data karakter K. Karena dictionary masih kosong dan
tidak ada data yang tersimpan maka match(p)=0, panjang data
yang match (l)=0, dan data berikutnya yang akan masuk ke
dictionary adalah K, sehingga output yang dihasilkan (0,0,K).

K|ODING_KOMPRESI

Karakter berikutnya O dilakukan proses match dan tidak


ditemukan
pada
dictionary
maka
match(p)=0,
panjang
data(length) yang match (l)=0, dan data berikutnya yang akan
masuk ke dictionary adalah O, sehingga output yang dihasilkan
(0,0,O).

K|O|DING_KOMPRESI

Karakter berikutnya D dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data yang
match (l)=0, dan data berikutnya yang akan masuk dictionary
adalah D sehingga output yang dihasilkan (0,0,D).

K|O|D|ING_KOMPRESI

10

11

12

Dictionary buffer

Lookahead buffer
KODING_KOMPRESI
K ODING_KOMPRESI

KO DING_KOMPRESI

Outpu
t
(P,L,sy
mbol)
(0,0,K)
(0,0,O)
(0,0,D)

KOD ING_KOMPRESI

(0,0,I)

KODI NG_KOMPRESI

(0,0,N)

KODIN G_KOMPRESI
KODING _KOMPRESI
KODING_ KOMPRESI
KODING_KOM PRESI
KODING_KOMP RESI
KODING_KOMPR ESI
KODING_KOMPRE SI

13

KODING_KOMPRES I

14

KODING_KOMPRESI

(0,0,G)
(0,0,_)
(7,2,M)
(0,0,P)
(0,0,R)
(0,0,E)
(0,0,S)
(11,0,I)
-

Encoding

Input
STE
P

Karakter berikutnya I dilakukan proses match dan tidak ditemukan


pada dictionary maka match(p)=0, panjang data yang match (l)=0,
dan data berikutnya yang akan masuk dictionary adalahI sehingga
output yang dihasilkan (0,0,I).

K|O|D|I|NG_KOMPRESI

Karakter berikutnya N dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data yang
match (l)=0, dan data berikutnya yang akan masuk dictionary
adalah N sehingga output yang dihasilkan (0,0,N).

K|O|D|I|N|G_KOMPRESI

Karakter berikutnya G dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data yang
match (l)=0, dan data berikutnya yang akan masuk dictionary
adalah G sehingga output yang dihasilkan (0,0,G).

K|O|D|I|N|G|_KOMPRESI

Karakter berikutnya spasi _ dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data yang
match (l)=0, dan data berikutnya yang akan masuk dictionary
adalah _ sehingga output yang dihasilkan (0,0,_).

10

11

12

Dictionary buffer

Lookahead buffer
KODING_KOMPRESI
K ODING_KOMPRESI

KO DING_KOMPRESI

Outpu
t
(P,L,sy
mbol)
(0,0,K)
(0,0,O)
(0,0,D)

KOD ING_KOMPRESI

(0,0,I)

KODI NG_KOMPRESI

(0,0,N)

KODIN G_KOMPRESI
KODING _KOMPRESI
KODING_ KOMPRESI
KODING_KOM PRESI
KODING_KOMP RESI
KODING_KOMPR ESI
KODING_KOMPRE SI

13

KODING_KOMPRES I

14

KODING_KOMPRESI

(0,0,G)
(0,0,_)
(7,2,M)
(0,0,P)
(0,0,R)
(0,0,E)
(0,0,S)
(11,0,I)
-

Encoding

Input
STE
P

K|O|D|I|N|G|_|KOMPRESI
Karakter berikutnya K dilakukan proses match dan ditemukan
pada dictionary yang terletak pada index 7 maka match(p)=
7, panjang data yang match (l)=2, dan data berikutnya yang
akan masuk adalah M sehingga output yang dihasilkan
(7,2,M), huruf M diikutkan sebagai dictionary baru KOM.

K|O|D|I|N|G|_|KOM|PRESI

Karakter berikutnya P dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data
yang match (l)=0, dan data berikutnya yang akan masuk
dictionary adalah P sehingga output yang dihasilkan (0,0,P).

K|O|D|I|N|G|_|KOM|P|RESI

Karakter berikutnya R dilakukan proses match dan tidak


ditemukan pada dictionary maka match(p)=0, panjang data
yang match (l)=0, dan data berikutnya yang akan masuk
dictionary adalah R sehingga output yang dihasilkan (0,0,R).

K|O|D|I|N|G|_|KOM|P|R|ESI

10

11

12

Dictionary buffer

Lookahead buffer
KODING_KOMPRESI
K ODING_KOMPRESI

KO DING_KOMPRESI

Outpu
t
(P,L,sy
mbol)
(0,0,K)
(0,0,O)
(0,0,D)

KOD ING_KOMPRESI

(0,0,I)

KODI NG_KOMPRESI

(0,0,N)

KODIN G_KOMPRESI
KODING _KOMPRESI
KODING_ KOMPRESI
KODING_KOM PRESI
KODING_KOMP RESI
KODING_KOMPR ESI
KODING_KOMPRE SI

13

KODING_KOMPRES I

14

KODING_KOMPRESI

(0,0,G)
(0,0,_)
(7,2,M)
(0,0,P)
(0,0,R)
(0,0,E)
(0,0,S)
(11,0,I)
-

Encoding

Input
STE
P

Karakter berikutnya E dilakukan proses match dan tidak ditemukan


pada dictionary maka match(p)=0, panjang data yang match (l)=0,
dan data berikutnya yang akan masuk dictionary adalah E sehingga
output yang dihasilkan (0,0,E).

K|O|D|I|N|G|_|KOM|P|R|E|SI

Karakter berikutnya S dilakukan proses match dan tidak ditemukan


pada dictionary maka match(p)=0, panjang data yang match (l)=0,
dan data berikutnya yang akan masuk dictionary adalah S sehingga
output yang dihasilkan (0,0,S).

K|O|D|I|N|G|_|KOM|P|R|E|S|I

Karakter berikutnya I dilakukan proses match dan ditemukan pada


dictionary yang terletak pada index 11 maka match(p)= 11,
panjang data yang match (l)=0, dan data berikutnya yang akan
masuk adalah I sehingga output yang dihasilkan (11,0,I).

Dikarenakan karakter sudah habis maka output terakhir adalah


(0,0,0). Setelah semua proses encoding selesai didapatkan hasil
output untuk kompresi data sebagai berikut :
(0,0,K), (0,0,O), (0,0,D), (0,0,I), (0,0,N), (0,0,G), (0,0,_), (7,2,M),
(0,0,P), (0,0,R) (0,0,E) (0,0,S) (11,0,I)

10

11

12

Dictionary buffer

Lookahead buffer
KODING_KOMPRESI
K ODING_KOMPRESI

KO DING_KOMPRESI

Outpu
t
(P,L,sy
mbol)
(0,0,K)
(0,0,O)
(0,0,D)

KOD ING_KOMPRESI

(0,0,I)

KODI NG_KOMPRESI

(0,0,N)

KODIN G_KOMPRESI
KODING _KOMPRESI
KODING_ KOMPRESI
KODING_KOM PRESI
KODING_KOMP RESI
KODING_KOMPR ESI
KODING_KOMPRE SI

13

KODING_KOMPRES I

14

KODING_KOMPRESI

(0,0,G)
(0,0,_)
(7,2,M)
(0,0,P)
(0,0,R)
(0,0,E)
(0,0,S)
(11,0,I)
-

Decoding

Dalam melakukan decoding, awalnya dapat diketauhi bahwa karakter


pertama adalah K karena output pertama dari encoding (0,0,K). Pada
index dictionary dilakukan pengisian karakter K.

Kemudian pada input kedua (0,0,O) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah O.

KO

Kemudian pada input ketiga (0,0,D) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah D.

KOD

Kemudian pada input ketiga (0,0,I) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah I.

KODI

Kemudian pada input ketiga (0,0,N) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah N.

STE
P
1

Input

Output

(0,0,K)

(0,0,O)

KO

(0,0,D)

KOD

(0,0,I)

KODI

(0,0,N)

KODIN

(0,0,G)

KODING

(0,0,_)

KODING_

(7,2,M)

KODING_KOM

9
10

(0,0,P)
(0,0,R)

KODING_KOMP
KODING_KOMPR

11

(0,0,E)

KODING_KOMPRE

12

(0,0,S)

KODING_KOMPRES

13

(11,0,I)

KODING_KOMPRESI

KODIN

Decoding
STE
P
1

Input

Output

(0,0,K)

Kemudian pada input ketiga (0,0,G) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah G.

(0,0,O)

KO

KODING

(0,0,D)

KOD

Kemudian pada input ketiga (0,0,_) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah _.

(0,0,I)

KODI

KODING_

(0,0,N)

KODIN

Kemudian pada input ketiga (7,2,M) offset bernilai 7 yang artinya


terdapat karakter yang sama pada index ke 7 pada dictionary yaitu
karakter 'K dan length bernilai 2 lalu length bernilai 1 maka akan dicopy karakter K dan karakter setelahnya sebanyak 2 karakter ke
kanan diikuti simbol M. Output yang dihasilkan KOM.

(0,0,G)

KODING

(0,0,_)

KODING_

(7,2,M)

KODING_KOM

9
10

(0,0,P)
(0,0,R)

KODING_KOMP
KODING_KOMPR

KODING_KOM

Kemudian pada input ketiga (0,0,P) offset dan length bernilai 0 maka
dapat ditentukan karakter kedua adalah P.

11

(0,0,E)

KODING_KOMPRE

KODING_KOMP

12

(0,0,S)

KODING_KOMPRES

13

(11,0,I)

KODING_KOMPRESI

Decoding
STE
P
1

Input

Output

(0,0,K)

Kemudian pada input ketiga (0,0,R) offset dan length bernilai 0


maka dapat ditentukan karakter kedua adalah R.

(0,0,O)

KO

KODING_KOMPR

(0,0,D)

KOD

Kemudian pada input ketiga (0,0,E) offset dan length bernilai 0


maka dapat ditentukan karakter kedua adalah E.

(0,0,I)

KODI

(0,0,N)

KODIN

(0,0,G)

KODING

(0,0,_)

KODING_

(7,2,M)

KODING_KOM

9
10

(0,0,P)
(0,0,R)

KODING_KOMP
KODING_KOMPR

11

(0,0,E)

KODING_KOMPRE

12

(0,0,S)

KODING_KOMPRES

13

(11,0,I)

KODING_KOMPRESI

KODING_KOMPRE

Kemudian pada input ketiga (0,0,S) offset dan length bernilai 0


maka dapat ditentukan karakter kedua adalah S.

KODING_KOMPRES

Kemudian pada input (11,0,I) offset bernilai 11 yang artinya


terdapat karakter yang sama dengan index 11 pada
dictionary yaitu I lalu length bernilai 0 maka akan di-copy
karakter I sebanyak 1 karakter ke arah kanan, output yang
dihasilkan I.

Anda mungkin juga menyukai