dinamik huffman yöntemi nedir?

demir12
18-10-2010, 19:57   |  #1  
OP Yeni Üye
Teşekkür Sayısı: 0
40 mesaj
Kayıt Tarihi:Kayıt: Tem 2008

ya muh34 şöyle bir problem var..şimdi huffman algoritmasını dosyaya yazarken farkettim.. huffmanı uygulasamda dataları nasıl acıcam..şimdi bitleri huffman ile karıştırmadan yapraklara aldık..huffman koduna ceviridk tersini yaptık diyelim yani huffman kodunu cözdük bizim sıkıştırılmış veri yine yanyana yazılmayacakmı yani eş zamanlı okumadıgımız icin yine karışıyo

1)bizim algoritmaya göre bitleri sıkıştır.
2)huffman agacına aynı anda ekle dataları karıştırma
3)huffman agacını cöz..sıkıştırılan degeri yaz.
4)ama sıkıştırılan deger sırası kaybolursa yani yine acıldıktan sonradirek yazılırsa tekrar okumuyor yani acıldıgı sıraya göre bizim algoritmaya göre yazılmalı

bunu sanırım dinamik huffman cözüyor ama onu anlamadım

.bunun icin aşagıdaki soruyu sordum..bi yardımcı olursan bu konuda...

arkadaşlar biri bana dinamik huffman algoritması nedir nasıl çalışır bileniniz varsa yardımcı olursanız cok sevinirim..ingilizce kaynakalardan tam anlayamadım...aşagıda güzel özetlemiş..ama sonra okunma yapıldıgındada dinamik olarak mı çalışıyor?

türkce bir sitede özet acıklama:

" Diğer bir teknik olan Dinamik Huffman tekniğinde sıkıştırma yapmak için frekans tablosuna önceden ihtiyaç duyulmaz. Frekans tablosu her bir sembolle karşılaştıkça dinamik olarak oluşturulur. Dinamik Huffman tekniği daha çok haberleşme kanalları gibi hangi verinin geleceği önceden belli olmayan sistemlerde kullanılmaktadır. Bilgisayar sistemlerindeki dosyaları sıkıştırmak için statik huffman metodu yeterlidir. Nitekim bir dosyayı baştan sona tarayarak herbir sembolün hangi sıklıkla yer aldığını tespit edip frekans tablosunu elde etmemiz çok basit bir işlemdir."

yani sorum şu huffman agacı burda dinamik olarak oluşturuluyor ya;

yani hem o deger okunuyor aynı anda dügüm oluşturulup agaca yazılıyor...peki acılırkende dinamik olarak mı okunuyor..yani degeri dinamik olarak mı üretiyor..yoksa dinamik olarak dosyaya kaydedeilip statik olarak mı okunuyor..

örnegin sırayla degerler var dinamik olarak huffmana alınıyor..

verilerin ayrı zamanlarda sırayla geldigini düşünün
1. 2. 3. 4. 5. 6. 7.

daha sonra huffman decoding yapılacak fakat 1.gönderilip daha sonra 2.gönderilecek yani 1. ve 2. aynı anda gönderilmeyecek...

böyle birşey mi dinamik huffman...sanırım bu konuda ne demek istedigimi anlatabilmişimdir...

bu konuda araştırma yaptım ama yabancı kaynaklardan pek birşey anlamdım..yardımcı olursanız sevinirim.

demir12
19-10-2010, 12:22   |  #2  
OP Yeni Üye
Teşekkür Sayısı: 0
40 mesaj
Kayıt Tarihi:Kayıt: Tem 2008

bilen yok galiba...

muh34
19-10-2010, 17:45   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Bilgisayar biliminde 'dinamik' metot çalışma anını(run time) tanımlayan bir kelimedir.Şayet bir sistem dinamik olarak oluşturuluyor ise,sistemin çalışması programın hangi durumda ne yaptıgını betimler.Sizin sorunuzda bir agaca eklenen verinin o anda hangi sifreyi uretmesi gerektigini dinamik huffman metodu saglamaktadır.Dosya'ya kayıt işlemi,dinamik olarak oluşturulan huffman agacının dugumleri(node) icerisindeki şifrelerin aktarımı ile saglanır.Ancak dosyadan veri cekme işlemi tamamiyle bir statik durumdur.Cunku daha onceden var olan bir data grubu dosyadan cekilecektir.Program her calistirildiginda dosya icerisindeki veriler agaca monte edilerek,yeni olusturulacak mesaj icin huffman agacı,icerisinde var olan eski sifrelere gore urettigi yeni bir sifreyi eklenen kelimeye uyarlayacaktır.Bu durum C++ programlama dilinde bulunan vector sınıfı ile bagdastırılabilir.Nitekim,diziye(array) her eklenen eleman dogrultusunda dizinin uzunlugu ortam kosullarına gore degisecektir.Bu sayede dinamik bir metot olusturulmus olur.Ayrıca,bu duruma baglı liste(link list),yigin(stack) ve kuyruk(queue) veri modelleride ornek verilebilir.
Başarılar

demir12
21-10-2010, 11:08   |  #4  
OP Yeni Üye
Teşekkür Sayısı: 0
40 mesaj
Kayıt Tarihi:Kayıt: Tem 2008

muh34 benmi yanlış anladım veya ne demek istedimi tam olarak anlatamadım mı...şimdi hani benim problem vardı ya...hocam orda şurda takıldım şimdi

algoritmanın 1.kısmı bit degerleri üretirken her grubu dinamik olarak okumalıyız..yoksa statik olarak frekans tablosunu bilmedimiz icin anlaşılmıyor..1.algoritma işlem yapıcak işleme göre ürettigi kutu degeri dinamik olarak alınacak...dinamik huffmandaki gibi

yani 1.(kutu diyelim) cıktı hangi karakter degeri ise ona eklenmelidir..dinamik olarak..

dinamik olarak agacı oluşturmada veya algoritmayı kurmada vektör vs fark etmez onu ögreniririmde..

şimdi burası tamamda;


şurayı cözemedim..cevabtanda tam anlamadım daha acık olarak söylersem;

okunma kısmına gelince huffman agacının şifresi cözülüp ortaya gercek degerler cıkarken o kutuların karışmaması adına dinamik okunması lazım..

yani ortaya 1.kutuda bit degeri 000 cıktı sonra 2.kutudaki 00 degeri cıktı..dinamik olarak okunamsı lazımyani yine sataik olursa  örnegin

bunu statik olarak okur ve yazarsam..agac cözüldü 1.deger sonra 2.deger ardarda geldi..

00000  oluyor ee...bizim algoritmaya yine bitşidi degerler..

onun icin şöyle olması gerek degil mi;


1.kutu cıktı 000 degeri...->orda dur..benim algoritmaya göre işlemini yap..

sonra diger 2.kutuyu oku ->algoritmanın 1.kısmına gönder işlemi yap.. bu şekilde nodelerı karıştırmadan cözümlemek lazım;

yani şimdi bu herhangi bir teknik metodla yapılabilir dimi..yani böyle anarmal bir durum yok..

şimdi sen diyeceksin muh34 hocam ben sana huffmanı gecen hafta söylemiştim..

ben huffmanı kullanınca sorunun gidecini anlatımda algoritma tablosunu cıkarırken bu konuda yine kafam karıştı..

yani dedim tamam şimdi kutuların her biri yapraga ayrı yazılır ve ayrı tutulurda acaba okurken tekrar bitişik okunursa ne yaparım diye;

yardımların icin cok teşekkür ederim..bu konuyu aydınlatırsan artık bu konuda mantık olarak sorucak cevabım kalmayacakalgoritmayı cıkartıp  kodlama kısmına gecicem..kendine iyi bak saglıcakla.

muh34
21-10-2010, 14:40   |  #5  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Dosyadan statik okunur derken,herşey olmuş bitmiş,yani huffman agacı gerekli tum sifreyi uretmiş ve dosya'ya yazmış oldugunda okuma işlemine ithafen kasdetmiştim.Eger huffman agacı dogru bir sekilde olusturulmus ise,ortaya cıkan sifreler karışmayacaktır.Ornegin 0000 ile 00 gibi.Fakat bu sifreler yan yana geldiginde(orn: 000000) okuma acısından karısabilir,ancak kodlama acısından dusundugumuzde,her dugumun icerisi acıldıgında,(orn: ekrana bastırılmak istendiginde) ekranda bir işaret koyabilirsiniz.Daha oncelerden bahsettiginiz ayrac karakterini agaca yerleştirmek icin degil,sadece gorsellik acıdan ekrana bastırırarak kullanabilirsiniz.Agacta ise sadece sifreler bulunur.
 
Bahsettiginiz durum pek tabiki olabilir.Eger olusturmak istediginiz agaca,sifrelenmiş karakterleri degilde,karakterlerin kendisini gonderirseniz,ozaman her dugum(node) icin dinamik olarak sifre olusturulacaktır ve eklenen her dugum icinde,daha onceki sifrelenmis karakterlere uygun yeni sifreler uretilecektir.Huffman agacı genelde frekans tablosu olusturulduktan hemen sonra tasarlanır.Ancak farklı veri modelleri esas alınarak bahsettiginiz sekilde de kurgulanabilir.Belki kendi algoritmanızı bile tasarlayabilirsiniz ! Sonucta amac sifreleme yontemidir ve bunu optimize bir sekilde uygulamak gerekir.
 
Dinamik dizi(Vector) konusu sadece bir ornektir ve sıkıştırma algoritması ile alakası yoktur.Konu başlığı gereginde dinamiklik kavramını anlatmaya calısırken orneklerde bulunmuştum.
 
Sunu unutmamak gerekirki,iyi tasarlanmış bir huffman agacı olusturulduktan sonra,algoritmanın son rutuslarını yapmak cok daha basitleşecektir.O yuzden iyi bir kurgu ile kodlamaya gecebilirsiniz.
 
Daha onceden de bahsettigim gibi,ilk olarak frekans tablosu olusturulur,daha sonra bu tabloya gore bir huffman agacı tasarlanır,fakat istege baglı olarak farklı sekillerde de yapılabilir.
 
Başarılar

demir12
21-10-2010, 15:33   |  #6  
OP Yeni Üye
Teşekkür Sayısı: 0
40 mesaj
Kayıt Tarihi:Kayıt: Tem 2008
Alıntı: muh34  
her dugumun icerisi acıldıgında,(orn: ekrana bastırılmak istendiginde)ekranda bir işaret koyabilirsiniz.Daha oncelerden bahsettiginiz ayrackarakterini agaca yerleştirmek icin degil,sadece gorsellik acıdanekrana bastırırarak kullanabilirsiniz.Agacta ise sadece sifrelerbulunur.
şim anladım muh34 süpersin program çalışırken okunan nodelarda ayrac kullaılsa bir şey olmaz..agacta ise sadece şifreler bulunur...Allah razı olsun teşekkür ederim..bir kac gündür bu konu kafamı karıştırmıştı...

muh34
22-10-2010, 08:46   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Sizden de Allah razı olsun umarım bu sefer kodlamayı basarılı bir sekilde gercekleştirirsiniz.
Başarılar