SORU
13 HAZİRAN 2009, CUMARTESİ


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
13 HAZİRAN 2009, CUMARTESİ


  • 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).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010