Saya mengambil bit 1mil pertama dari file video acak, dan kemudian untuk setiap byte saya memetakan setiap bit ke bin, misalnya
c_b = ''.join(format(ord(b), '08b') for b in c)
bin1.append(c_b[0])
Kemudian dihitung:
bin1_counted = Counter(bin1)
dan hasilnya adalah:
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})
Itu jelas menunjukkan distribusi yang sama. Tetapi saya berharap seseorang dapat menjelaskan kepada saya mengapa demikian, dengan asumsi saya bahwa bit pertama dalam setiap byte seharusnya memiliki lebih 0
dari 1
karena saya berpikir bahwa mungkin ada semacam distribusi lonceng dari setiap byte 'posisi, yaitu saya mengharapkan bit pertama / kedua dari setiap byte memiliki lebih banyak 0
karena karakter dapat diwakili sebelum mencapai 64?
ord(b), '08b') for b in c
. Saya harusord()
masing - masing karakter berikutnya?Jawaban:
Itu tidak mengherankan mengingat jenis data yang Anda lihat.
Video-stream terdiri dari data yang sangat terkompresi.
Melihat byte mentah ini muncul sebagai data acak yang hampir sempurna.
Itu adalah properti dasar dari data kompresi tinggi (entropi tinggi).
Dan data acak yang hampir sempurna memiliki distribusi acak yang hampir sempurna, yang berarti setiap bit memiliki distribusi yang sama.
Jika Anda melakukan hal yang sama pada file teks ASCII yang besar, Anda akan melihat bahwa bit yang paling signifikan (2 ^ 7) tidak akan muncul sama sekali (atau hanya beberapa kali paling banyak) dan beberapa lainnya akan muncul dengan frekuensi yang SANGAT tinggi .
Itu karena ASCII memiliki distribusi yang sangat miring dengan nilai-nilai yang paling banyak digunakan berkerumun di beberapa himpunan bagian kecil dalam kisaran 0,255.
sumber