হাফম্যান এনকোডিং: কেন আলাদা করার দরকার নেই?


17
Char        Code
====        ====
E           0000
i           0001
y           0010
l           0011
k           0100
.           0101
space       011
e           10
r           1100
s           1101
n           1110
a           1111

মূল পাঠ্য:

হ্রদ কাছাকাছি ইরি চোখ

এনকোড হয়েছে:
0000101100000110011100010101101101001111101011111100011001111110100100101

হাফম্যান এনকোডিংয়ে কেন আলাদা করার দরকার নেই?


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

1
প্রশ্নটি বোঝায় যে সাধারণত বিভাজকগুলির প্রয়োজন হয়। আপনি ইতিমধ্যে জানেন যে আপনার মধ্যে বিভাজকের দরকার নেই Eerie eyes seen near lake(ভাল, স্থানের অক্ষর ব্যতীত)। তবে চরিত্রগুলির নিজস্ব বিভাজকের প্রয়োজন নেই। কেন হয় না?
MSalters

এটিকে নিজেই ডিকোড করার চেষ্টা করুন, কখনই কোনও দ্বিধা নেই।
njzk2

@MSalters কিন্তু বিভাজক হয় সাধারণত পরিবর্তনশীল দৈর্ঘ্যের শব্দের সঙ্গে প্রয়োজন:cat cheat for micecatch eat form ice। আপনার উপমা ত্রুটিযুক্ত: প্রতিটি অক্ষর পারমাণবিক; বর্ণগুলি তুচ্ছভাবে স্বতন্ত্র এবং স্বতন্ত্রভাবে পৃথকযোগ্য। আরও ভাল সাদৃশ্যটি হ'ল "কেন আপনি ক্রিসিভ (হস্তাক্ষর) লিপিটি পড়তে পারেন, যখন প্রতিটি শব্দ মাত্র একটি দীর্ঘ, স্কুইগলিং, স্ব-ছেদ করা রেখা?" এবং এমনকি এটি একটি স্বল্প উপমা, যেহেতু আপনি কোনও হস্তাক্ষরযুক্ত শব্দটি দেখতে পারেন ( বা এর একটি অংশও) এবং স্বতন্ত্র অক্ষরগুলি সনাক্ত করে - যেখানে আপনি সূচনাটি দেখতে না পারলে হফম্যান-এনকোডেড স্ট্রিংটি গীবর।
জি-ম্যান 23

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

উত্তর:


50

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

এর অর্থ হ'ল আপনি কোডওয়ার্ডের সাথে সাথেই বাম থেকে ডানদিকে এনকোডযুক্ত স্ট্রিংটি পড়ে এবং কোনও অক্ষর আউটপুট করে লোভের সাথে ডিকোড করতে পারেন। উদাহরণস্বরূপ, 0, 00 এবং 000 কোনও কোড না করে যাতে আপনি বিটগুলি পড়া চালিয়ে যান। আপনি যখন 0000 পড়েন, তখন এটি "E" এনকোড করে এবং কোডটি উপসর্গমুক্ত থাকায় আপনি জানেন যে অন্য কোনও কোডওয়ার্ড 0000x নেই, তাই এখন আপনি "E" আউটপুট এবং পরবর্তী কোডওয়ার্ডটি পড়া শুরু করতে পারেন। আবার, 1 টি 10 ​​টি এনকোড "ই" ব্যতীত অন্য কোনও এনকোড করে না। অন্য কোনও কোডওয়ার্ড "10" দিয়ে শুরু হয় না, তাই আপনি "ই" আউটপুট করতে পারেন। ইত্যাদি।


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

3
এটিও উল্লেখযোগ্য যে হ্যাফম্যান কোডের সংক্রামকে ডিকোড করার জন্য একটিকে অবশ্যই সঠিক কোডওয়ার্ড সীমানা দিয়ে দিতে হবে। যদি কেউ ভুল কোডওয়ার্ড সীমানায় ক্রমটি ডিকোড করার চেষ্টা করে তবে ডিকোডিং প্রক্রিয়া আউটপুট প্রতীকগুলির একটি ভুল ক্রম তৈরি করবে।
রোবং

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

@ সুপের্যাট আমি অনুমান করি আমি এটি অন্যভাবে বলব: হফম্যান ডিকোডারটি যদি প্রাথমিকভাবে একটি ভুল কোডওয়ার্ড সীমানায় সেট করা থাকে এবং প্রক্রিয়াজাতকরণ শুরু করে, তবে সম্ভাবনা রয়েছে (যা শূন্য বা কিছু হতে পারে এবং অভিধান এবং উভয় ক্ষেত্রেই নির্ভর করতে পারে) বিট স্ট্রিম সামগ্রীতে) এটি সীমাবদ্ধ সময়ে কাকতালীয়ভাবে একটি সঠিক কোডওয়ার্ডের সীমানায় অবতরণ করতে পারে এবং যখন এটি ঘটে তখন এটি পরবর্তী চিহ্নগুলির জন্য সঠিক ডিকোডিং ফলাফল আনবে। বৈশিষ্ট্যগুলি সম্পর্কে (কোডওয়ার্ড ডিকশনারি এবং বিট স্ট্রিমে) কিছু গবেষণা হয়েছে যা এই পুনরায় সমন্বয়ের গ্যারান্টি দেয় would
rwong

@ রুং: যদি মূল ডেটাটি এমন বিতরণের সাথে এলোমেলো হয়ে থাকে যে প্রবাহের বিটগুলির প্রত্যেকেরই এক বা শূন্য হওয়ার স্বতন্ত্র সম্ভাবনা থাকে তবে এন এর চেয়ে বেশি চিহ্নের জন্য সিঙ্কের বাইরে চলে যাওয়ার সম্ভাবনা তীব্র ক্ষয় হতে পারে এন এর সাথে বৃদ্ধি পাবে would প্রকৃত ডেটাতে এমন প্যাটার্নগুলি রয়েছে যা পুনরায় সংশ্লেষনকে আটকাতে পারে এমন সম্ভাবনা বেশি থাকে তবে বাস্তবে এটি সম্ভাবনা কম নয় যে 100 এমবি পাঠ্য ফাইলটি শুরু করার সময় কোনও ত্রুটি সমস্ত 100 এমবি পাঠ্যকে দূষিত করবে।
সুপারক্যাট

13

এটি গাছ হিসাবে কল্পনা করা সহায়ক। আপনি কোনও পাতা নোড না আঘাত করা পর্যন্ত এবং আপনি মূলটি থেকে পুনরায় আরম্ভ না করা পর্যন্ত আপনি কেবল গাছটিকে অনুসরণ করছেন। হাফম্যান কোডিং করে এমন অ্যালগরিদম থেকে আপনি দেখতে পাচ্ছেন যে এই ধরণের কাঠামো প্রক্রিয়াটিতে তৈরি হয়েছে।

https://en.wikipedia.org/wiki/File:HuffmanCodeAlg.png


6
এখানে গুরুত্বপূর্ণ দিকটি হ'ল সমস্ত বৈধ কোড শব্দ হ'ল পাতাগুলি। আপনার অভ্যন্তরীণ নোডগুলিতেও যদি চিহ্নগুলি থাকে তবে আপনার পৃথককারী প্রয়োজন।
এমভিজি

3

ই ছাড়া অন্য কোনও কোড 0000 দিয়ে শুরু হয় না i আমি ছাড়া অন্য কোনও কোড 0001 দিয়ে শুরু হয় না And এবং আরও on চরম ঘটনা হিসাবে, ই ছাড়া অন্য কোনও কোডের শুরু 01 থেকে নয় You

আপনার এনকোডড স্ট্রিংটি দেখুন: 0000101100000 ...

আপনি প্রথম শূন্য পড়া। আপনি জানেন যে কোডটি E, i, y, l, k, কমা বা স্থানের একটি। পরবর্তী শূন্যের অর্থ এটি কে, কমা বা স্থান নয়, তবে ই, আই, ওয়াই বা এল। পরবর্তী শূন্যের অর্থ এটি ই বা আমি। পরবর্তী শূন্যের অর্থ এটি একটি E. আপনি যখন জানবেন যে এটি কোন কোড, আপনি জানেন যে আপনি সেই কোডটির জন্য সমস্ত বিট পার্স করেছেন।

তারপরে আপনার 101100000 ... 1 টির অর্থ আপনার ই, আর, এস, এন বা এ রয়েছে। পরের বিট 0 হয়, তাই কোড ই হয়। আবার, আপনি সেই চরিত্রটি দিয়ে শেষ করেছেন।


-2

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


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