Por que os bits em bytes são igualmente distribuídos?

0

Eu peguei os primeiros 1mil bits de um arquivo de vídeo aleatório e, em seguida, para cada byte, mapeei cada bit para um bin, por exemplo

c_b = ''.join(format(ord(b), '08b') for b in c)
bin1.append(c_b[0])

Depois contado:

bin1_counted = Counter(bin1)

e os resultados foram:

Counter({'0': 646491, '1': 603686})
Counter({'0': 642133, '1': 608044})
Counter({'0': 644298, '1': 605879})
Counter({'0': 641961, '1': 608216})
Counter({'0': 641778, '1': 608399})
Counter({'0': 640538, '1': 609639})
Counter({'0': 641531, '1': 608646})

Mostra claramente uma distribuição igual. Mas eu estava esperando que alguém pudesse me explicar por que isso é assim, considerando minha suposição de que o primeiro bit em cada byte deve ter muito mais 0 do que 1 porque estou pensando que é provável que haja algum tipo de distribuição de sino da posição de todos os bytes, ou seja, eu estava esperando que o primeiro / segundo bit de cada byte tivesse muito mais 0 , já que os caracteres podem ser representados antes de atingir 64?

    
por Tjorriemorrie 25.05.2016 / 11:32

1 resposta

4

Isso não é surpreendente, considerando o tipo de dados que você está vendo.

Um fluxo de vídeo consiste em dados altamente compactados.
Observando os bytes brutos, eles aparecem como dados aleatórios quase perfeitos.
Essa é uma propriedade básica de dados altamente compactados (alta entropia).

E dados aleatórios quase perfeitos têm uma distribuição aleatória quase perfeita dos bits, significando que cada bit individual tem uma distribuição igual.

Se você fizer a mesma coisa em um enorme arquivo de texto ASCII, verá que o bit mais significativo (2 ^ 7) não aparecerá (ou apenas algumas vezes no máximo) e um par de outros aparecerá com MUITAS ALTAS FREQUÊNCIAS.
Isso ocorre porque o ASCII tem uma distribuição muito distorcida, com os valores mais usados agrupados em alguns pequenos subconjuntos dentro do intervalo de 0.255.

    
por 25.05.2016 / 13:14

Tags