Bir keresinde, belirli bir blok boyutu için belirli bir sembol serisinin blok entropisini hesaplayan ve sonucun ne kadar kısa olduğuna şaşırdım bir fonksiyon yazmam gerekiyordu. Böylece size böyle bir işlevi kodlamada meydan okuyorum. Sana şimdilik ne yaptığımı (ve hangi dilde) söylemiyorum, ama önce kimse aynı veya daha iyi fikirlerle gelmediyse bir hafta içinde yapacağım.
Blok entropinin tanımı:
A = A_1,…, A_n sembol sırası ve m blok boyutu verildiğinde:
- M büyüklüğünde bir blok, herhangi bir uygun i için sembol dizisinin m ardışık elemanlarının bir segmentidir, yani A_i,…, A_ (i + m-1).
- X, m boyutunda bir sembol dizisi ise, N (x), A'nın x ile aynı olan blok sayısını belirtir.
- p (x), A'dan bir bloğun, m boyutunda bir sembol dizisi x ile özdeş olma olasılığıdır, yani p (x) = N (x) / (n − m + 1)
- Son olarak, A blok boyutu m için blok entropisi, A boyutunda m boyutundaki x veya x eşdeğeri olan tüm bloklar üzerindeki −log (p (x)) ortalamasıdır ((p (x) · log (p (x)) A'da meydana gelen her bir m boyutunda x (İstediğiniz makul logaritmayı seçebilirsiniz.)
Kısıtlamalar ve açıklamalar:
- İşlevin argüman olarak A sembol dizisini ve m blok boyutunu alması gerekir.
- Sembollerin sıfır tabanlı tamsayılarla veya başka bir uygun biçimde temsil edildiğini varsayabilirsiniz.
- Programınız teoride makul bir argüman alabilmeli ve gerçekte standart bir bilgisayarda örnek durumu (aşağıya bakınız) hesaplayabilmelidir.
- Yerleşik işlevlere ve kitaplıklara, bir çağrıda yordamın büyük bölümlerini gerçekleştirmedikleri sürece, yani m boyutundaki tüm blokları A'dan ayıklayarak, belirli bir bloğun x oluşum sayısını sayarak veya entropileri hesapladıkları sürece izin verilir p değerleri dizisinden - bunları kendiniz yapmanız gerekir.
Ölçek:
[2, 3, 4, 1, 2, 3, 0, 0, 3, 2, 3, 0, 2, 2, 4, 4, 4, 1, 1, 1, 0, 4, 1,
2, 2, 4, 0, 1, 2, 3, 0, 2, 3, 2, 3, 2, 0, 1, 3, 4, 4, 0, 2, 1, 4, 3,
0, 2, 4, 1, 0, 4, 0, 0, 2, 2, 0, 2, 3, 0, 0, 4, 4, 2, 3, 1, 3, 1, 1,
3, 1, 3, 1, 0, 0, 2, 2, 4, 0, 3, 2, 2, 3, 0, 3, 3, 0, 0, 4, 4, 1, 0,
2, 3, 0, 0, 1, 4, 4, 3]
Bu dizinin ilk blok entropileri (doğal logaritma için):
- m = 1: 1.599
- m = 2: 3.065
- m = 3: 4.067
- m = 4: 4.412
- m = 5: 4.535
- m = 6: 4.554
entropy(probabilities(blocks(A,m))).