হাফম্যান কোড (Huffman Code)
একটি হাফম্যান কোড হলো একটি নির্দিষ্ট টাইপের অপ্টিমাল প্রিফিক্স কোড যা সাধারণত লসলেস ডেটা কমপ্রেশনের জন্য ব্যবহৃত হয়।
একটি এমন কোড খুঁজে বের করার বা বাস্তবায়নের প্রসেস হাফম্যান কোডিং দ্বারা आगे বড়ে যা David A. Huffman দ্বারা ডেভেলপ করা হয়েছিল যখন সে MIT-এ Sc.D. ছাত্র ছিল, এবং ১৯৫২ সালে পাবলিশ করা হয়েছিল "A Method for the Construction of Minimum-Redundancy Codes" পেপারে।
হাফম্যান অ্যালগরিদমের আউটপুট একটি ভেরিয়েবল-লেন্থ কোড টেবিল হিসেবে প্রদর্শিত করা যায় একটি সোর্স সিম্বল এনকোড করার জন্য (যেমন একটি ফাইলের ক্যারেক্টার)। অ্যালগরিদম এই টেবিলটি তৈরি করে এস্টিমেটেড প্রোবাবিলিটি বা ফ্রিকোয়েন্সি অফ অকারেন্স (ওয়েট) থেকে প্রতিটি পসিবল ভ্যালু অফ দ্য সোর্স সিম্বলের জন্য। অন্যান্য এনট্রপি এনকোডিং মেথডের মতো, আরও কমন সিম্বলগুলো সাধারণত কম বিটে রিপ্রেজেন্ট করা হয় কম কমন সিম্বলের চেয়ে। হাফম্যান মেথড দক্ষতার সাথে বাস্তবায়ন করা যায়, O(n) টাইমে একটি কোড খুঁজে বের করে যদি ওয়েটগুলো সর্টেড থাকে।
এনট্রপি (Entropy)
ইনফরমেশন থিওরিতে, শ্যাননের সোর্স কোডিং থিওরেম (বা নয়েজলেস কোডিং থিওরেম) পসিবল ডেটা কমপ্রেশনের লিমিট নির্ধারণ করে, এবং শ্যানন এনট্রপির অপারেশনাল মিনিং।
সোর্স কোডিং থিওরেম দেখায় যে (লিমিটে, যেন একটি স্ট্রিমের লেন্থ অনন্তে চলে যায় ইনডিপেন্ডেন্ট এবং আইডেন্টিক্যালি-ডিস্ট্রিবিউটেড র্যান্ডম ভেরিয়েবল (i.i.d.) ডেটার) ডেটা কমপ্রেস করা সম্ভব নয় যেন কোড রেট (এভারেজ নম্বর অফ বিটস পার সিম্বল) শ্যানন এনট্রপির চেয়ে ছোট হয় সোর্সের, ইन्फরমেশন লোস হয়ে যাওয়া ভার্চুয়ালি সার্টেন ছাড়া। যাইহোক, কোড রেট proizойти করা সম্ভব শ্যানন এনট্রপির أهদে আর্বিট্রেরিলি ক্লোজ, নেগ্লিজিবল প্রোবাবিলিটি অফ লসসহ।
ইনফরমেশন এনট্রপি হলো স্ট্রোক্যাস্টিক সোর্স অফ ডেটা দ্বারা ইনফরমেশন প্রোডিউস হওয়ার এভারেজ রেট।
একটি র্যান্ডম ভেরিয়েবলের জন্য এনট্রপি ক্যালকুলেট করা
আমরা ক্যালকুলেট করতে পারি কতটুকু ইনফরমেশন আছে একটি র্যান্ডম ভেরিয়েবলে।
উদাহরণস্বরূপ, যদি আমরা একটি র্যান্ডম ভেরিয়েবল X-এর জন্য ইনফরমেশন ক্যালকুলেট করতে চাই প্রোবাবিলিটি ডিস্ট্রিবিউশন p সহ, এটি লেখা যায় একটি ফাংশন H() হিসেবে; উদাহরণ:H(X)
প্রভাবশীলভাবে, একটি র্যান্ডম ভেরিয়েবলের জন্য ইনফরমেশন ক্যালকুলেট করা একই র্যান্ডম ভেরিয়েবলের ইভেন্টের প্রোবাবিলিটি ডিস্ট্রিবিউশনের জন্য ইনফরমেশন ক্যালকুলেট করার সমান।
একটি র্যান্ডম ভেরিয়েবলের জন্য ইনফরমেশন ক্যালকুলেট করা ডেনোট করা হয় "ইনফরমেশন এনট্রপি," "শ্যানন এনট্রপি," বা সহজে "এনট্রপি"।
এটি ফিজিক্স থেকে এনট্রপি আইডিয়ার সাথে রিলেটেড অ্যানালজি দ্বারা, যেন দুটোই অনিশ্চয়তার সাথে চিন্তিত।
এনট্রপির ইন্টুইশন হলো এটি ডিফাইন করা হয় এভারেজ নম্বর অফ বিটস যা প্রয়োজন একটি ইভেন্ট রিপ্রেজেন্ট বা ট্রান্সমিট করতে যেটি ড্র করা হয় প্রোবাবিলিটি ডিস্ট্রিবিউশন থেকে র্যান্ডম ভেরিয়েবলের জন্য।
একটি ডিস্ট্রিবিউশনের শ্যানন এনট্রপি হলো এক্সপেক্টেড অ্যামাউন্ট অফ ইনফরমেশন ইন এন ইভেন্ট ড্রন ফ্রম 댓 ডিস্ট্রিবিউশন।
এটি একটি লোয়ার বাউন্ড প্রদান করে এভারেজ বিটস নম্বরের ওপর যারা প্রয়োজন সিম্বল এনকোড করতে ডিস্ট্রিবিউশন P থেকে ড্র করা।
এনট্রপি ক্যালকুলেট করা যায় একটি র্যান্ডম ভেরিয়েবল X-এর জন্য k in K ডিসক্রিট স্টেটস হিসেবে নিচের মতো:
H(X) = -sum(each k in K p(k) * log(p(k)))
অর্থাৎ প্রতিটি ইভেন্টের প্রোবাবিলিটি গুণ করে সেই ইভেন্টের প্রোবাবিলিটির লগের নেগেটিভ সমষ্টি।
ইনফরমেশনের মতো, log() ফাংশন বেস-২ ব্যবহার করে এবং ইউনিটস বিটস। ন্যাচারাল লগারিদমও ব্যবহার করা যায়।
সবচেয়ে কম এনট্রপি ক্যালকুলেট হয় একটি র্যান্ডম ভেরিয়েবলের জন্য যেটি একটি সিঙ্গেল ইভেন্ট আছে প্রোবাবিলিটি ১.০ সহ, একটি সার্টেনটি। একটি র্যান্ডম ভেরিয়েবলের জন্য সবচেয়ে বড় এনট্রপি হবে যদি সকল ইভেন্ট ইকুয়ালি লাইকেলি হয়।