Na nic nove jsem zatim neprisel.
Mam bloky, treba 4 cisla. Cisla muzou nabyvat 0-3.
Zapisuji to tak, ze urcim pocty cisel a z poctu, kdyz soucet dosahne 4, presnanu zapisovat.
A poradi zapisuji s odmazavanim z pole cisel.
Oboje delam binarne.
Pr:
2001 (binarne 4x2 bitu)
0012 - 0:2x, 1:1x, 2:1x, 3:0x
binarne rle: 0001100 (x=0, xx=1, xxx=2...) - pocty opakovani cisel, soucasne serazeni podle velikosti
vyber ze serazeneho pole:
2001 - pozice [0] = 2, kde najde 2 v serazenem poli?
0012 - 2 je ctvrta, binarne 11
001 - [1] = 0, 0 je nulta, bin 00
01 - [2] = 0, 0 je nulta, bin 0 - jedna nula, protoze pocet prvku k zapisu klesl
11000
A posledni cislo neni treba zapisovat. Pripadne, pokud by se opakovalo vicekrat, tez neni treba zapisovat, kdyz vim, ze je to posledni z pole pocet a vim, ze pocet prvku je 4.
Cili, vysledek je 0001100 11000 = 12 bitu
Pr2:
2000 -> 0002
0001100 10 = 9 bitu
Pr3
0000 -> 0000
nic = 0 bitu, ale tady je treba si to pohlidat a zapsat aspon pocet opakovani, 0000 = 4 bity
Vim, nevypada to zajimave. Ale, u vetsiho poctu cisel, treba 256 se blizi pomer 1. A mne zajima sada cisel, kde je kazde prumerne 1x. Takze pocet cisel bude tak obvykle 1-4 pro kazde z 256.
Hm, ted mne napada, ze bych mozna mel zkusit 65.535, kdyz to tak klesa :)
U poctu cisel mam spocitane min-max 1/8 az 2/8 pro 256, pomer 0.12 az 0.25, obvykle 0.24.
U pozice cisel je to zas v podstate soucet n/2 * n + n/4 * (n-1) + n/8 * (n-1)... proste 256*8+128*7... Takze pro 65.535 je to
32768 * 16 + 16384 * 15 ... = 983040
65535 * 16 = 1048576
pomer 0,9375, to je dost na prd :) Kdyz prictu 0.24 (za pocty znaku) to presahne 1 naprosto moc.