Dosya sıkıştırma nasıl çalışır?


19

Bugün farkına vardığım için dosya sıkıştırması aldığımı fark ettim. Birkaç dosyayı bir arada bir araya getirme ve bunlardan herhangi birinden daha küçük çıkma yeteneği, sadece gerçek olarak kabul ettiğim bir şey, ama aslında nasıl çalışıyor?

Tüm yinelenen girişleri işaretçilerle değiştirerek, bu şekilde küçülmekle ilgili bir şey içeren sınırlı bir bilgiye sahibim, ancak bunun ötesinde oldukça clueless!

Her zaman yeni bilgiye açık olduğum için, çoğumuzun burada olduğunu hayal ettiğim gibi, soracağımı düşündüm. SuperUser, sıkıştırma gerçekten nasıl çalışır?


1
Wikipedia makalesi iyi bir başlangıç, ama daha özel açıklamalar olması güzel olurdu. İyi soru (gerçi biz zaten böyle bir soru vardı emin, ama öyle değil gibi görünüyor).
Gnoupi

2
@Gnoupi: Gerçekten, yaptığım ilk şey arama yapmaktı, çünkü burada bir tane olduğundan emindim. Görünüşe göre hayır, bu yüzden bunu düzeltmeye çalıştım: P
Phoshi

2
resim yayınladığınızda ve "wot izzit ??" e gittiğinizde bir "ne" etiketi var; "nasıl-işe-yarar" etiketi için bir ihtiyaç fark ettim, ama bu çok uzun ve "nasıl-iş" aptal geliyor. "açıklamak" tho yapabilir.
quack quixote

@ quack quixote: Ah, teşekkürler. "Plz-gönderme-gönderme-açıklama" türü etiketi için otomatik tamamlamayı arıyordum, ancak bir tane bulamadım.
Phoshi

2
Ben sadece bir "nasıl" etiketi birkaç kez oluşturma yakın geldim ... ama "açıklamak" muhtemelen daha iyidir. "öğretici" ve "nasıl yapılır" ve "yeni başlayanlar" hepsi yarı uygulanabilir, ancak tam olarak uymaz.
quack quixote

Yanıtlar:


18

Kayıpsız Sıkıştırma

Kayıpsız sıkıştırma, hiçbir verinin kaybolmadığı yerdir. Girilen her şey mükemmel bir şekilde alınabilir. Bu, en küçük hatanın fark edileceği metin veya ikili dosyalar için iyi çalışır.

Dosya sıkıştırma, dosyayı alıp kalıpları tarayarak ve bu kalıpları daha az yer kaplayan başka bir şeye çevirerek çalışır.

Örneğin "AAAAAAAA", "8A" ya dönüştürülebilir.

Verilen tam olarak böyle çalışmadığı için, o zaman "8A" nın düz metinde olup olmadığı sorununa sahipsiniz. Dosyayı açarsınız ve yanlış olur. Başlamak için iyi bir yer Wikipedia veya LZW Veri Sıkıştırma Algoritmasıdır .

Aşağıda kopyalananlar için basitçe psuedo kodu vardır:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

Tüm sıkıştırma, dosyayı sıkıştırmak ve açmak için kullanılan bir arama sözlüğü kullanır. Sözlük ne kadar büyük olursa, o kadar fazla sıkıştırabilirsiniz, ancak Azalan İade Yasası'na girersiniz .

Sıkıştırmanın her zaman daha küçük bir dosya sağlamadığını da belirtmek gerekir. Sıkıştırmadan sonra daha küçük bir dosya elde edemeyeceğiniz durumlar (küçük dosyalarla veya rasgele verileri sıkıştırırken ) vardır . Rasgele verileri sıkıştırma yeteneği ile ilgili bazı eğlenceli zorluklar olmuştur .

"Kayıplı" Sıkıştırma

Yukarıdakiler çoğunlukla kayıpsız sıkıştırma ile ilgilidir . MP3 / JPG ve h.264 gibi video / ses uygulamalarında kullanılan diğer sıkıştırma türleri kayıplı sıkıştırma örnekleridir .

Kayıplı sıkıştırma, en az fark edilmesi muhtemel verileri atarak çalışır. Ses olarak bu, diğer çeşitli şeylerle birlikte yaklaşık 30.000 Hrz ve 100 Hrz'nin altında. Resimde (statik), verileri atarken çeşitli şeyleri kaldırır ve pikselleri birleştirir.

Kayıplı sıkıştırma bir tür dönüşüm kodlamasıdır . Toplam boyutu azaltmak için verilerin ortalamasını alır. Örneğin, bir görüntüde 10 piksellik bir blok, biraz farklı renklerin tümü bir renkle birleştirilebilir ve böylece sıkıştırılabilir.

Video sıkıştırmasında genellikle talimatlar yalnızca son kareden veya ana kareden bu yana değişen pikselleri yeniden çizmeye yerleştirilir .


Bunun yalnızca kayıpsız sıkıştırma için bir açıklama olduğunu, kesin başlangıç ​​verilerini kurtarabileceğiniz tür olduğunu unutmayın (büyük olasılıkla programları arşivlemek için kullanılır). Daha küçük boyut için kaliteyi kaybettiğiniz, örneğin JPG, MP3,
vb.'de

Josh'un ilk örneği Run-Length Encoding adlı gerçek bir sıkıştırma yöntemidir ve "8A", "181A" olarak sıkıştırılır. Açıkçası son paragrafı burada geçerlidir; RLE, en çok yinelenen verilerle çalışır.
Dour Yüksek Kemer

3
Kayıpsız / kayıplı başlıkları ekledim ve biraz daha yuvarladım. Bunu daha iyi anlamanın en iyi yolunun wikipedia makalesini okumak olduğu unutulmamalıdır.
Josh K

5

Sıkıştırma, verilerdeki kalıpları bularak ve bu kalıpları daha küçük özel kalıplarla değiştirerek çalışır. Dekompresyon tersidir: özel kalıpları bulun ve bunları temsil ettikleri daha büyük kalıplarla değiştirin. Hangi modellerin olası olduğunu bilmek önemlidir; örneğin, metinde bulunan kalıplar resimlerde bulunanlardan oldukça farklı olabilir. Bazı sıkıştırma teknikleri kayıplıdır; genişlemenin girişi tam olarak kurtaracağını garanti etmezler. Kayıp yeterince küçükse, bu genellikle müzik ve görüntüler gibi analog veriler için uygundur. Ancak metin gibi veriler kayıpsız tekniklerle sıkıştırılmalıdır.

Kayıpsız rastgele verileri tek bir bit bile sıkıştırmanın imkansız olduğunu anlamak önemlidir. N bitlik ikili veri içeren bir dosya düşünün. 2 ^ N olası dosya var. Bu dosyalardan herhangi birini tek bir bitle sıkıştırırsanız, sıkıştırılmış dosya boyutu N-1 bit olur, yalnızca 2 ^ (N-1) olası sıkıştırılmış temsil vardır. Başka bir deyişle, olası her sıkıştırılmış dosya, birden fazla olası sıkıştırılmamış dosyayı temsil etmelidir. Benzersiz bir sıkıştırılmış gösterim olmadan, dekompresyon algoritması kayıpsız dekompresyonu garanti edemez.


3
bir dosya sıkıştırılmamış (sıfat) olabilir ancak sıkıştırılamaz (fiil). bunun yerine sıkıştırılmış .
quack quixote
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.