Lista-1

by Jerry Sky


Zadanie na laboratorium

Dla dyskretnych zmiennych losowych XX i YY entropia YY warunkowana przez XX jest określona wzorem H(YX)=xXP(x)H(Yx) H(Y|X) = \sum_{x\in X}P(x) \cdot H(Y|x) gdzie H(Yx)=yYP(yx)I(yx) H(Y|x) = \sum_{y\in Y}P(y|x) \cdot I(y|x) a P(z)P(z) oznacza prawdopodobieństwo zz a I(z)I(z) informację związaną z zz.

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 00). 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(yx)=P(y  x)P(x)=y  xxP(y|x) = \frac{P(y~\cap~x)}{P(x)} = \frac{|y~\cap~x|}{|x|}

I(yx)=log2( P(yx) )I(y|x) = -\log_2(~P(y|x)~)

H(Yx)=yYP(yx)I(yx)H(Y|x) = \sum_{y \in Y}P(y|x)\cdot I(y|x)

H(YX)=xXP(x)H(Yx)H(Y|X) = \sum_{x \in X}P(x)\cdot H(Y|x)

podstawmy:
H(YX)=xX( P(x)yYP(yx)I(yx) )H(Y|X) = \sum_{x \in X}(~P(x)\cdot \sum_{y \in Y}P(y|x)\cdot I(y|x)~)
H(YX)=xX( P(x)yYP(yx)(log2( P(yx)) )H(Y|X) = \sum_{x \in X}(~P(x)\cdot \sum_{y \in Y}P(y|x)\cdot (-\log_2(~P(y|x))~)

mamy przecież: P(x)=xΩ P(x) = \frac{|x|}{|\Omega|} oraz: P(yx)=P(yx)P(x)=yxx P(y|x) = \frac{P(y \cap x)}{P(x)} = \frac{|y \cap x|}{|x|} wówczas: H(YX)=xX( xΩyYyxx(log2( yxx) ) H(Y|X) = \sum_{x \in X}(~\frac{|x|}{|\Omega|}\cdot \sum_{y \in Y}\frac{|y \cap x|}{|x|}\cdot (-\log_2(~\frac{|y \cap x|}{|x|})~) H(YX)=xX( yYxΩyxx(log2( yxx) ) H(Y|X) = \sum_{x \in X}(~\sum_{y \in Y} \frac{|x|}{|\Omega|} \cdot \frac{|y \cap x|}{|x|}\cdot (-\log_2(~\frac{|y \cap x|}{|x|})~) H(YX)=xX( yYyxΩ(log2( yxx) ) H(Y|X) = \sum_{x \in X}(~\sum_{y \in Y} \frac{|y \cap x|}{|\Omega|}\cdot (-\log_2(~\frac{|y \cap x|}{|x|})~) H(YX)=xX( yYyxΩ(log2( yx) +log2x) H(Y|X) = \sum_{x \in X}(~\sum_{y \in Y} \frac{|y \cap x|}{|\Omega|}\cdot (-\log_2(~|y \cap x|)~ + log_2|x|) H(YX)=xX( yYyxΩ(log2( yx) +log2x) H(Y|X) = \sum_{x \in X}(~\sum_{y \in Y} \frac{|y \cap x|}{|\Omega|}\cdot (-\log_2(~|y \cap x|)~ + log_2|x|)

Zwykła entropia

H(X)=xXP(x)I(x) H(X) = \sum_{x \in X}P(x)\cdot I(x) przy czym I(x)=log2P(x)I(x) = -\log_2 P(x) H(X)=xXxΩ(log2xΩ) H(X) = \sum_{x \in X}\frac{|x|}{|\Omega|}\cdot (-\log_2 \frac{|x|}{|\Omega|}) H(X)=1ΩxXx(log2xΩ) H(X) = \frac{1}{|\Omega|}\cdot\sum_{x \in X}|x|\cdot (-\log_2 \frac{|x|}{|\Omega|}) H(X)=1ΩxXx(log2x+log2Ω) H(X) = \frac{1}{|\Omega|}\cdot\sum_{x \in X}|x|\cdot (-\log_2 |x| + log_2 |\Omega|) H(X)=1ΩxXx(log2x)+1Ωlog2ΩxXx) H(X) = \frac{1}{|\Omega|}\cdot\sum_{x \in X}|x|\cdot (-\log_2 |x|) + \frac{1}{|\Omega|} \cdot log_2 |\Omega| \cdot \sum_{x \in X} |x|) H(X)=1ΩxXx(log2x)+log2Ω H(X) = \frac{1}{|\Omega|}\cdot\sum_{x \in X}|x|\cdot (-\log_2 |x|) + log_2 |\Omega|