Bir metin dosyasını ele alıp sıkıştırma yöntemlerine bir örnek verelim. "Evrim Ağacı" kelimesinin bayt olarak karşılığını çevirince
45 76 72 69 6d 20 41 c4 9f 61 63 c4 b1
dizisini elde ederiz. Buradaki çift basamaklı sayıların her biri karakterlere karşılık geliyor. Bu çevirme işleminin yapmamızın nedeni bilgisayarların metin karakterlerini sayısal olarak tutmaları ve işlemelerinden kaynaklanıyor. Yani görüntüde gördüğümüz tüm metin ve simgeler hepsi sayı. Ayrıca bu sayılar onaltılık tabandadır. Bu sayıları makine kodlarına çevirirsek
olarak çevirilir. Çünkü bilgisayar onaltılık sayılardan da anlamaz. Bu sayı işlemek için her zaman 0 ve 1'lerde oluşan 8'li, 16'lı, 32'li, 64'lü ya da 128'li gruplar kullanır. İşlemciler bu sayı gruplarını işlerler. Buraya kadar "Evrim Ağacı" metninin bilgisayardaki makine kodları karşılığının ne uzunlukta olduğunu gördük.
Peki bunu nasıl sıkıştırabiliriz? Örneğin boşluk karakterine 0, a harfine 1, b harfine 2, c harfine 3 dersek ve bunu tüm alfabe için yaparsak elimize sayısallaştırılmış bir alfabe olur(ğ bu örnek için liste dışı). "Evrim Ağacı" metnini dönüştürürsek
5 22 18 9 13 0 1 7 1 3 9
sayı dizisini elde ederiz. Bu sayı dizisinin bilgisayardaki makine kodları karşılığını elde edelim:
Dizi başlarındaki "0011"li tekrar eden bölgeler atılıp kısaltılmış bir dizi elde edilir. Bu yöntemle basitçe veri kaybetmeden metin sıkıştırması yapmış oluruz.
Tüm Reklamları Kapat
Bu tekniğe benzer olarak tekrarlayan kelimeler için sayı ataması yapılabilir. Ne kadar çok kelime tekrarı varsa o kadar kısaltmış oluruz. Günümüzde bunlardan farklı çeşitli kayıplı-kayıpsız sıkıştırma algoritmaları ve yöntemleri var.
İyi bilimler dilerim.
Kaynaklar
Yazar Yok. Çevirici. (31 Ocak 2020). Alındığı Tarih: 31 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Yazar Yok. Çevirici. (31 Ocak 2020). Alındığı Tarih: 31 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Yazar Yok. Şifreleme Ve Çözme. (31 Ocak 2020). Alındığı Tarih: 31 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Yazar Yok. Çevirici. (31 Ocak 2020). Alındığı Tarih: 31 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Yazar Yok. Vikipedi. (31 Ocak 2020). Alındığı Tarih: 31 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Sanırım soruda Huffman Kodlamasından örnek vermişsiniz. Fakat Kayıplı ve Kayıpsız veri sıkıştırma başlıkları altında onlarca veri sıkıştırma yöntemi (algoritması) yer almaktadır. Soruyu tüm bu algoritmaları inceleyerek ele almak gerekir. Fakat ben sorunuzu sadece bahsettiğiniz Huffman Kodlamasını ele alarak bilgim dahilinde cevaplamaya çalışacağım.
Huffman Kodlaması
Huffman Kodlaması verideki karakterlerin frekansına yani kullanım sırasına göre bir kodlama oluşturur ve bu sayede sık kullanılan karakterlerin daha az, nadir kullanılan karakterlerin ise daha fazla yer kaplamasını sağlar. Verideki karakterlerin dağılımı yani tekrarlanması eşit olmadığı sürece verimli performans göstermektedir. Fakat bu algoritmanın zayıf olduğu anlamına gelmez çünkü bir verideki karakterlerin eşit dağılıma sahip olması imkansıza yakın denilebilecek kadar düşük bir olasılığa sahiptir.
Örnek
Tüm Reklamları Kapat
Çok basit bir örnek vermek gerekirse 8 harften oluşan bir alfabeye sahip olduğumuzu varsayalım ve bu harfler "a,b,c,d,ef,g,h" olsun. 2³ = 8 olduğu için 8 bit yerine, 8 harfli alfabemizi ikili sistemde 3 bit ile kodlayabiliriz.
Alfabemizi 3 bit ile kodlayacak olursakta bu değerleri verebiliriz;
a 000
b 001
c 010
d 011
e 100
f 101
g 110
h 111
Tüm Reklamları Kapat
Bu alfabede "abeebc dccddff dhfffgf" mesajını kodlayacak olursak şu şekilde gözükecektir;
Görüldüğü üzere 20 harfli bir mesajı kodlamak için harf sayısının 3 katı (60) byte kullanmak zorunda kalıyoruz. Dolayısıyla bu mesajı Huffman algoritması ile kodlamak istersek harflerin tekrar sayısının şemasını çıkarmamız gerekir;
Tüm Reklamları Kapat
a1
b2
c3
d4
Tüm Reklamları Kapat
e2
f6
h1
g1
Çıkardığımız şema doğrultusunda bir ağaç oluşturmamız gerekmekte;
Resme dikkatli bakacak olursanız harfler ve her harf düğümlerinin birleşim noktalarında ise o harflerin mesajdaki tekrar sayıları bulunmaktadır. Dikkat edilmesi gereken nokta ise resimdeki dallanmalardaki 0 ve 1 değerleridir. Huffman Ağacında sola giden her dal 0 sağa giden her dal ise koda 1 eklemektedir. Örnek verecek olursak ağaçtaki e harfine giderken "sol, sağ, sol" yapmaktayız buda bize 010 değerini vermekte. Daha net bir şekilde anlatmak gerekirse e harfine giden yol 20'nin solu, 8'in sağı,4'ün solu şeklindedir.
Bu şekilde ağaçtaki harflerin konumuna ve onlaran giden dalların değerine bakarak alfabemizi yeniden kodlarsak;
a 0110
b 1110
c 110
Tüm Reklamları Kapat
d 00
e 010
f 10
g 1111
Tüm Reklamları Kapat
h 0111
sonucu elde ederiz. Bu sonuca göre verimizi tekrar kodlayacak olursak da;
sonucu elde ederiz. Yani 20 harfli bir mesajı 60 byte tan 55 byte a sıkıştırmış oluruz. (%8.3 oran ile sıkıştırılmış olur.)
Tüm Reklamları Kapat
Sıkıştırma oranı size çok az gelebilir fakat bunun temel sebebi kullandığımız örnekte makalenin başında bahsettiğim gibi tekrar etme oranlarının bir birine biraz yakın olması. Aynı zamanda örnekteki verinin boyutunun düşük olması.
Asıl konumuz: Pi Sayısı sıkıştırılabilir mi?
Evet, az çok Huffman Algoritmasını sizlere anlatabildiysem fark edeceksinizdir ki soruya cevap verebilmek için tekrar eden rakamları ve kaç kere tekrar ettiklerini bilmemiz gerekmekte yani kısacası bir ağaç oluşturmamız gerekmekte. Dolayısıyla internetten edindiğim Pi sayısının ilk 100bin rakamının yardımcı bir yazılım ile Huffman Ağacını oluşturdum. Bu ağaca göre kodlama yapıp daha sonra kodlamadaki byte sayısının tekrar sayısı ile çarparsak bize o harfin sıkıştırılmış verinin boyutunu verecektir.
Örn: (rakamın kodlamadaki byte sayısı)*(rakamın tekrar sayısı) = (rakamın toplam byte sayısı)
Tüm Reklamları Kapat
Bu yöntem ile ilerleyip tüm rakamların toplam byte sayısını bulup toplarsak bize pi sayısının (Virgülden sonra 100.000) sıkıştırılmış boyutunu elde edebiliriz. Ham halinin boyutunu da yukarıda hesapladığımızdan kıyaslama yaparak sorunuzu cevaplayabiliriz.
100.002 karakterli bir veriyi ikili sistemde 8 byte olarak kodladığımızda 800.016 byte elde edeceğimizden, 800.016 - 349.665 = 450.351 byte sıkıştırma sağlamış olacağız. Orana vurduğumuzda ise sıkıştırma oranı V olacaktır.
Yani evet Pi sayısı sıkıştırılabilir :)
Tüm Reklamları Kapat
Dip Not: Cevapta veya görsellerde hesap hatası, yazım hatası olabilir. Bu durumun sonucu değiştirmeyeceği düşüncesindeyim. Yine de konuya ilgili kişiler hesapta veya mantıkta yanlış arayıp bizleri bilgilendirebilir. Cevabı kendi bilgim dahilin de bir kaç makaleden ve araçtan yararlanarak verdim.
Merakla Kalın!"
330 görüntülenme
Kaynaklar
Yazar Yok. Kaynak. (22 Ocak 2020). Alındığı Tarih: 22 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
Yazar Yok. Alternatif. (22 Ocak 2020). Alındığı Tarih: 22 Ocak 2020. Alındığı Yer: Bağlantı
| Arşiv Bağlantısı
3
Şikayet
Et
Mantık Hatası
0
Paylaş
Alıntıla
Alıntıları Göster
Daha Fazla Cevap Göster
Cevap Ver
Giriş Yap ve Cevap Ver
Evrim Ağacı Soru & Cevap Platformu, Türkiye'deki bilimseverler tarafından kolektif ve öz
denetime dayalı bir şekilde sürdürülen, özgür bir ortamdır. Evrim Ağacı tarafından
yayınlanan
makalelerin aksine, bu platforma girilen soru ve cevapların içeriği veya gerçek/doğru
olup
olmadıkları Evrim Ağacı yönetimi tarafından denetlenmemektedir. Evrim Ağacı, bu
platformda
yayınlanan cevapları herhangi bir şekilde desteklememekte veya doğruluğunu garanti
etmemektedir. Doğru olmadığını düşündüğünüz cevapları, size sunulan denetim araçlarıyla
işaretleyebilir, daha doğru olan cevapları kaynaklarıyla girebilir ve oylama araçlarıyla
platformun daha güvenilir bir ortama evrimleşmesine katkı sağlayabilirsiniz.
Popüler Yazılar
30 gün
90 gün
1 yıl
Evrim Ağacı'na Destek Ol
Evrim Ağacı'nın %100 okur destekli bir bilim platformu olduğunu biliyor muydunuz? Evrim
Ağacı'nın maddi destekçileri arasına katılarak Türkiye'de bilimin yayılmasına güç
katın.
Bu komünite, aklınızdan geçen düşünceleri Evrim Ağacı ailesiyle paylaşabilmeniz içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Bilim kimliğinizi önceleyin.
Evrim Ağacı bir bilim platformudur. Dolayısıyla aklınızdan geçen her şeyden ziyade, bilim veya yaşamla ilgili olabilecek düşüncelerinizle ilgileniyoruz.
2
Propaganda ve baskı amaçlı kullanmayın.
Herkesin aklından her şey geçebilir; fakat bu platformun amacı, insanların belli ideolojiler için propaganda yapmaları veya başkaları üzerinde baskı kurma amacıyla geliştirilmemiştir. Paylaştığınız fikirlerin değer kattığından emin olun.
Değer katın; hassas konulardan ve öznel yoruma açık alanlardan uzak durun.
Bu komünitenin amacı okurlara hayatla ilgili keyifli farkındalıklar yaşatabilmektir. Din, politika, spor, aktüel konular gibi anlık tepkilere neden olabilecek konulardaki tespitlerden kaçının. Ayrıca aklınızdan geçenlerin Türkiye’deki bilim komünitesine değer katması beklenmektedir.
5
Cevap hakkı doğurmayın.
Aklınızdan geçenlerin bu platformda bulunmuyor olabilecek kişilere cevap hakkı doğurmadığından emin olun.
Evrim Ağacı Premium'a katılın, her geçen gün artan ayrıcalıklarından faydalanın!
Bu yıl sayfamızda gezdiniz.
Reklamlar, internet sitemizin ayakta kalabilmesinin tek yolu. Ama daha iyi bir yol var: Evrim Ağacı Premium! Kreosus üzerinden, bütçenizi zorlamayacak bir miktarda bize destek olarak sitemizdeki bütün reklamları kapatabilir, Evrim Ağacı Premium kullanıcılarının her geçen gün artan ayrıcalıklarından faydalanabilirsiniz. Tek seferlik destek olun veya daha iyisi, aylık destekçilerimiz
arasına şimdi katılın.
“Bizler, birer insan olarak, insanlığa sesleniyoruz: İnsanlığınızı hatırlayın ve gerisini unutun. Bunu yapabilirseniz yeni bir cennetin yolunu açmış olacağız. Eğer yapamazsanız, evrensel bir ölüm sizi bekliyor olacak.” Bertrand Russell
Bilim İçin 30 Saniyeniz Var mı?
Evrim Ağacı, tamamen okur ve izleyen
desteğiyle sürdürülen, bağımsız bir bilim oluşumu.
Ücretsiz bir Evrim Ağacı üyeliği oluşturmanın çok sayıda
avantajından
biri, sitedeki reklamları %50 oranında azaltmak (destekçilerimiz arasına katılarak
reklamların %100'ünü kapatabilirsiniz). Evrim Ağacı'nda geçirdiğiniz zamanı
zenginleştirmek için, sadece 30 saniyenizi ayırarak üye olun (üyeyseniz, giriş
yapmanızı tavsiye ederiz).