huffman kodu

19
BIL 236 PROGRAMLAMA LABORATUVARI 5. ÖDEV 16.04.2009 Yiğitcan Aksarı - Nisan 2009 1 Huffman Kodu

Upload: yigitcan-aksari

Post on 08-Jul-2015

1.468 views

Category:

Documents


4 download

DESCRIPTION

Daha fazla detay alttaki adreste bulunabilir;http://www.yaksari.com/2009/04/huffman-kodu-veri-sikistirmanin-temelleri/

TRANSCRIPT

Page 1: Huffman kodu

B I L 2 3 6 – P R O G R A M L A M A L A B O R A T U V A R I

5 . Ö D E V

16.04.2009Yiğitcan Aksarı - Nisan 2009

1

Huffman Kodu

Page 2: Huffman kodu

Huffman Kodu Nedir?

16.04.2009Yiğitcan Aksarı - Nisan 2009

2

Huffman Kodu, veri sıkıştırma için kullanılan kayıpsız bir algoritmadır.

David A. Huffman tarafından 1952 yılında bulunmuştur.

Pek çok güncel sıkıştırma algoritması tarafından kullanılır. Örn: MP3, JPEG...

Page 3: Huffman kodu

8 bit sınır mı?

16.04.2009Yiğitcan Aksarı - Nisan 2009

3

ASCII, 8 bit

29 farklı karakter 5 bit ile kodlanabilir.

5/8 = %62,5 sıkıştırma

Sabit sayıda bit ile kodlamaya ihtiyacımız var mı?

Page 4: Huffman kodu

Morse Kodu

16.04.2009Yiğitcan Aksarı - Nisan 2009

4

Page 5: Huffman kodu

Kod kelimelerinin devamlılığı

16.04.2009Yiğitcan Aksarı - Nisan 2009

5

Sık kullanılan harfler için kısa kod kelimeleri kullanılmıştır.

Fakat

Bağlama göre sıklıklar değişebilmektedir. Örn: Türkçe, İngilizce, ses kütüğü, görüntü kütüğü, vs...

Kod kelimeleri aralarında bekleme olmaksızın ayırd edilememektedir. Neden?

Page 6: Huffman kodu

Morse Kodu’nda belirsizlik

16.04.2009Yiğitcan Aksarı - Nisan 2009

6

Olası belirsizlikler•ATT•ETTT•WT

Page 7: Huffman kodu

Huffman’ın önerileri

16.04.2009Yiğitcan Aksarı - Nisan 2009

7

Bağlama göre sıklık belirlenmesi

Aralarında boşluk olmadan kullanılabilen kod kelimeleri (önek ağacı)

Örn: Telefon numaraları

+90 Türkiye

312 Ankara

• 297 Beytepe

7500 Bilgisayar Mühendisliği Bölümü

Page 8: Huffman kodu

Huffman Ağacı

16.04.2009Yiğitcan Aksarı - Nisan 2009

8

Bu yapıda dallar takip edildikçe kod sözcüğü oluşmaktadır.

Page 9: Huffman kodu

Algoritma

16.04.2009Yiğitcan Aksarı - Nisan 2009

9

Karakterlerin sıklıkları bulunur ve bir öncelik kuyruğuna konulur.

En düşük sıklığa sahip iki düğüm yeni bir düğümün çocukları olmak üzere kuyruktan alınır.

Yeni oluşturulan düğüm kuyruğa eklenir.

Kuyrukta bir adet düğüm kalana kadar bu işleme devam edilir

Page 10: Huffman kodu

Örnek

16.04.2009Yiğitcan Aksarı - Nisan 2009

10

Elimizde sıkıştırılması istenen alttaki katarın olduğunu varsayalım;

aaaabbbccddddeeefa

Bu katardaki karakter sıklıkları hesaplandığında;

f = 1, c = 2, b = 3, e = 3, d = 4, a = 5

ASCII olarak tutulduğunda bu katar toplam 18 * 8 = 144 bayt yer kaplamaktadır.

Page 11: Huffman kodu

Örnek – 1. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

11

En küçük sıklıklı iki düğüm f ve c tek bir düğüm altında birleştirilir.

Yeni oluşturulan fc düğümünün sıklığı; f ve c’nin toplam sıklığı olur.

Page 12: Huffman kodu

Örnek – 2. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

12

Sıradaki en küçük sıklıklı b ve fc birleştirilir.

Önceki adımda oluşturulan fc düğümü tekrardan listeye eklenmiştir. Bu düğümlere farklı bir davranış yoktur. Normal düğümlerle aynı şekilde ele alınırlar.

Page 13: Huffman kodu

Örnek – 3. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

13

En düşük sıklıklı iki düğüm önceden oluşturulmuş ağaçtan bağımsız olabilir. Tekrardan bu iki düğümün birleştirilmesi ile oluşturulan düğüm listeye ekleneceğinden veri kaybı olmaz.

Page 14: Huffman kodu

Örnek – 4. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

14

Page 15: Huffman kodu

Örnek – 5. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

15

Page 16: Huffman kodu

Örnek – 6. Adım

16.04.2009Yiğitcan Aksarı - Nisan 2009

16

Son birleştirme de gerçekleştirildiğinde dallara değerleri atandığında artık ağacımızda hangi karakterin kodunun ne olduğunu bulabiliriz.

Bu örnekte; e: 00 d: 01 a: 10 b: 111 f: 1100 c: 1101

Page 17: Huffman kodu

Sonuç

16.04.2009Yiğitcan Aksarı - Nisan 2009

17

Sık olan karakterler üst dallarda, seyrek olanlar alt dallarda.

Sıkıştırmadan önce

144 bit (18 * 8 bit)

Huffman kodu

45 bit (sıklık * kod sözcüğü uzunluğu) yer

Sıkıştırma oranı

45 / 144 = %31

a: 10 sıklık: 5

d: 01 sıklık: 4

e: 00 sıklık: 3

b: 111 sıklık: 3

c: 1101 sıklık: 2

f: 1100 sıklık: 1

Page 18: Huffman kodu

Sıkıştırmayı açmak

16.04.2009Yiğitcan Aksarı - Nisan 2009

18

• Örneğin elimizde girdi katarımızın “abbbccd” kısmını çevirdiğimizi düşünelim.

• Bu kısmın Huffman kodu ile ifadesi şöyledir; “101111111111101110101”

• İlk karakterden başlayıp yolları takip ettiğimizde; 1 -> abfc

0 -> a (hiç çocuğu yok, köke dön)

1 -> abfc

1 -> bfc

1 -> b (hiç çocuğu yok, köke dön)

Page 19: Huffman kodu

T E Ş E K K Ü R L E R . . .

16.04.2009Yiğitcan Aksarı - Nisan 2009

19

Sorularınız