হাফম্যান কোডিং থেকে গাণিতিক কোডিংয়ের সাধারণীকরণ কি আছে?


11

হাফম্যান কোডিং, অ্যারিথমেটিক কোডিং এবং রেঞ্জ কোডিংয়ের মধ্যে সম্পর্কগুলি বোঝার চেষ্টা করার সময় আমি হাফম্যান কোডিংয়ের ভঙ্গিগুলি ভগ্নাংশ বিট-প্যাকিংয়ের সমস্যার সাথে সম্পর্কিত হতে শুরু করেছিলাম ।

উদাহরণস্বরূপ, ধরুন আপনার একটি চিহ্নের জন্য 240 সম্ভাব্য মান রয়েছে এবং এটি বিটগুলিতে এনকোড করার দরকার রয়েছে, আপনাকে প্রতীক প্রতি 8 বিট দিয়ে আটকে যাবেন, যদিও আপনার "পূর্ণ" 8 এর প্রয়োজন নেই, 8 টি 256 সম্ভাব্য মান প্রকাশ করতে পারে প্রতীক প্রতি এই সমস্যার সমাধান হ'ল এমন কিছু যা আমি "ভগ্নাংশ বিট প্যাকিং" হিসাবে উল্লেখ করেছি, যেখানে আপনি দু'জনের অ-শক্তি দ্বারা "বিটশিফ্ট" করতে সক্ষম হবেন গুণ দ্বারা। শক্তির দ্বিগুণকে যেমন দু'টির সমস্ত শক্তির বদল হয় x * 2 == x << 1এবং তেমনিভাবে আপনি তার পরিবর্তে গুণক দ্বারা x * 4 == x << 2অ-পাওয়ার -2-দিয়ে "শিফট" করতে পারেন এবং ভগ্নাংশ-বিট-আকারের চিহ্নগুলিতে প্যাক করতে পারেন ।

হাফম্যান কোডিংয়ের সাথেও সমস্যাটি একই: আপনার কোডগুলি শেষ হয় যা দৈর্ঘ্যে অ-ভগ্নাংশ-বিট-আকারের হওয়া আবশ্যক এবং তাই এর মধ্যে এই প্যাকিংয়ের অদক্ষতা রয়েছে। তবে, আপনি কেবল ফ্রেসিটোনাল বিট-প্যাকিংয়ের সমাধানটি ব্যবহার করতে পারবেন না, কারণ এই সমাধানটি নির্দিষ্ট আকারের প্রতীকগুলি ধরে নিয়েছে।

প্রশ্নটি হচ্ছে, পাটিগণিত কোডিংয়ের অনুরূপ কিছু অর্জনের জন্য ভগ্নাংশ-বিট-প্যাকিংয়ের অনুরূপ ধারণার সাথে হাফম্যান কোডিংয়ের উন্নতির জন্য কোনও কাগজপত্র বা সমাধান আছে কি? (বা বিপরীতে কোনও ফলাফল)।


1
পাটিগণিত কোডিং ইতিমধ্যে অনুকূল। এটির উন্নতি করার দরকার নেই।
যুবাল ফিল্মাস

@ ইউভালফিল্মাস হ্যাঁ আমি বলতে চাইছিলাম, হাফম্যান কোডিংয়ে কীভাবে এটি উন্নত করা যায় এটি গাণিতিক কোডিংয়ের সাথে সমতা আনার উপায়।
রিয়েলজ স্লাও

1
একটি পরামর্শ হিসাবে, আপনি পাটিগণিত কোডিংয়ের চেয়ে অসমমিতিক সংখ্যা সিস্টেম (এএনএস) কোডিং বোঝার পক্ষে আরও সহজ পেতে পারেন। বিশেষত, সেই নির্দিষ্ট সূত্রটি "ভগ্নাংশ বিট প্যাকিং" হিসাবে দেখতে কিছুটা সহজ।
ছদ্মনাম

@ ছদ্মনামটি আমি এই পৃষ্ঠাটি পেয়েছি যা দেখে মনে হচ্ছে যে আরএনএস এবং হাফম্যান কোডিংয়ের মধ্যে এই সংযোগ তৈরি করে। আমি এটি এখনও বুঝতে পারি তা বলতে পারি না তবে আমি মনে করি এটি যথেষ্ট হয়েছে। যদি আপনি মন্তব্যটি উত্তর দেন আমি গ্রহণ করব।
রিয়েলজ স্লাও

@ ইউভালফিল্মাস আমি আশা করি যে আমি এই বিষয়টি তৈরি করেছি যে পাটিগণিত কোডিংয়ের জন্য উন্নতির প্রয়োজন ছিল এবং এএনএস একটি উন্নতি।
ছদ্মনাম

উত্তর:


13

আসুন হাফম্যান কোডিং সম্পর্কে চিন্তাভাবনার কিছুটা ভিন্ন উপায় দেখুন।

ধরুন আপনার সম্ভাব্যতা 0.5, 0.25 এবং 0.25 সহ তিনটি চিহ্ন, এ, বি এবং সি এর বর্ণমালা রয়েছে। সম্ভাব্যতাগুলি দুটির বিপরীতমুখী শক্তি হওয়ায় এটির একটি হাফম্যান কোড রয়েছে যা সর্বোত্তম (যেমন এটি পাটিগণিত কোডিংয়ের সমান)। এই উদাহরণের জন্য আমরা ক্যানোনিকাল কোডটি 0, 10, 11 ব্যবহার করব।

মনে করুন আমাদের রাজ্যটি একটি বৃহত পূর্ণসংখ্যা, যা আমরা এসকে । আপনি এনকোডিংটিকে এমন একটি ফাংশন হিসাবে ভাবতে পারেন যা বর্তমান অবস্থা এবং এনকোডের প্রতীক হিসাবে নিয়ে যায় এবং নতুন অবস্থানে ফিরে আসে:গুলি

encode(s,A)=2sencode(s,B)=4s+2encode(s,C)=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)=4s+0encode(s,A1)=4s+1encode(s,B)=4s+2encode(s,C)=4s+3

সুতরাং এখন এটি পরিষ্কার হয়ে গেল কীভাবে বি এবং সি প্রতীকগুলি এনকোড করা যায় তবে একটি চিহ্ন একটি এনকোড করার জন্য আমাদের একটি পছন্দ আছে। এবং A 1 এর মধ্যে আমাদের কোনটি ব্যবহার করা উচিত?A0A1

এখন এখানে চালাক ধারণা: আমরা রাষ্ট্র থেকে তথ্য এক বিট চুরি :s

s=s2
i=smod2

এবং তারপর সঙ্কেতাক্ষরে লিখা(গুলি',একজনআমি)

আমাদের পূর্ববর্তী উদাহরণ, ব্যবহার করে আমরা দেখতে পাচ্ছি যে s = 5 এবং i = 1 এবং তারপরে এনকোড করুন ( 5 , 1 )গুলি=11গুলি'=5আমি=1 । নতুন রাজ্যে বাইনারি 10101 হয়।সঙ্কেতাক্ষরে লিখা(5,একজন1)=4×5+ +1=21

এখন এটি হাফম্যান কোডিংয়ের মতো হুবহু বিট আউটপুট তৈরি করে না তবে এটি একই আউটপুট তৈরি করে যা একই দৈর্ঘ্য has এবং আমি আশা করি আপনি দেখতে পাচ্ছেন এটি হ'ল এটিও অনন্যভাবে ডিকোডেবল। প্রতীকটি ডিকোড করার জন্য, 4 টি দিয়ে বিভাজন করার সময় আমরা বাকী অংশটি গ্রহণ করি যদি মান 2 বা 3 হয় তবে প্রতীকটি যথাক্রমে বি বা সি হয়। যদি এটি 0 বা 1 হয় তবে প্রতীকটি হ'ল, এবং তারপরে আমরা রাষ্ট্রটিকে 2 দ্বারা গুণিত করে 0 বা 1 যোগ করে কিছুটা তথ্য ফিরিয়ে রাখতে পারি।

এই পদ্ধতির সুন্দর জিনিসটি হ'ল এটি প্রাকৃতিকভাবে ভগ্নাংশ-বিট এনকোডিং পর্যন্ত প্রসারিত হয়, যখন সংখ্যার এবং / অথবা সম্ভাব্যতার বিভাজন দুটি হয় না। ধরুন আমাদের দুটি এবং A, B দুটি চিহ্ন রয়েছে যেখানে A এর সম্ভাবনা 3 is35 এবং বি এর সম্ভাবনা 25 । তারপরে আমরা এর সাথে একটি চিহ্নটি এনকোড করতে পারি:

সঙ্কেতাক্ষরে লিখা(গুলি,একজন0)=5গুলি+ +0সঙ্কেতাক্ষরে লিখা(গুলি,একজন1)=5গুলি+ +1সঙ্কেতাক্ষরে লিখা(গুলি,একজন2)=5গুলি+ +2সঙ্কেতাক্ষরে লিখা(গুলি,বি0)=5গুলি+ +3সঙ্কেতাক্ষরে লিখা(গুলি,বি1)=5গুলি+ +4

SYMBOL A এনকোড করার জন্য, আমরা নিতে গুলি'=গুলি3আমি=গুলিগেলিক ভাষার3সঙ্কেতাক্ষরে লিখা(গুলি',একজনআমি)

এটি পাটিগণিত কোডিংয়ের সমতুল্য। এটি প্রকৃতপক্ষে পরিচিত পদ্ধতিগুলির একটি পরিবার অসমমিত্রিক সংখ্যা সিস্টেম , এবং জারেক দুদা গত কয়েক বছর ধরে এটি বিকাশ করেছিলেন। নামের অর্থ সুস্পষ্ট হওয়া উচিত: সম্ভাবনা সহ একটি প্রতীক এনকোড করাপিকুই

কোডিং পদ্ধতির সংসার করার কারণটি হ'ল আমরা এখানে যা দেখেছি তা অযৌক্তিক; রাষ্ট্রের পরিবর্তনশীলকে দক্ষতার সাথে পরিচালনা করার জন্য আপনার কাছে সম্ভবত অসীম-নির্ভুল পূর্ণসংখ্যা নেই এবং এটি অর্জন করার বিভিন্ন উপায় রয়েছে তার সাথে সামঞ্জস্য করার জন্য এটিতে কিছু সংশোধন প্রয়োজন। পাটিগণিত কোডিং অবশ্যই তার রাজ্যের জন্য যথার্থ সঙ্গে একই সমস্যা আছে।

ব্যবহারিক রূপগুলিতে আরএনএস ("আর" অর্থ "অনুপাত") এবং টিএনএস ("টেবিল-চালিত") অন্তর্ভুক্ত রয়েছে।

ব্যবহারিক এবং তাত্ত্বিক উভয়ই পাটিগণিত কোডিংয়ের তুলনায় এএনএসের কয়েকটি আকর্ষণীয় সুবিধা রয়েছে:

  • পাটিগণিত কোডিংয়ের বিপরীতে, "রাজ্য" হ'ল একক শব্দ, এক জোড়া শব্দের চেয়ে।
  • কেবল এটিই নয়, একটি এএনএস এনকোডার এবং এর সাথে সম্পর্কিত ডিকোডারও রয়েছে অভিন্ন রাজ্য রয়েছে এবং তাদের ক্রিয়াকলাপগুলি সম্পূর্ণ প্রতিসাম্যযুক্ত। এটি কিছু আকর্ষণীয় সম্ভাবনা উত্থাপন করে, যেমন আপনি এনকোডড প্রতীকগুলির বিভিন্ন স্ট্রিমগুলি আন্তঃলিখন করতে পারেন এবং সবকিছু পুরোপুরি সিঙ্ক্রোনাইজ করে।
  • ব্যবহারিক বাস্তবায়নগুলি অবশ্যই আপনার যেতে যেতে তথ্য "আউটপুট" করা দরকার, এবং কেবল এটি শেষের দিকে বড় বড় পূর্ণসংখ্যায় সংগ্রহ করা উচিত নয়। যাইহোক, "আউটপুট" এর আকারটি (সাধারণত বিনয়ী) সংক্ষেপণের ক্ষতির বিনিময়ে কনফিগার করা যায়। সুতরাং যেখানে পাটিগণিত কোডারকে একবারে কিছুটা আউটপুট দিতে হবে, এএনএস একবারে একটি বাইট বা একটি গলদল আউটপুট করতে পারে। এটি আপনাকে গতি এবং সংক্ষেপণের মধ্যে সরাসরি ট্রেড অফ দেয় off
  • এটি বাইনারি পাটিগণিত কোডিংয়ের মতো বর্তমান প্রজন্মের হার্ডওয়্যার হিসাবে প্রায় দ্রুত বলে মনে হচ্ছে এবং তাই হাফম্যান কোডিংয়ের সাথে প্রতিযোগিতামূলক। এটি এটিকে বৃহত্তর বর্ণমালার গাণিতিক কোডিং এবং এর রূপগুলি (যেমন রেঞ্জ কোডিং) এর চেয়ে অনেক দ্রুত করে তোলে।
  • এটি পেটেন্ট-মুক্ত বলে মনে হচ্ছে।

আমি মনে করি না আমি আর কখনও গাণিতিক কোডিং করব।


4
এখন এটি এএনএস এনকোডিংয়ের স্পষ্ট ব্যাখ্যা যা আমি কখনও দেখেছি।
মাইকেল ডারিডেফ

2

একটি সাধারণ উদাহরণ হিসাবে, যদি আপনার প্রতিটি 1/3 য় সম্ভাব্যতা সহ তিনটি চিহ্ন থাকে তবে আপনার অনুকূল হাফম্যান এনকোডিংটিতে গড়ে 5, 3 b বিট সহ 0, 10 এবং 11 এই তিনটি চিহ্ন ব্যবহার করা হবে।

আসল প্রতীকগুলির 5 টিকে সম্মতি দিয়ে 243 টি প্রতীক তৈরি করা হয়েছে, যার প্রতিটিই সম্ভাবনা 1/243 রয়েছে। যা 1/256 এর অনেক কাছাকাছি। অনুকূল হাফম্যান এনকোডিং এই গ্রুপগুলির মধ্যে 13 টি 7 বিট এবং 230 টি গ্রুপকে 8 টি বিটগুলিতে এনকোড করবে, প্রতি গ্রুপে গড়ে 7.9465 বিট বা মূল প্রতীক হিসাবে 1.5893 বিট হিসাবে, মূল হাফম্যান কোডিংয়ের জন্য 1.6667 বিট থেকে নেমে গাণিতিক কোডিং 1.5850 নেবে বিট।

সুতরাং তত্ত্বের ক্ষেত্রে আপনি কেবল দুটি প্রতীককে এক একটি বৃহত্তর প্রতীক বা তিনটি চিহ্নকে এক একটি বৃহত্তর চিহ্নের সাথে একত্রিত করতে পারেন এবং সমন্বয়গুলির জন্য হুফম্যান কোডিং ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.