আমি একবার একটি ফাংশন লিখতে হয়েছিল যা প্রদত্ত ব্লক আকারের জন্য প্রদত্ত প্রতীক সিরিজের ব্লক এনট্রপি গণনা করে ফলাফলটি কত সংক্ষিপ্ত হয়েছিল তা অবাক করে দিয়েছিলাম। এইভাবে আমি কোডগল্ফকে এমন একটি ফাংশন চ্যালেঞ্জ জানাতে চাই। আমি আপাতত (এবং কোন ভাষায়) আমি কী করেছি তা বলছি না, তবে কেউ যদি প্রথমে একই বা আরও ভাল ধারণা না নিয়ে আসে তবে আমি এক সপ্তাহ বা তার মধ্যে করব।
ব্লক এনট্রপি সংজ্ঞা:
একটি প্রতীক ক্রম A = A_1,…, A_n এবং একটি ব্লকের আকার এম দেওয়া হয়েছে:
- মাপের একটি ব্লক হ'ল কোনও যথাযথ i এর জন্য চিহ্ন সিকোয়েন্সের ধারাবাহিক উপাদানগুলির অর্থাত্, এ_আই,…, এ_ (i + মি − 1) এর একটি বিভাগ।
- যদি x মাপের এম এর প্রতীক ক্রম হয়, তবে এন (এক্স) এ এর ব্লকের সংখ্যাকে বোঝায় যা এক্স এর সাথে সমান।
- পি (এক্স) হ'ল সম্ভাবনা যা এ থেকে আসা একটি ব্লক আকারের মাপের প্রতীক ক্রমের সাথে মিল থাকে, অর্থাত, পি (এক্স) = এন (এক্স) / (এন − মি + 1)
- পরিশেষে, এ এর ব্লক আকারের এম এর ব্লক এনট্রপি হ'ল এলো (পি (এক্স)) এর সমস্ত ব্লকের এক্স এর আকারের এম বা (যা সমান) −p (x) · লগ (পি) এর যোগফল (x)) এটার আকারের প্রতিটি x এর উপরে মি। (আপনি যে কোনও যুক্তিসঙ্গত লোগারিদম পছন্দ করতে পারেন))
বিধিনিষেধ এবং স্পষ্টতা:
- আপনার ক্রিয়াকলাপটি একটি আর্গুমেন্ট হিসাবে প্রতীক ক্রম A এর পাশাপাশি ব্লক আকারের এম গ্রহণ করা উচিত।
- আপনি ধরে নিতে পারেন যে চিহ্নগুলি শূন্য-ভিত্তিক পূর্ণসংখ্যা হিসাবে বা অন্য কোনও সুবিধাজনক বিন্যাসে উপস্থাপিত হয়।
- আপনার প্রোগ্রামটি তত্ত্বের ক্ষেত্রে কোনও যুক্তিসঙ্গত যুক্তি গ্রহণে সক্ষম হতে হবে এবং বাস্তবে একটি আদর্শ কম্পিউটারে উদাহরণ কেস (নীচে দেখুন) গণনা করতে সক্ষম হওয়া উচিত।
- অন্তর্নির্মিত ফাংশন এবং লাইব্রেরিগুলিকে অনুমতি দেওয়া হয়, যতক্ষণ না তারা একটি কলটিতে প্রক্রিয়াটির বড় অংশগুলি সম্পাদন করে না, যেমন, A থেকে সমস্ত আকারের ব্লক বের করে, প্রদত্ত ব্লক এক্সের উপস্থিতিগুলির সংখ্যা গণনা করে বা এনট্রোপিগুলি গণনা করে পি মানগুলির ক্রম থেকে - আপনাকে সেগুলি নিজেই করতে হবে।
টেস্ট:
[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
- মি = 2: 3.065
- মি = 3: 4.067
- মি = 4: 4.412
- মি = 5: 4.535
- মি = 6: 4.554
entropy(probabilities(blocks(A,m)))
।