मुझे एक बार एक फ़ंक्शन लिखने की ज़रूरत थी जो किसी दिए गए ब्लॉक आकार के लिए दिए गए प्रतीक श्रृंखला के ब्लॉक एन्ट्रॉपी की गणना करता है और आश्चर्यचकित था कि परिणाम कितना छोटा था। इस प्रकार मैं आपको ऐसे फ़ंक्शन को कोडगुल्फ़ करने के लिए चुनौती दे रहा हूं। मैं आपको यह नहीं बता रहा हूं कि मैंने अभी (और किस भाषा में) के लिए क्या किया है, लेकिन मैं एक या एक सप्ताह में करूंगा, अगर कोई भी पहले समान या बेहतर विचारों के साथ नहीं आया था।
ब्लॉक एन्ट्रापी की परिभाषा:
एक प्रतीक अनुक्रम A = A_1,…, A_n और एक ब्लॉक आकार m:
- आकार m का एक खंड किसी भी उपयुक्त i के प्रतीक चिह्न अनुक्रम के निरंतर तत्वों का एक भाग है, अर्थात, A_i,…, A_ (i + m + 1)।
- यदि x आकार m का प्रतीक अनुक्रम है, N (x) A के ब्लॉक की संख्या को दर्शाता है जो x के समान हैं।
- p (x) संभावना है कि A से एक ब्लॉक आकार m, यानी p (x) = N (x) / (n + m + 1) के प्रतीक अनुक्रम x के समान है।
- अंत में, A के ब्लॉक आकार m के लिए ब्लॉक एन्ट्रापी plog (p (x)) का औसत है, जो A या (जो समतुल्य है) के सभी ब्लॉक x का आकार (p (x) का योग है · लॉग (p) (x)) ए में होने वाले आकार के प्रत्येक x पर (आप कोई भी उचित लघुगणक चुन सकते हैं।)
प्रतिबंध और स्पष्टीकरण:
- आपके फ़ंक्शन को प्रतीक अनुक्रम ए के साथ-साथ ब्लॉक आकार मीटर को एक तर्क के रूप में लेना चाहिए।
- आप मान सकते हैं कि प्रतीकों को शून्य-आधारित पूर्णांक या किसी अन्य सुविधाजनक प्रारूप के रूप में दर्शाया गया है।
- आपका कार्यक्रम सिद्धांत में किसी भी उचित तर्क को लेने में सक्षम होना चाहिए और वास्तव में एक मानक कंप्यूटर पर उदाहरण के मामले (नीचे देखें) की गणना करने में सक्षम होना चाहिए।
- अंतर्निहित कार्यों और पुस्तकालयों को अनुमति दी जाती है, जब तक कि वे एक कॉल में प्रक्रिया के बड़े हिस्से का प्रदर्शन नहीं करते हैं, अर्थात, ए से आकार एम के सभी ब्लॉकों को निकालना, किसी दिए गए ब्लॉक x की घटनाओं की संख्या की गिनती करना या एंट्रोपियों की गणना करना। p मानों के अनुक्रम से - आपको स्वयं उन चीजों को करना होगा।
परीक्षा:
[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]
इस क्रम की पहली ब्लॉक एंट्रॉपी हैं (प्राकृतिक लघुगणक के लिए):
- एम = 1: 1.599
- m = 2: 3.065
- एम = 3: 4.067
- m = 4: 4.412
- m = 5: 4.535
- m = 6: 4.554
entropy(probabilities(blocks(A,m)))।