Sposoby zapisów informacji

Komputery korzystają z systemu binarnego, tzn. każda wartość, znak lub obrazek są złożone z ciągów liczb w systemie dwójkowymsystem dwójkowysystemie dwójkowym.

O systemach liczbowych możesz przeczytać w e‑materiale Systemy liczbowePuXcOXfLKSystemy liczbowe.

Kompresja danych

Kompresja jest to proces zmniejszania objętości, zagęszczenia lub wielkości czegoś. Można kompresować gazy, dane lub ciała stałe. W tym e‑materiale interesuje nas kompresja danych w informatyce, tzn. zmiana sposobu zapisu informacji, tak aby zmniejszyć redundancjęredundancja danychredundancję i tym samym objętość zapisanego zbioru.

Możemy zmniejszyć długość wiadomości na kartce przez zmianę sposobu kodowania.

Dany jest ciąg znaków, który nie zawiera cyfr.

Jeśli mamy ciąg znaków: „AAAAAAAAA”, możemy go zapisać w postaci: „9A” i dodać adnotację, że taki zapis oznacza dziewięć znaków „A”.

Stopień kompresji
Definicja: Stopień kompresji

Miara względnego zmniejszenia rozmiaru reprezentacji danych generowanej przez algorytm kompresji danych (ang. compression rate, CR). Zwykle wyrażana jako wynik dzielenia rozmiaru nieskompresowanego przez rozmiar po skompresowaniu.

Dzięki temu udało nam się „skompresować” dziewięć znaków do dwóch, uzyskaliśmy stopień kompresji rzędu 4,5.

Stopień kompresji zapisuje się zgodnie z następującym wzorem:

Stopień kompresji = Rozmiar nieskompresowanych danychRozmiar danych po skompresowaniu
Kompresja bezstratna
Definicja: Kompresja bezstratna

Kompresja bezstratnakompresja bezstratnaKompresja bezstratna polega na zmianie kodowania wiadomości w taki sposób, że nie tracimy żadnych informacji. Operacja ta jest w pełni odwracalna, ponieważ polega jedynie na zmianie sposobu kodowania.

Kompresja bezstratna oznacza głównie zmianę sposobu kodowania wiadomości.

Przykład 1

Dana jest niezawierająca cyfr wiadomość: „AAAAAAAAAAAAAAAAAAAAAAAA”. Można skompresować ją poprzez zmianę kodowania do „24A” – co oznaczałoby, że została ona skrócona z 24 do 3 znaków.
Stopień kompresji wynosiłby więc: 24 : 3 = 8.

Przykładem kodu, którym posługujemy się na co dzień podczas korzystania z komputerów, jest kod ASCII (skrót ang. American Standard Code for Information Interchange) oraz jego rozszerzenia. Kod ASCII koduje tylko na 7 bitach wszystkie litery alfabetu łacińskiego, języka angielskiego, znaki interpunkcyjne i znaki kontrolne.

Ciekawostka

ASCII jest kodem 7‑bitowym, przy czym oryginalny standard nie definiuje roli ósmego bitu. Ósmy bit bywa wykorzystywany do kontroli parzystości lub do przechowywania dodatkowego atrybutu (np. podświetlenia). Najczęściej jednak ósmy bit służy rozszerzeniu podstawowego kodu ASCII o niezbędne znaki alfabetów narodowych, symbole matematyczne itp. Więcej na temat kodu ASCII znajdziesz w e‑materiale Reprezentacja tekstu w komputerzePGxPIpBPkReprezentacja tekstu w komputerze.

Ważne!

Co prawda zmiana sposobu kodowania jest niezbędna w kompresji, jednak sama nie powoduje oszczędności pamięci. Przykładowo przejście z kodu binarnego na kod Gray'a nie powoduje żadnej zmiany w ilości zajmowanej pamięci.

Kompresja przedstawiona w powyższym przykładzie, polega na zapisaniu informacji w inny sposób (w tym wypadku każdy zduplikowany znak występujący obok siebie możemy zastąpić liczbą, która oznacza, ile razy dany znak został powtórzony).

Kompresja stratna
Definicja: Kompresja stratna

Polega na zmianie kodowania oraz na nieodwracalnym usunięciu części informacji. W kompresji stratnej niemożliwe jest odzyskanie informacji pierwotnej w postaci sprzed kompresji.

Algorytmy bezstratnej kompresji danych

Jest wiele algorytmów, które pozwalają bezstratnie kompresować dane. Przywołamy jedynie kilka z nich.

Kodowanie Shannona

Kodowanie Shannona to metoda kompresji bezstratnej polegająca na zliczeniu częstości występowania danego ciągu liter lub poszczególnych znaków w ciągu , a następnie posortowaniu ich w sposób nierosnący, zgodnie z prawdopodobieństwem ich wystąpienia .

Przykład 2

Dla dwudziestoelementowego ciągu „AAABBBBBBCCCCDDDDDDD” tworzymy zbiór znaków: . Następnie zliczamy wystąpienie każdego ze znaków:

Co pozwala nam policzyć prawdopodobieństwo wystąpienia każdego ze znaków (zbiór składa się z 20 znaków):

Następnie sortujemy symbole wraz z częstościami nierosnąco:

Tworzymy sumy prawdopodobieństw kolejnych znaków:

Obliczamy teraz długości Shannona, czyli długość kodów w bitach. Posłużymy się następującym wzorem:

Podstawiając kolejne prawdopodobieństwa, uzyskamy następujące wartości:

Zamieniamy prawdopodobieństwa z postaci dziesiętnej na binarną (prezentujemy pięć pierwszych bitów po przecinku):

Na koniec bierzemy z postaci binarnej pierwsze bitów po przecinku – będzie to nasze słowo kodowe:

Wynikiem kodowania będzie następujący łańcuch znaków:

110 110 110 01 01 01 01 01 01 101 101 101 101 00 00 00 00 00 00 00Indeks dolny 2

Kodowanie Huffmana

Kodowanie Huffmana to kolejna metoda bezstratnej kompresji danych. Jest to kodowanie prefiksowe polegające na zliczeniu częstości występowania danego ciągu liter lub znaków, które następnie będą kodowane zgodnie ze swoją częstością występowania. Więcej na temat tego kodowania możesz przeczytać w e‑materiale Kodowanie HuffmanaPt9KZMbi8Kodowanie Huffmana.

Wiadomość „AAABBBBBBCCCCDDDDDDD” po zastosowaniu kodowania Shannona przyjęłaby postać: 110 110 110 01 01 01 01 01 01 101 101 101 101 00 00 00 00 00 00 00Indeks dolny 2 i miałaby długość 47 bitów. Ta sama wiadomość zgodnie z kodowaniem Huffmana wyglądałaby następująco: 110 110 110 10 10 10 10 10 10 111 111 111 0 0 0 0 0 0 0 Indeks dolny 2 i miałaby długość 37 bitów.

Aby zdekompresować wiadomość zapisaną zgodnie z kodowaniem Shannona, należy dopasować metodą prób i błędów słowa kodowe do odpowiednich fragmentów wiadomości.

Aby zdekodować wiadomość zakodowaną zgodnie z kodowaniem Huffmana, możemy posłużyć się zbudowanym drzewem binarnymdrzewo binarnedrzewem binarnym i przechodzić po jego wierzchołkach zgodnie z kolejnymi bitami lub również próbować dopasowywać odpowiednie bity do słów kodowych.

Oczywiście możemy skonstruować drzewo również w kodowaniu Shannona, jednak posłużenie się nim byłoby działaniem dodatkowym, wymagającym kolejnych obliczeń.

Słownik

drzewo binarne
drzewo binarne

podtyp drzewa, w którym każdy wierzchołek ma nie więcej niż dwóch synów

kompresja bezstratna
kompresja bezstratna

kompresja, która pozwala po skompresowaniu odtworzyć dane wejściowe ze skompresowanej wiadomości

redundancja danych
redundancja danych

nadmiarowość danych w bazie danych, które nie są konieczne do prawidłowego jej działania

system dwójkowy
system dwójkowy

(inaczej: binarny) system liczbowy, którego podstawą jest liczba 2, a do zapisu potrzebne są w nim tylko dwie cyfry: 0 i 1