Nasıl bir dosya entropi hesaplamak için?
Nasıl bir dosya entropi hesaplamak için?(Ya da şöyle bayt bir grup)< / ^ br . Bir fikrim var, ama matematiksel olarak doğru olduğundan emin değilim.
Benim fikrim şudur:
- 256 tamsayı (sıfır) bir dizi oluşturun.
- Bayt her biri için dosya üzerinden ve Traverse< / ^ br . artım dizideki ilgili pozisyon.
- Sonunda: "" bu dizi için değer ortalama Hesaplamak
- Başlatma sıfır ile bir sayaç< / ^ br . ve dizisinin girdileri için:< / ^ br . girişin fark Ekle "ortalama" sayacı.
Şimdi sıkışıp kaldım. Nasıl" böyle bir tezgah sonucu "projesi için tüm sonuçları 0.0 ve 1.0 arasında yalan söylesin ki? Ama eminim, fikri tutarsız zaten
Birisi daha iyi ve daha basit bir çözüm vardır umarım?
Not: dosya içeriği: varsayımlar yapmak için her şeyi istiyorum< / ^ br . (düz metin ya da ikili işaretleme sıkıştırılmış, ...)
CEVAP
- Sonunda: "" bu dizi için değer ortalama Hesaplamak
- Başlatma sıfır ile bir sayaç, ve dizinin her şey girişleri: girişin için fark Ekle "ortalama" sayacı.
İlebazıShannon'un entropi alabilirsiniz değişiklikler:
"ortalama""" . entropi yeniden adlandırın
(float) entropy = 0
for i in the array[256]:Counts do
(float)p = Counts[i] / filesize
if (p > 0) entropy = entropy - p*lg(p) // lgN is the logarithm with base 2
Düzenleme: Wesley belirtildiği gibi, aralığında ayarlamak için 8 entropi bölmek gerekir0 . . 1(veya alternatif olarak, logaritmik taban 256 kullanabiliriz).
Nasıl bir proje içinde tek bir dosya i...
Nasıl ve bash ile bir dosya için hem s...
Nasıl bir dosya oluşturmak ve Java ile...
Nasıl svn log-v gibi git log Haritayı ...
Nasıl PHP kullanarak iki tarih arasınd...