Zadanie na laboratorium
Dla dyskretnych zmiennych losowych X i Y entropia Y warunkowana przez X jest określona wzorem H(Y∣X)=x∈X∑P(x)⋅H(Y∣x) gdzie H(Y∣x)=y∈Y∑P(y∣x)⋅I(y∣x) a P(z) oznacza prawdopodobieństwo z a I(z) informację związaną z z.
Napisz program który dla podanego pliku traktowanego jako ciąg 8-bitowych symboli policzy częstość występowania tych symboli oraz częstość występowania symboli po danym symbolu (częstość występowania pod warunkiem, że poprzedni znak jest dany, dla pierwszego znaku przyjmij, że przed nim jest znak o kodzie 0). Dopisz funkcje które dla policzonych częstości traktowanych jako zmienne losowe policzy entropię i entropię warunkową (warunkowaną znajomością poprzedniego symbolu), oraz poda różnicę między nimi.
Program ma wypisywać wyniki w sposób czytelny i łatwy do dalszego przetwarzania.
Przeanalizuj wyniki działania swojego programu dla przykładowych plików tekstowych, doc
, pdf
, mp4
czy jpg
(weź pliki o rozmiarze co najmniej 1MB).
Uruchomienie programu
W celu uruchomienia programu należy najpierw go skompilować przy pomocy make
a następnie ./main.out <plik do otwarcia>
(przykładowe uruchomienie ./main.out pan-tadeusz.txt
).
Cały kod jest zawarty w pliku main.cpp
.
Poniżej znajdują się dodatkowe uproszczenia wzorów w celu dokładniejszego działania programu.
Entropia warunkowa
P(y∣x)=P(x)P(y ∩ x)=∣x∣∣y ∩ x∣
I(y∣x)=−log2( P(y∣x) )
H(Y∣x)=∑y∈YP(y∣x)⋅I(y∣x)
H(Y∣X)=∑x∈XP(x)⋅H(Y∣x)
podstawmy:
H(Y∣X)=∑x∈X( P(x)⋅∑y∈YP(y∣x)⋅I(y∣x) )
H(Y∣X)=∑x∈X( P(x)⋅∑y∈YP(y∣x)⋅(−log2( P(y∣x)) )
mamy przecież: P(x)=∣Ω∣∣x∣ oraz: P(y∣x)=P(x)P(y∩x)=∣x∣∣y∩x∣ wówczas: H(Y∣X)=x∈X∑( ∣Ω∣∣x∣⋅y∈Y∑∣x∣∣y∩x∣⋅(−log2( ∣x∣∣y∩x∣) ) H(Y∣X)=x∈X∑( y∈Y∑∣Ω∣∣x∣⋅∣x∣∣y∩x∣⋅(−log2( ∣x∣∣y∩x∣) ) H(Y∣X)=x∈X∑( y∈Y∑∣Ω∣∣y∩x∣⋅(−log2( ∣x∣∣y∩x∣) ) H(Y∣X)=x∈X∑( y∈Y∑∣Ω∣∣y∩x∣⋅(−log2( ∣y∩x∣) +log2∣x∣) H(Y∣X)=x∈X∑( y∈Y∑∣Ω∣∣y∩x∣⋅(−log2( ∣y∩x∣) +log2∣x∣)
Zwykła entropia
H(X)=x∈X∑P(x)⋅I(x) przy czym I(x)=−log2P(x) H(X)=x∈X∑∣Ω∣∣x∣⋅(−log2∣Ω∣∣x∣) H(X)=∣Ω∣1⋅x∈X∑∣x∣⋅(−log2∣Ω∣∣x∣) H(X)=∣Ω∣1⋅x∈X∑∣x∣⋅(−log2∣x∣+log2∣Ω∣) H(X)=∣Ω∣1⋅x∈X∑∣x∣⋅(−log2∣x∣)+∣Ω∣1⋅log2∣Ω∣⋅x∈X∑∣x∣) H(X)=∣Ω∣1⋅x∈X∑∣x∣⋅(−log2∣x∣)+log2∣Ω∣