আসুন হাফম্যান কোডিং সম্পর্কে চিন্তাভাবনার কিছুটা ভিন্ন উপায় দেখুন।
ধরুন আপনার সম্ভাব্যতা 0.5, 0.25 এবং 0.25 সহ তিনটি চিহ্ন, এ, বি এবং সি এর বর্ণমালা রয়েছে। সম্ভাব্যতাগুলি দুটির বিপরীতমুখী শক্তি হওয়ায় এটির একটি হাফম্যান কোড রয়েছে যা সর্বোত্তম (যেমন এটি পাটিগণিত কোডিংয়ের সমান)। এই উদাহরণের জন্য আমরা ক্যানোনিকাল কোডটি 0, 10, 11 ব্যবহার করব।
মনে করুন আমাদের রাজ্যটি একটি বৃহত পূর্ণসংখ্যা, যা আমরা এসকে । আপনি এনকোডিংটিকে এমন একটি ফাংশন হিসাবে ভাবতে পারেন যা বর্তমান অবস্থা এবং এনকোডের প্রতীক হিসাবে নিয়ে যায় এবং নতুন অবস্থানে ফিরে আসে:s
encode(s,A)encode(s,B)encode(s,C)=2s=4s+2=4s+3
সুতরাং আসুন রাষ্ট্র 11 দিয়ে শুরু করা যাক (যা বাইনারিতে 1011), চিহ্নটি এনকোড করুন বি। নতুন রাজ্যটি 46, যা বাইনারি হয় 101110। আপনি দেখতে পাচ্ছেন, এটি শেষের সাথে 10 সিকোয়েন্স যুক্ত "পুরানো" রাষ্ট্র। আমাদের বিট সিকোয়েন্স 10 মূলত "আউটপুট" রয়েছে।
এ পর্যন্ত সব ঠিকই.
পাটিগণিত কোডিং কীভাবে কাজ করে তা সম্পর্কে এক মুহুর্তের জন্য ভাবুন। যদি আপনি সম্ভাব্যতাকে একটি সাধারণ ডিনোমিনেটরের উপরে রাখেন, তবে প্রতীক এ আসলে ব্যাপ্তিটি দেখায় , বি B পরিসীমা প্রতিনিধিত্ব করে[2[04,24)এবং প্রতীক সি ব্যাপ্তিটি উপস্থাপন করে[3[24,34)।[34,44)
মূলত আমরা এখানে যা করছি তা হ'ল সাধারণ ডিনোমিনেটর দ্বারা সমস্ত কিছুর গুণ করা হয়। কল্পনা করুন যে রাজ্যটি আসলে বেসে 4 ছিল base প্রতীকটি এনকোডিং করা সত্যই সেই বেসটিতে 2 সংখ্যাটি আউটপুট করছে এবং একটি চিহ্ন সিটিকে এনকোডিং করা হচ্ছে সেই বেসটিতে 3 সংখ্যাটি আউটপুট করছে।
তবে, প্রতীক এটি কিছুটা আলাদা, কারণ এটি বেস 4-তে সম্পূর্ণ অঙ্ক নয়।
পরিবর্তে, আমরা বর্ণগুলিকে সমান সম্ভাবনা সহ A_0, A_1, B, C, চিহ্নগুলির সেট হিসাবে ভাবতে পারি। এটির আবারও একটি সর্বোত্তম হাফম্যান কোড 00, 01, 10, 11 রয়েছে Or অথবা, আবার আমরা বেস 4 এ এটি ভাবতে পারি a প্রতীকটি এনকোড করতে আমরা কেবল এটি করি:
encode(s,A0)encode(s,A1)encode(s,B)encode(s,C)=4s+0=4s+1=4s+2=4s+3
সুতরাং এখন এটি পরিষ্কার হয়ে গেল কীভাবে বি এবং সি প্রতীকগুলি এনকোড করা যায় তবে একটি চিহ্ন একটি এনকোড করার জন্য আমাদের একটি পছন্দ আছে। এবং A 1 এর মধ্যে আমাদের কোনটি ব্যবহার করা উচিত?A0A1
এখন এখানে চালাক ধারণা: আমরা রাষ্ট্র থেকে তথ্য এক বিট চুরি :s
s′=⌊s2⌋
i=smod2
এবং তারপর ।এনকোড ( গুলি)', এআমি)
আমাদের পূর্ববর্তী উদাহরণ, ব্যবহার করে আমরা দেখতে পাচ্ছি যে s ′ = 5 এবং i = 1 এবং তারপরে এনকোড করুন ( 5 , এ 1 )s = 11গুলি'= 5i = 1 । নতুন রাজ্যে বাইনারি 10101 হয়।এনকোড (5, এ)1) = 4 × 5 + 1 = 21
এখন এটি হাফম্যান কোডিংয়ের মতো হুবহু বিট আউটপুট তৈরি করে না তবে এটি একই আউটপুট তৈরি করে যা একই দৈর্ঘ্য has এবং আমি আশা করি আপনি দেখতে পাচ্ছেন এটি হ'ল এটিও অনন্যভাবে ডিকোডেবল। প্রতীকটি ডিকোড করার জন্য, 4 টি দিয়ে বিভাজন করার সময় আমরা বাকী অংশটি গ্রহণ করি যদি মান 2 বা 3 হয় তবে প্রতীকটি যথাক্রমে বি বা সি হয়। যদি এটি 0 বা 1 হয় তবে প্রতীকটি হ'ল, এবং তারপরে আমরা রাষ্ট্রটিকে 2 দ্বারা গুণিত করে 0 বা 1 যোগ করে কিছুটা তথ্য ফিরিয়ে রাখতে পারি।
এই পদ্ধতির সুন্দর জিনিসটি হ'ল এটি প্রাকৃতিকভাবে ভগ্নাংশ-বিট এনকোডিং পর্যন্ত প্রসারিত হয়, যখন সংখ্যার এবং / অথবা সম্ভাব্যতার বিভাজন দুটি হয় না। ধরুন আমাদের দুটি এবং A, B দুটি চিহ্ন রয়েছে যেখানে A এর সম্ভাবনা 3 is35 এবং বি এর সম্ভাবনা 25 । তারপরে আমরা এর সাথে একটি চিহ্নটি এনকোড করতে পারি:
এনকোড (গুলি, এ)0)এনকোড (গুলি, এ)1)এনকোড (গুলি, এ)2)এনকোড (গুলি, বি)0)এনকোড (গুলি, বি)1)= 5 এস + 0= 5 এস + 1= 5 এস + 2= 5 এস + 3= 5 এর + + 4
SYMBOL A এনকোড করার জন্য, আমরা নিতে গুলি'= ⌊ এস3⌋i = s mod 3এনকোড ( গুলি)', এআমি)
এটি পাটিগণিত কোডিংয়ের সমতুল্য। এটি প্রকৃতপক্ষে পরিচিত পদ্ধতিগুলির একটি পরিবার অসমমিত্রিক সংখ্যা সিস্টেম , এবং জারেক দুদা গত কয়েক বছর ধরে এটি বিকাশ করেছিলেন। নামের অর্থ সুস্পষ্ট হওয়া উচিত: সম্ভাবনা সহ একটি প্রতীক এনকোড করাপিকুই
কোডিং পদ্ধতির সংসার করার কারণটি হ'ল আমরা এখানে যা দেখেছি তা অযৌক্তিক; রাষ্ট্রের পরিবর্তনশীলকে দক্ষতার সাথে পরিচালনা করার জন্য আপনার কাছে সম্ভবত অসীম-নির্ভুল পূর্ণসংখ্যা নেই এবং এটি অর্জন করার বিভিন্ন উপায় রয়েছে তার সাথে সামঞ্জস্য করার জন্য এটিতে কিছু সংশোধন প্রয়োজন। পাটিগণিত কোডিং অবশ্যই তার রাজ্যের জন্য যথার্থ সঙ্গে একই সমস্যা আছে।
ব্যবহারিক রূপগুলিতে আরএনএস ("আর" অর্থ "অনুপাত") এবং টিএনএস ("টেবিল-চালিত") অন্তর্ভুক্ত রয়েছে।
ব্যবহারিক এবং তাত্ত্বিক উভয়ই পাটিগণিত কোডিংয়ের তুলনায় এএনএসের কয়েকটি আকর্ষণীয় সুবিধা রয়েছে:
- পাটিগণিত কোডিংয়ের বিপরীতে, "রাজ্য" হ'ল একক শব্দ, এক জোড়া শব্দের চেয়ে।
- কেবল এটিই নয়, একটি এএনএস এনকোডার এবং এর সাথে সম্পর্কিত ডিকোডারও রয়েছে অভিন্ন রাজ্য রয়েছে এবং তাদের ক্রিয়াকলাপগুলি সম্পূর্ণ প্রতিসাম্যযুক্ত। এটি কিছু আকর্ষণীয় সম্ভাবনা উত্থাপন করে, যেমন আপনি এনকোডড প্রতীকগুলির বিভিন্ন স্ট্রিমগুলি আন্তঃলিখন করতে পারেন এবং সবকিছু পুরোপুরি সিঙ্ক্রোনাইজ করে।
- ব্যবহারিক বাস্তবায়নগুলি অবশ্যই আপনার যেতে যেতে তথ্য "আউটপুট" করা দরকার, এবং কেবল এটি শেষের দিকে বড় বড় পূর্ণসংখ্যায় সংগ্রহ করা উচিত নয়। যাইহোক, "আউটপুট" এর আকারটি (সাধারণত বিনয়ী) সংক্ষেপণের ক্ষতির বিনিময়ে কনফিগার করা যায়। সুতরাং যেখানে পাটিগণিত কোডারকে একবারে কিছুটা আউটপুট দিতে হবে, এএনএস একবারে একটি বাইট বা একটি গলদল আউটপুট করতে পারে। এটি আপনাকে গতি এবং সংক্ষেপণের মধ্যে সরাসরি ট্রেড অফ দেয় off
- এটি বাইনারি পাটিগণিত কোডিংয়ের মতো বর্তমান প্রজন্মের হার্ডওয়্যার হিসাবে প্রায় দ্রুত বলে মনে হচ্ছে এবং তাই হাফম্যান কোডিংয়ের সাথে প্রতিযোগিতামূলক। এটি এটিকে বৃহত্তর বর্ণমালার গাণিতিক কোডিং এবং এর রূপগুলি (যেমন রেঞ্জ কোডিং) এর চেয়ে অনেক দ্রুত করে তোলে।
- এটি পেটেন্ট-মুক্ত বলে মনে হচ্ছে।
আমি মনে করি না আমি আর কখনও গাণিতিক কোডিং করব।