0 ve 1 'lerden oluşan bir dizgenin ne kadarının sıkıştırılabileceği konusunda bilinen bir maksimum var mı?


38

Uzun zaman önce, bir tür profesörün gelecekte sadece iki bite (veya bunun gibi bir şey) verilerini sıkıştırabileceğimizi söylediği bir gazete makalesini okudum.

Bu elbette doğru değil (ve tam olarak ne söylediğine dair hafızamın doğru olmadığı olabilir). Anlaşılır bir şekilde 0 ve 1 'lerden oluşan herhangi bir diziyi sadece iki bite sıkıştırmak pratik olmazdı , çünkü (teknik olarak mümkün olsa bile), çok fazla farklı türde dizgiler aynı iki bite sıkıştırabilir (çünkü biz sadece '01 've' 10 'seçim için).

Her neyse, bu beni bir şemaya göre 0 ve 1'lerin rastgele uzunluktaki bir dizesini sıkıştırmanın uygulanabilirliğini düşündürdü. Bu tür bir string için, string uzunluğu (0 ve 1'ler arasındaki oran önemli değil) ve maksimum sıkıştırma arasında bilinen bir ilişki var mı?

Başka bir deyişle, 0 ve 1 'lerden oluşan bir dizgenin sıkıştırılabileceği asgari (mümkün olan en küçük) uzunluğun ne olduğunu belirlemenin bir yolu var mı?

(Burada matematiksel maksimum sıkıştırma ile ilgileniyorum, şu anda teknik olarak mümkün olanı değil.)


7
Aralarından seçim yapabileceğiniz '00' ve '11' değerlerimiz de olacaktır. Ancak argüman aynıdır, eğer kullanırsanız, sıkıştırabileceğiniz sadece dört farklı karakter dizisi vardır.
RemcoGerlich

3
mathoverflow.net/q/160099/34859 : Pl buraya bakın, güvercin deliği prensibini gözden geçirin , daima sıkıştırılamayan sonsuz sayıda dizi olacaktır ... Kullanılan algoritmadan bağımsız olarak. Soru
ARi

4
Sıkıştırma, verilerin yapısı hakkında sahip olduğunuz bilgilere bağlıdır. Orada satranç hamle sıkıştırarak ilgili bu madde bilgisini ekleyerek artan sıkıştırma nasıl yardımcı olduğunu gösteriyor.
spektrumlar

1
Netleştirebilir misiniz: Sıkıştırma "kayıplı" veya "kayıpsız" (veya her ikisini de kullanan bazı "hibrit" olabilir). Yalnızca "kayıpsız" sıkıştırma yöntemlerini kullanarak maksimum sıkıştırma hakkında mı konuşuyorsunuz ya da "kayıplı" sıkıştırma yöntemlerinin kullanımını da dahil ediyor musunuz? Başka bir deyişle, sanırım 3 olasılık var: "maksimum sıkıştırma" için, burada (1) verilerin her zaman sıkıştırmadan önce olduğu gibi sıkıştırılması mümkün olmalı, (2) verilerin sıkıştırılması mümkün olmalı, ancak bazı "kayıplara" izin verilir (3) verilerin sıkıştırılabilmesi için bir gereklilik değildir.
Kevin Fegan

Hi @KevinFegan, bu durumda seçenek 1 olmalı: "veri her zaman tam olarak sıkıştırmadan önce olduğu gibi
açılmalıdır

Yanıtlar:


45

Kolmogorov karmaşıklığı bunu matematiksel olarak biçimlendirmek için bir yaklaşımdır. Ne yazık ki, bir dizgenin Kolmogorov karmaşıklığını hesaplamak hesaplanamaz bir sorundur. Ayrıca bakınız: Kolmogorov karmaşıklığına yaklaşmak .

Dizenin kendisinden ziyade dizenin kaynağını analiz ederseniz daha iyi sonuçlar almak mümkündür . Başka bir deyişle, çoğu zaman kaynak, bazı dağılıma göre rastgele bir ipi seçen olasılıksal bir süreç olarak modellenebilir. Bu dağılımın entropisi daha sonra size matematiksel olarak mümkün olan en iyi sıkıştırma bilgisini verir (bazı küçük katkı sabitlerine kadar).


Mükemmel sıkıştırmanın imkansızlığı konusunda, aşağıdakilerle de ilginizi çekebilir.


ancak, sıkıştırma, entropiyi tahmin etme tekniklerinden biridir. Sıkıştırma ve entropi aynı şeyin iki yönü olabilir mi?
Paul Uszak

1
@PaulUszak, evet, çok yakından ilgilidir: bkz. Örneğin, Shannon teoremi . Ancak, lütfen not ediniz: yorumlar, gönderiye sadece iyileştirme önerileri / açıklamalar getirmek için kullanılmalı, takip soruları sorulmamalıdır. Yeni bir soru sormak için sayfanın sağ üst kısmındaki "Soru sor" bağlantısını kullanın.
DW

35

Nlog2N

Ayrıca, çoğu durumda tam olarak yeniden yapılanmayı umursamıyoruz . Buna kayıplı sıkıştırma adı verilir ve müzik ve videoların nasıl sıkıştırıldığı. Bu durumda, yukarıda belirtilen alt sınır tutmaz, ancak diğer alt sınırlarla karşılaşabilirsiniz.


1
Nlog2N

27

İşte keyfi bit dizeleri kayıpsız sıkıştırabilen basit bir şema, en küçük sonuç sadece bir bit.

Dizi, Beethoven'in 9. senfonisinin, dördüncü harekette, bilgisayarımın sabit diskinde depolanan AAC biçiminde kaydedilmesi için aynı bir eşleşme ise, çıktı, tek bir bit '0' olur.

Eğer dizge başka bir şeyse, çıktı tek bir bit '1' olur, ardından orijinal dizinin özdeş bir kopyası gelir.

Bu şema, bir olası girişi tam olarak bir bit seviyesine indirger ve diğer her girişi de uzatır. Genel bir prensip vardır: Eğer bir sıkıştırma algoritması herhangi bir giriş dizesini sıkıştırılmış bir dizeye eşleyebilir ve herhangi bir sıkıştırılmış diziyi orijinal diziye geri eşleyen eşleşen bir dekompresyon algoritması varsa ve sıkıştırma algoritması herhangi bir girişi daha kısa bir dizeye eşler , daha sonra bazı girdi dizelerini daha uzun dizelere eşlemelidir.


2
Cevabı açık ve net hale getirmek için iyi bir iş. Bunun, iyi bir sıkıştırma algoritmasının yapmaya çalıştığı şeye benzer olduğuna dikkat etmek önemlidir - verilen bir girdi alanı için, daha az yaygın girdilerin uzatılması karşılığında en sık beklenen girdi türlerini kısaltmaya çalışın.
JBentley

6

Bulabileceğiniz her sıkıştırma şeması için, onunla sıkıştırılamaz olacak verileri üretmek mümkündür. Bu nedenle, sıkıştırma şemanız bazı veri türlerinde çok etkili olsa bile, hiçbir zaman belirli bir oranda tutarlı bir şekilde sıkıştırılmaz.

Belirli bir sıkıştırma algoritması için sıkıştırılamaz bir veri örneği oluşturmanın yolu basittir: her türlü veriyi alın ve boyut küçülmedikçe, tekrar tekrar sıkıştırma algoritması boyunca çalıştırın.

Dolayısıyla, bir bit dizisinin sıkıştırılabilirliği gerçekten, dizenin uzunluğunun bir fonksiyonu değil, sıkıştırma algoritması ile ilgili karmaşıklığının bir fonksiyonudur.


Hoşgeldiniz! Bunun sadece kayıpsız sıkıştırma için geçerli olduğunu unutmayın. Kayıplı sıkıştırma tüm dizeleri sıkıştırabilir (en azından "Boş dizgiyi döndür" algoritmasını kayıplı bir sıkıştırma algoritması olarak kabul ettiğiniz sürece; ;-)).
David Richerby

@DavidRicherby Tabii ki bu doğru. Ancak OP'nin kayıpsız sıkıştırma hakkında sorduğu sorusundaki izlenimi edindim, çünkü kayıplı bir programın azami sıkıştırmasını tartışmak pek mantıklı gelmiyor; Kullanılmaz uç noktalara götürebileceğiniz fikri, kayıplı sıkıştırma kavramında doğaldır.
m69 29:15

Evet, bunun makul bir yorum olduğunu düşünüyorum.
David Richerby

-2

Kurumsal yedekleme sistemleri tarafından kullanılan ilginç ve tamamen farklı bir algoritma vardır. Buradaki fikir, 10.000 bilgisayarı olan bir şirketiniz varsa, bu bilgisayarların çoğunun birçok özdeş dosya içereceğidir. Örneğin, şirketteki herkese gönderilen bir e-posta, her bir sabit sürücüde aynı bir dosya olabilir.

Bu nedenle, bir dosyayı yedeklemeye çalışan bir yedekleme sistemi, dosyayı alandan kazanmak için sıkıştırmayı denemelidir, ancak önce yedekleme sistemi tamamen aynı bir dosyanın zaten kaydedilmiş olup olmadığını kontrol eder! Bu nedenle , herhangi bir şeyi yedeklemek yerine , yedekleme sisteminin tek yaptığı, örneğin, sabit sürücünüzdeki yedekleme sisteminde 1.487.578 numaralı bir dosya bulunduğunu hatırlamaktır.

Bu, özellikle de 10.000 kullanıcının hepsinde aynı işletim sistemi ve kurulu uygulamalar olduğunda etkilidir. Tek kullanıcılar için hiç de kullanışlı değil.


4
Bu ilginç ama soruyu nasıl cevapladığını anlamıyorum. Soru, kurumsal yedeklemelerin genel bir tartışması değil, sıkıştırma konusunda sınırlar istiyor.
David Richerby

Buna tekilleştirme adı verilir ve karmalar kullanılarak yapılır. Diskteki her blok için 128 bitlik bir karma depolamak çok RAM gerektirir. ZFS bunu, bazı blokların bazı yazma-yazma depolama alanlarını paylaşmalarını fırsatçı yapmak için yapabilir. Ancak bu tür bir sıkıştırma sorunu (rastgele erişime ihtiyaç duyduğunuz ve normal akış sıkıştırması için çok hızlı bir şekilde değişen, ancak blok düzeyinde fazlalık olan büyük bir veri kümesini sıkıştırmaya çalıştığınız) bu sorunun cevabı değildir. soru.
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.