ترميز هوفمان
| شار | التردد | شفرة |
|---|---|---|
| فضاء | 7 | 111 |
| أ | 4 | 010 |
| هـ | 4 | 000 |
| ف | 3 | 1101 |
| ح | 2 | 1010 |
| أنا | 2 | 1000 |
| م | 2 | 0111 |
| ن | 2 | 0010 |
| س | 2 | 1011 |
| ت | 2 | 0110 |
| ل | 1 | 11001 |
| ا | 1 | 00110 |
| ص | 1 | 10011 |
| ر | 1 | 11000 |
| انت | 1 | 00111 |
| س | 1 | 10010 |
في علوم الكمبيوتر ونظرية المعلومات ، يعد كود هوفمان نوعًا معينًا من أكواد البادئة المثلى التي تُستخدم عادةً لضغط البيانات بدون فقدان . تُعرف عملية العثور على مثل هذا الكود أو استخدامه باسم ترميز هوفمان ، وهي خوارزمية طورها ديفيد أ. هوفمان عندما كان طالبًا في معهد ماساتشوستس للتكنولوجيا ، ونُشرت في ورقة بحثية عام 1952 بعنوان "طريقة لبناء أكواد الحد الأدنى من التكرار". [1]
يمكن اعتبار الناتج من خوارزمية هوفمان جدول أكواد بطول متغير لترميز رمز المصدر (مثل حرف في ملف). تستمد الخوارزمية هذا الجدول من الاحتمال المقدر أو تكرار الحدوث ( الوزن ) لكل قيمة ممكنة للرمز المصدر. كما هو الحال في طرق ترميز الإنتروبيا الأخرى ، يتم تمثيل الرموز الأكثر شيوعًا بشكل عام باستخدام عدد أقل من البتات مقارنة بالرموز الأقل شيوعًا. يمكن تنفيذ طريقة هوفمان بكفاءة، وإيجاد كود في وقت خطي لعدد أوزان الإدخال إذا تم فرز هذه الأوزان. [2] ومع ذلك، على الرغم من كونها مثالية بين الطرق التي تشفر الرموز بشكل منفصل، فإن ترميز هوفمان ليس دائمًا الأمثل بين جميع طرق الضغط - يتم استبداله بالترميز الحسابي [3] أو أنظمة الأرقام غير المتماثلة [4] إذا كانت هناك حاجة إلى نسبة ضغط أفضل.
تاريخ
في عام 1951، مُنح ديفيد أ. هوفمان وزملاؤه في نظرية المعلومات بمعهد ماساتشوستس للتكنولوجيا خيار كتابة بحث دراسي أو امتحان نهائي. كلف الأستاذ روبرت م. فانو الطلاب بكتابة بحث دراسي حول مشكلة إيجاد أكثر الشيفرات الثنائية كفاءة. كان هوفمان، غير قادر على إثبات أن أيًا من الشيفرات هي الأكثر كفاءة، على وشك الاستسلام والبدء في الدراسة للامتحان النهائي عندما خطرت له فكرة استخدام شجرة ثنائية مرتبة حسب التردد وأثبت بسرعة أن هذه الطريقة هي الأكثر كفاءة. [5]
وبذلك، تفوق هوفمان على فانو، الذي عمل مع كلود شانون لتطوير كود مماثل. فبناء الشجرة من الأسفل إلى الأعلى يضمن تحقيق أفضل النتائج، على عكس النهج من الأعلى إلى الأسفل في ترميز شانون-فانو .
مصطلحات
يستخدم ترميز هوفمان طريقة محددة لاختيار التمثيل لكل رمز، مما يؤدي إلى إنشاء رمز بادئة (يُطلق عليه أحيانًا "رموز خالية من البادئة"، أي أن سلسلة البتات التي تمثل رمزًا معينًا لا تكون أبدًا بادئة لسلسلة البتات التي تمثل أي رمز آخر). يعد ترميز هوفمان طريقة واسعة الانتشار لإنشاء رموز البادئة لدرجة أن مصطلح "رمز هوفمان" يُستخدم على نطاق واسع كمرادف لـ "رمز البادئة" حتى عندما لا يتم إنتاج مثل هذا الرمز بواسطة خوارزمية هوفمان.
تعريف المشكلة
تحتاج هذه المقالة إلى مصادر إضافية للتحقق . ( ديسمبر 2021 ) |

وصف غير رسمي
- منح
- مجموعة من الرموز وأوزانها (عادةً ما تكون متناسبة مع الاحتمالات).
- يجد
- رمز ثنائي خالٍ من البادئة (مجموعة من كلمات الرمز) مع الحد الأدنى المتوقع لطول كلمة الرمز (على نحو مكافئ، شجرة ذات طول مسار مرجح أدنى من الجذر).
الوصف الرسمي
الإدخال .
الأبجدية ، وهي أبجدية الرمز بحجم .
المجموعة ، وهي مجموعة أوزان الرمز (الموجبة) (عادةً ما تكون متناسبة مع الاحتمالات)، أي . الإخراج .
الكود ، وهي مجموعة كلمات الرمز (الثنائية)، حيث هي كلمة الرمز لـ . الهدف .
ليكن طول المسار المرجح للكود . الشرط: لأي كود .
مثال
سنقدم مثالاً لنتيجة ترميز هوفمان لرمز مكون من خمسة أحرف وأوزان معينة. لن نتحقق من أنه يقلل من قيمة L في جميع الرموز، لكننا سنحسب قيمة L ونقارنها بإنتروبيا شانون H لمجموعة الأوزان المعطاة؛ والنتيجة مثالية تقريبًا.
| الإدخال ( أ ، و ) | الرمز ( أ ) | أ | ب | ج | د | هـ | مجموع |
|---|---|---|---|---|---|---|---|
| الأوزان ( و ) | 0.10 | 0.15 | 0.30 | 0.16 | 0.29 | = 1 | |
| المخرج ج | كلمات السر ( ج ) | 010
|
011
|
11
|
00
|
10
|
|
| طول كلمة المرور (بالبتات) ( ℓ i ) |
3 | 3 | 2 | 2 | 2 | ||
| المساهمة في طول المسار المرجح ( ℓ i w i ) |
0.30 | 0.45 | 0.60 | 0.32 | 0.58 | ل ( ج ) = 2.25 | |
| الأمثلية | ميزانية الاحتمالات ( 2 − ℓ i ) |
1/8 | 1/8 | 1/4 | 1/4 | 1/4 | = 1.00 |
| محتوى المعلومات (بالبتات) ( −log 2 w i ) ≈ |
3.32 | 2.74 | 1.74 | 2.64 | 1.79 | ||
| المساهمة في الإنتروبيا ( − w i log 2 w i ) |
0.332 | 0.411 | 0.521 | 0.423 | 0.518 | ح ( أ ) = 2.205 |
بالنسبة لأي رمز فريد من نوعه ، أي أن الرمز قابل للفك بشكل فريد ، فإن مجموع ميزانيات الاحتمالات عبر جميع الرموز يكون دائمًا أقل من أو يساوي واحدًا. في هذا المثال، يكون المجموع مساويًا تمامًا لواحد؛ ونتيجة لذلك، يُطلق على الرمز رمزًا كاملاً . إذا لم يكن الأمر كذلك، فيمكن للمرء دائمًا استنباط رمز مكافئ عن طريق إضافة رموز إضافية (مع احتمالات فارغة مرتبطة)، لجعل الرمز مكتملًا مع الحفاظ عليه فريدًا من نوعه .
كما حدده شانون (1948) ، فإن محتوى المعلومات h (بالبتات) لكل رمز a i باحتمالية غير فارغة هو
الإنتروبيا H (بالبتات) هي المجموع المرجح، عبر جميع الرموز a i باحتمال غير صفري w i ، لمحتوى المعلومات لكل رمز:
(ملاحظة: الرمز ذو الاحتمالية الصفرية له مساهمة صفرية في الإنتروبيا، لأن . لذا، من أجل التبسيط، يمكن استبعاد الرموز ذات الاحتمالية الصفرية من الصيغة أعلاه.)
نتيجة لنظرية ترميز المصدر لشانون ، فإن الإنتروبيا هي مقياس لأصغر طول لكلمة رمزية ممكن نظريًا للأبجدية المحددة مع الأوزان المرتبطة بها. في هذا المثال، يبلغ متوسط طول كلمة الرمز المرجح 2.25 بت لكل رمز، وهو أكبر قليلاً فقط من الإنتروبيا المحسوبة البالغة 2.205 بت لكل رمز. لذا فإن هذا الكود ليس مثاليًا فقط بمعنى أنه لا يوجد كود آخر قابل للتنفيذ يعمل بشكل أفضل، ولكنه قريب جدًا من الحد النظري الذي وضعه شانون.
بشكل عام، لا يلزم أن يكون رمز هوفمان فريدًا. وبالتالي فإن مجموعة رموز هوفمان لتوزيع احتمالي معين هي مجموعة فرعية غير فارغة من رموز التقليل لتوزيع الاحتمال هذا. (ومع ذلك، لكل تعيين طول كلمة رمزية لتقليل، يوجد رمز هوفمان واحد على الأقل بهذه الأطوال.)
التقنية الأساسية
ضغط

BED". في الخطوات من 2 إلى 6، يتم فرز الحروف حسب التردد المتزايد، ويتم دمج الحرفين الأقل تكرارًا في كل خطوة وإعادة إدراجهما في القائمة، ويتم إنشاء شجرة جزئية. يتم اجتياز الشجرة الأخيرة في الخطوة 6 لتوليد القاموس في الخطوة 7. تستخدمها الخطوة 8 لتشفير الرسالة.
| رمز | شفرة |
|---|---|
| أ1 | 0 |
| أ2 | 10 |
| أ3 | 110 |
| أ4 | 111 |
تعمل هذه التقنية عن طريق إنشاء شجرة ثنائية من العقد. يمكن تخزينها في مصفوفة منتظمة ، يعتمد حجمها على عدد الرموز، . يمكن أن تكون العقدة إما عقدة ورقية أو عقدة داخلية . في البداية، تكون جميع العقد عقدًا ورقية، والتي تحتوي على الرمز نفسه ووزن (تكرار ظهور) الرمز واختياريًا رابطًا إلى عقدة رئيسية مما يسهل قراءة الكود (بالعكس) بدءًا من عقدة ورقية. تحتوي العقد الداخلية على وزن وروابط إلى عقدتين فرعيتين ورابط اختياري إلى عقدة رئيسية . كاتفاقية شائعة، يمثل البت "0" متابعة الطفل الأيسر ويمثل البت "1" متابعة الطفل الأيمن. تحتوي الشجرة النهائية على ما يصل إلى عقدة ورقية وعقد داخلية. تنتج شجرة هوفمان التي تحذف الرموز غير المستخدمة أطوال الكود المثلى.
تبدأ العملية بالعقد الورقية التي تحتوي على احتمالات الرمز الذي تمثله. ثم تأخذ العملية العقدتين اللتين لديهما أقل احتمالية، وتنشئ عقدة داخلية جديدة تحتوي على هاتين العقدتين كأبناء. يتم تعيين وزن العقدة الجديدة على مجموع وزن الأبناء. ثم نطبق العملية مرة أخرى، على العقدة الداخلية الجديدة وعلى العقد المتبقية (أي نستبعد العقدتين الورقيتين)، ونكرر هذه العملية حتى تبقى عقدة واحدة فقط، وهي جذر شجرة هوفمان.
تستخدم خوارزمية البناء الأكثر بساطة قائمة انتظار ذات أولوية حيث يتم منح العقدة ذات الاحتمال الأقل الأولوية الأعلى:
- قم بإنشاء عقدة ورقة لكل رمز وأضفها إلى قائمة الأولويات.
- في حين أن هناك أكثر من عقدة في قائمة الانتظار:
- قم بإزالة العقدتين اللتين تتمتعان بأعلى أولوية (أقل احتمالية) من قائمة الانتظار
- قم بإنشاء عقدة داخلية جديدة بهاتين العقدتين كأطفال وباحتمال يساوي مجموع احتمالات العقدتين.
- أضف العقدة الجديدة إلى قائمة الانتظار.
- العقدة المتبقية هي العقدة الجذرية والشجرة مكتملة.
نظرًا لأن هياكل بيانات قائمة الانتظار ذات الأولوية الفعالة تتطلب وقتًا O(log n ) لكل إدراج، والشجرة ذات الأوراق n تحتوي على 2 n −1 عقدة، تعمل هذه الخوارزمية في وقت O( n log n )، حيث n هو عدد الرموز.
إذا تم فرز الرموز حسب الاحتمالية، فهناك طريقة زمنية خطية (O( n )) لإنشاء شجرة هوفمان باستخدام طابورين ، الأول يحتوي على الأوزان الأولية (إلى جانب مؤشرات للأوراق المرتبطة)، والأوزان المجمعة (إلى جانب مؤشرات للأشجار) توضع في الجزء الخلفي من الطابور الثاني. وهذا يضمن أن الوزن الأدنى يبقى دائمًا في مقدمة أحد الطابورين:
- ابدأ بعدد الأوراق بقدر عدد الرموز.
- قم بإدراج جميع العقد الورقية في قائمة الانتظار الأولى (حسب الاحتمالية بترتيب تصاعدي بحيث يكون العنصر الأقل احتمالاً في رأس قائمة الانتظار).
- في حين أن هناك أكثر من عقدة في قوائم الانتظار:
- قم بإزالة العقدتين اللتين لديهما أقل وزن من قائمة الانتظار عن طريق فحص الواجهة الأمامية لكلا الطابورين.
- إنشاء عقدة داخلية جديدة، مع العقدتين اللتين تمت إزالتهما للتو كأبناء (يمكن لأي عقدة أن تكون أيًا من العقدتين) ومجموع أوزانهما كالوزن الجديد.
- قم بإدراج العقدة الجديدة في الجزء الخلفي من قائمة الانتظار الثانية.
- العقدة المتبقية هي العقدة الجذرية؛ وقد تم الآن إنشاء الشجرة.
بمجرد إنشاء شجرة هوفمان، يتم اجتيازها لتوليد قاموس يقوم بتعيين الرموز إلى أكواد ثنائية على النحو التالي:
- ابدأ بمجموعة العقدة الحالية إلى الجذر.
- إذا لم تكن العقدة عقدة ورقية، فقم بتسمية الحافة إلى الطفل الأيسر بـ 0 والحافة إلى الطفل الأيمن بـ 1. كرر العملية في كل من الطفل الأيسر والطفل الأيمن.
يتم بعد ذلك قراءة التشفير النهائي لأي رمز من خلال سلسلة من العلامات على الحواف على طول المسار من العقدة الجذرية إلى الرمز.
في كثير من الحالات، لا يكون التعقيد الزمني مهمًا جدًا في اختيار الخوارزمية هنا، نظرًا لأن n هنا هو عدد الرموز في الأبجدية، وهو عادةً عدد صغير جدًا (مقارنة بطول الرسالة التي يجب تشفيرها)؛ في حين أن تحليل التعقيد يتعلق بالسلوك عندما ينمو n ليصبح كبيرًا جدًا.
من المفيد عمومًا تقليل تباين طول كلمة المرور. على سبيل المثال، قد يلزم أن يكون مخزن الاتصالات الذي يستقبل البيانات المشفرة باستخدام هوفمان أكبر للتعامل مع الرموز الطويلة بشكل خاص إذا كانت الشجرة غير متوازنة بشكل خاص. لتقليل التباين، ما عليك سوى قطع الروابط بين الطوابير عن طريق اختيار العنصر في الطابور الأول. سيحافظ هذا التعديل على الأمثلية الرياضية لترميز هوفمان مع تقليل التباين وتقليل طول أطول رمز حرف.
إزالة الضغط
بشكل عام، عملية فك الضغط هي ببساطة مسألة ترجمة تدفق رموز البادئة إلى قيم بايتات فردية، وعادة ما يتم ذلك عن طريق عبور شجرة هوفمان عقدة بعقدة مع قراءة كل بت من تدفق الإدخال (الوصول إلى عقدة ورقة ينهي بالضرورة البحث عن قيمة البايت المعينة). ومع ذلك، قبل أن يتم ذلك، يجب إعادة بناء شجرة هوفمان بطريقة ما. في أبسط الحالات، حيث يمكن التنبؤ بترددات الأحرف إلى حد ما، يمكن إنشاء الشجرة مسبقًا (وحتى تعديلها إحصائيًا في كل دورة ضغط) وبالتالي إعادة استخدامها في كل مرة، على حساب قدر معين على الأقل من كفاءة الضغط. خلافًا لذلك، يجب إرسال المعلومات لإعادة بناء الشجرة مسبقًا. قد يكون النهج الساذج هو إضافة عدد ترددات كل حرف إلى تدفق الضغط. لسوء الحظ، قد تبلغ التكلفة الإضافية في مثل هذه الحالة عدة كيلوبايت، لذلك فإن هذه الطريقة لها فائدة عملية قليلة. إذا تم ضغط البيانات باستخدام الترميز الأساسي ، فيمكن إعادة بناء نموذج الضغط بدقة باستخدام بتات المعلومات فقط (حيث B هو عدد البتات لكل رمز). هناك طريقة أخرى وهي ببساطة إضافة شجرة هوفمان، بت بت، إلى مجرى الإخراج. على سبيل المثال، بافتراض أن قيمة 0 تمثل عقدة رئيسية و1 عقدة ورقية، كلما تم مواجهة الأخيرة، فإن روتين بناء الشجرة يقرأ ببساطة البتات الثمانية التالية لتحديد قيمة حرف تلك الورقة المعينة. تستمر العملية بشكل متكرر حتى يتم الوصول إلى آخر عقدة ورقية؛ عند هذه النقطة، سيتم إعادة بناء شجرة هوفمان بأمانة. تتراوح النفقات العامة باستخدام مثل هذه الطريقة من 2 إلى 320 بايت تقريبًا (بافتراض أبجدية مكونة من 8 بتات). هناك العديد من التقنيات الأخرى الممكنة أيضًا. في كل الأحوال، نظرًا لأن البيانات المضغوطة يمكن أن تتضمن "بتات متأخرة" غير مستخدمة، فيجب أن يكون برنامج فك الضغط قادرًا على تحديد متى يتوقف عن إنتاج الإخراج. يمكن تحقيق ذلك إما عن طريق نقل طول البيانات التي تم فك ضغطها مع نموذج الضغط أو عن طريق تحديد رمز كود خاص للإشارة إلى نهاية الإدخال (ومع ذلك، فإن الطريقة الأخيرة يمكن أن تؤثر سلبًا على تحسين طول الكود).
الخصائص الرئيسية
يمكن أن تكون الاحتمالات المستخدمة عامة لمجال التطبيق وتستند إلى الخبرة المتوسطة، أو يمكن أن تكون الترددات الفعلية الموجودة في النص الذي يتم ضغطه. وهذا يتطلب تخزين جدول ترددات مع النص المضغوط. راجع قسم فك الضغط أعلاه لمزيد من المعلومات حول التقنيات المختلفة المستخدمة لهذا الغرض.
الأمثلية
إن خوارزمية هوفمان الأصلية هي الأمثل للترميز الرمزي مع توزيع احتمالية إدخال معروف، أي الترميز المنفصل للرموز غير ذات الصلة في مثل هذا التدفق من البيانات. ومع ذلك، فهي ليست الأمثل عندما يتم إسقاط قيد الرمز الرمزي، أو عندما تكون وظائف كتلة الاحتمال غير معروفة. أيضًا، إذا لم تكن الرموز مستقلة وموزعة بشكل متطابق ، فقد لا يكون الكود الواحد كافيًا لتحقيق الأمثلية. غالبًا ما تتمتع الطرق الأخرى مثل الترميز الحسابي بقدرة ضغط أفضل.
على الرغم من أن الطريقتين المذكورتين أعلاه يمكنهما الجمع بين عدد عشوائي من الرموز من أجل ترميز أكثر كفاءة والتكيف بشكل عام مع إحصاءات الإدخال الفعلية، فإن الترميز الحسابي يفعل ذلك دون زيادة تعقيداته الحسابية أو الخوارزمية بشكل كبير (على الرغم من أن أبسط نسخة أبطأ وأكثر تعقيدًا من ترميز هوفمان). تكون هذه المرونة مفيدة بشكل خاص عندما لا تكون احتمالات الإدخال معروفة بدقة أو تختلف بشكل كبير داخل الدفق. ومع ذلك، فإن ترميز هوفمان أسرع عادةً وكان الترميز الحسابي تاريخيًا موضوعًا لبعض القلق بشأن قضايا براءات الاختراع . وبالتالي، تجنبت العديد من التقنيات تاريخيًا الترميز الحسابي لصالح ترميز هوفمان وتقنيات ترميز البادئة الأخرى. اعتبارًا من منتصف عام 2010، انتقلت التقنيات الأكثر استخدامًا لهذا البديل لترميز هوفمان إلى المجال العام حيث انتهت صلاحية براءات الاختراع المبكرة.
بالنسبة لمجموعة من الرموز ذات توزيع احتمالي موحد وعدد من العناصر التي تكون قوة اثنين ، فإن ترميز هوفمان يعادل ترميز الكتلة الثنائية البسيط ، على سبيل المثال، ترميز ASCII . وهذا يعكس حقيقة مفادها أن الضغط غير ممكن مع مثل هذا الإدخال، بغض النظر عن طريقة الضغط، أي أن عدم القيام بأي شيء للبيانات هو الشيء الأمثل.
إن ترميز هوفمان هو الأمثل بين جميع الطرق في أي حالة حيث يكون كل رمز إدخال عبارة عن متغير عشوائي مستقل وموزع بشكل متطابق وله احتمال ثنائي . تميل أكواد البادئة، وبالتالي ترميز هوفمان على وجه الخصوص، إلى عدم الكفاءة في الأبجديات الصغيرة، حيث تقع الاحتمالات غالبًا بين هذه النقاط المثلى (الثنائية). يمكن أن تحدث أسوأ حالة لترميز هوفمان عندما يتجاوز احتمال الرمز الأكثر ترجيحًا 2 −1 = 0.5، مما يجعل الحد الأعلى لعدم الكفاءة غير محدود.
هناك طريقتان مرتبطتان للتغلب على هذا القصور المعين مع الاستمرار في استخدام ترميز هوفمان. غالبًا ما يؤدي الجمع بين عدد ثابت من الرموز معًا ("الحظر") إلى زيادة الضغط (ولا يقلله أبدًا). مع اقتراب حجم الكتلة من اللانهاية، يقترب ترميز هوفمان نظريًا من حد الإنتروبيا، أي الضغط الأمثل. [6] ومع ذلك، فإن حظر مجموعات كبيرة بشكل تعسفي من الرموز غير عملي، حيث أن تعقيد ترميز هوفمان خطي في عدد الاحتمالات المراد ترميزها، وهو رقم أسي في حجم الكتلة. هذا يحد من مقدار الحظر الذي يتم إجراؤه عمليًا.
البديل العملي، المستخدم على نطاق واسع، هو الترميز بطول التشغيل . تضيف هذه التقنية خطوة واحدة إلى الأمام من الترميز الإنتروبي، وتحديدًا عد (تشغيلات) الرموز المتكررة، والتي يتم ترميزها بعد ذلك. بالنسبة للحالة البسيطة لعمليات برنولي ، فإن ترميز جولومب هو الأمثل بين أكواد البادئة لترميز طول التشغيل، وهي حقيقة أثبتتها تقنيات ترميز هوفمان. [7] يتم اتباع نهج مماثل بواسطة أجهزة الفاكس باستخدام ترميز هوفمان المعدل . ومع ذلك، فإن الترميز بطول التشغيل ليس قابلاً للتكيف مع العديد من أنواع الإدخال مثل تقنيات الضغط الأخرى.
الاختلافات
توجد العديد من الاختلافات في ترميز هوفمان، [8] بعضها يستخدم خوارزمية شبيهة بخوارزمية هوفمان، والبعض الآخر يبحث عن أكواد بادئة مثالية (مع وضع قيود مختلفة على المخرجات على سبيل المثال). لاحظ أنه في الحالة الأخيرة، لا يلزم أن تكون الطريقة شبيهة بخوارزمية هوفمان، بل ولا يلزم حتى أن تكون ذات زمن حدودي .
ن-آري هوفمان الترميز
تستخدم خوارزمية هوفمان n -ary الأبجدية {0, 1,..., n − 1} لتشفير الرسالة وبناء شجرة n -ary. وقد نظر هوفمان في هذا النهج في ورقته الأصلية. تنطبق نفس الخوارزمية كما هو الحال بالنسبة للرموز الثنائية ( )، باستثناء أن أقل الرموز احتمالاً n تؤخذ معًا، بدلاً من أقل 2 رمزين احتمالاً فقط. لاحظ أنه بالنسبة لـ n أكبر من 2، لا يمكن لجميع مجموعات الكلمات المصدرية تكوين شجرة n -ary بشكل صحيح لترميز هوفمان. في هذه الحالات، يجب إضافة عناصر مكان إضافية ذات احتمال 0. وذلك لأن الشجرة يجب أن تشكل مقاولًا من n إلى 1؛ [ يحتاج إلى توضيح ] للترميز الثنائي، يكون هذا مقاولًا من 2 إلى 1، ويمكن لأي مجموعة بأي حجم تكوين مثل هذا المقاول. إذا كان عدد الكلمات المصدرية متطابقًا مع 1 modulo n − 1، فإن مجموعة الكلمات المصدرية ستشكل شجرة هوفمان مناسبة.
الترميز هوفمان التكيفي
تتضمن إحدى المتغيرات المسماة ترميز هوفمان التكيفي حساب الاحتمالات ديناميكيًا استنادًا إلى الترددات الفعلية الأخيرة في تسلسل رموز المصدر، وتغيير بنية شجرة الترميز لتتوافق مع تقديرات الاحتمالات المحدثة. نادرًا ما يتم استخدامها في الممارسة العملية، نظرًا لأن تكلفة تحديث الشجرة تجعلها أبطأ من الترميز الحسابي التكيفي المحسن ، والذي يتميز بمرونة أكبر وضغط أفضل.
خوارزمية قالب هوفمان
في أغلب الأحيان، تمثل الأوزان المستخدمة في تنفيذات ترميز هوفمان احتمالات عددية، لكن الخوارزمية المذكورة أعلاه لا تتطلب ذلك؛ فهي تتطلب فقط أن تشكل الأوزان وحدة تبديلية مرتبة تمامًا ، مما يعني طريقة لترتيب الأوزان وإضافتها. تمكن خوارزمية قالب هوفمان المرء من استخدام أي نوع من الأوزان (التكاليف والترددات وأزواج الأوزان والأوزان غير العددية) وواحدة من العديد من طرق الجمع (ليس فقط الجمع). يمكن لهذه الخوارزميات حل مشكلات التقليل الأخرى، مثل التقليل ، وهي مشكلة تم تطبيقها لأول مرة على تصميم الدوائر.
ترميز هوفمان المحدود الطول/ترميز هوفمان ذو التباين الأدنى
ترميز هوفمان المحدود الطول هو أحد المتغيرات حيث لا يزال الهدف هو تحقيق طول مسار مرجح أدنى، ولكن هناك قيد إضافي وهو أن طول كل كلمة رمزية يجب أن يكون أقل من ثابت معين. تحل خوارزمية دمج الحزم هذه المشكلة بنهج جشع بسيط مشابه جدًا لذلك المستخدم في خوارزمية هوفمان. تعقيدها الزمني هو ، حيث هو الحد الأقصى لطول كلمة رمزية. لا توجد خوارزمية معروفة لحل هذه المشكلة في أو وقت، على عكس مشكلات هوفمان التقليدية المصنفة مسبقًا وغير المصنفة على التوالي.
ترميز هوفمان بتكلفة أحرف غير متساوية
في مشكلة ترميز هوفمان القياسية، يُفترض أن كل رمز في المجموعة التي يتم إنشاء الكلمات الرمزية منها له تكلفة متساوية للإرسال: الكلمة الرمزية التي يبلغ طولها N رقمًا سيكون لها دائمًا تكلفة N ، بغض النظر عن عدد هذه الأرقام التي هي 0، وعدد الأرقام التي هي 1، وما إلى ذلك. عند العمل بموجب هذا الافتراض، فإن تقليل التكلفة الإجمالية للرسالة وتقليل العدد الإجمالي للأرقام هما نفس الشيء.
إن ترميز هوفمان بتكلفة أحرف غير متساوية هو التعميم بدون هذا الافتراض: قد يكون لحروف أبجدية الترميز أطوال غير موحدة، بسبب خصائص وسيط الإرسال. ومن الأمثلة على ذلك أبجدية ترميز شفرة مورس ، حيث يستغرق إرسال "الشرطة" وقتًا أطول من "النقطة"، وبالتالي تكون تكلفة الشرطة في وقت الإرسال أعلى. لا يزال الهدف هو تقليل طول كلمة المرور المتوسطة المرجحة، لكن لم يعد من الكافي مجرد تقليل عدد الرموز التي تستخدمها الرسالة. لا توجد خوارزمية معروفة لحل هذه المشكلة بنفس الطريقة أو بنفس الكفاءة مثل ترميز هوفمان التقليدي، على الرغم من أن ريتشارد م. كارب [9] حلها ، وقد تم تحسين حله لحالة تكاليف الأعداد الصحيحة بواسطة موردخاي جيه. جولين [10] .
الأشجار الثنائية الأبجدية المثالية (ترميز Hu–Tucker)
في مشكلة ترميز هوفمان القياسية، يُفترض أن أي كلمة رمزية يمكن أن تتوافق مع أي رمز إدخال. في الإصدار الأبجدي، يجب أن يكون الترتيب الأبجدي للمدخلات والمخرجات متطابقًا. وبالتالي، على سبيل المثال، لا يمكن تعيين رمز ، ولكن بدلاً من ذلك يجب تعيين إما أو . تُعرف هذه أيضًا باسم مشكلة Hu–Tucker ، بعد TC Hu و Alan Tucker ، مؤلفي الورقة التي تقدم الحل لأول مرة لهذه المشكلة الأبجدية الثنائية المثلى، [11] والتي لها بعض أوجه التشابه مع خوارزمية هوفمان، لكنها ليست اختلافًا لهذه الخوارزمية. تستخدم طريقة لاحقة، خوارزمية جارسيا-واكس لأدريانو جارسيا وميشيل إل. واكس (1977)، منطقًا أبسط لإجراء نفس المقارنات في نفس الحد الزمني الإجمالي. غالبًا ما تُستخدم أشجار ثنائية أبجدية مثالية كأشجار بحث ثنائية . [12]
شفرة هوفمان القياسية
إذا كانت الأوزان المقابلة للمدخلات المرتبة أبجديًا مرتبة عدديًا، فإن كود هوفمان له نفس أطوال الكود الأبجدي الأمثل، والذي يمكن العثور عليه من حساب هذه الأطوال، مما يجعل ترميز هو-تاكر غير ضروري. يُطلق على الكود الناتج عن المدخلات المرتبة (أو المعاد ترتيبها) رقميًا أحيانًا اسم كود هوفمان الأساسي وغالبًا ما يكون الكود المستخدم في الممارسة العملية، نظرًا لسهولة الترميز/فك التشفير. تسمى تقنية العثور على هذا الكود أحيانًا ترميز هوفمان-شانون-فانو ، لأنه مثالي مثل ترميز هوفمان، ولكنه أبجدي في احتمالية الوزن، مثل ترميز شانون-فانو . كود هوفمان-شانون-فانو المقابل للمثال هو ، والذي له نفس أطوال الكلمات المشفرة مثل الحل الأصلي، وهو أيضًا مثالي. ولكن في كود هوفمان الأساسي ، تكون النتيجة هي .
التطبيقات
ينتج الترميز الحسابي وترميز هوفمان نتائج متكافئة - تحقيق الإنتروبيا - عندما يكون لكل رمز احتمال من النموذج 1/2 k . في ظروف أخرى، يمكن أن يوفر الترميز الحسابي ضغطًا أفضل من ترميز هوفمان لأنه - بديهيًا - يمكن أن يكون لـ "كلمات الكود" الخاصة به أطوال بتات غير صحيحة فعليًا، في حين أن كلمات الكود في أكواد البادئة مثل أكواد هوفمان لا يمكن أن يكون لها سوى عدد صحيح من البتات. لذلك، فإن كلمة الكود بطول k تطابق بشكل مثالي فقط رمزًا باحتمال 1/2 k ولا يتم تمثيل الاحتمالات الأخرى بشكل مثالي؛ في حين يمكن جعل طول كلمة الكود في الترميز الحسابي يتطابق تمامًا مع الاحتمال الحقيقي للرمز. هذا الاختلاف ملحوظ بشكل خاص في أحجام الأبجدية الصغيرة. [ بحاجة لمصدر ]
ومع ذلك، تظل أكواد البادئة مستخدمة على نطاق واسع بسبب بساطتها وسرعتها العالية وعدم تغطيتها ببراءات الاختراع . وغالبًا ما تُستخدم كـ "واجهة خلفية" لطرق الضغط الأخرى. تحتوي برامج ترميز Deflate ( خوارزمية PKZIP ) والوسائط المتعددة مثل JPEG و MP3 على نموذج واجهة أمامية وتكميم يتبعه استخدام أكواد البادئة؛ وغالبًا ما تسمى هذه "أكواد هوفمان" على الرغم من أن معظم التطبيقات تستخدم أكوادًا ذات طول متغير محددة مسبقًا بدلاً من الأكواد المصممة باستخدام خوارزمية هوفمان.
مراجع
- ^ هوفمان، د. (1952). "طريقة لبناء أكواد الحد الأدنى من التكرار" (PDF) . وقائع مؤتمر IRE . 40 (9): 1098-1101. doi :10.1109/JRPROC.1952.273898.
- ^ فان ليوين، جان (1976). "حول بناء أشجار هوفمان" (PDF) . ICALP : 382–410 . تم الاسترجاع في 2014-02-20 .
- ^ زي نيان لي؛ مارك س. درو؛ جيانج تشوان ليو (2014-04-09). أساسيات الوسائط المتعددة. سبرينغر ساينس آند بيزنس ميديا. رقم ISBN 978-3-319-05290-8.
- ^ ج. دودا، ك. طهبوب، إن جيه جاديل، إي جيه ديلب، استخدام أنظمة الأرقام غير المتماثلة كبديل دقيق لترميز هوفمان، ندوة ترميز الصور، 2015.
- ^ هوفمان، كين (1991). "الملف الشخصي: ديفيد أ. هوفمان: ترميز "دقة" الواحدات والأصفار". مجلة ساينتفك أمريكان : 54-58.
- ^ جريبوف، ألكسندر (2017-04-10). "الضغط الأمثل لخط متعدد الخطوط مع مقاطع وأقواس". arXiv : 1604.07476 [cs.CG].
- ^ Gallager, RG; van Voorhis, DC (1975). "Optimal source codes for engineeringally distribute integer alphabets". IEEE Transactions on Information Theory . 21 (2): 228–230. doi :10.1109/TIT.1975.1055357.
- ^ أبراهامز، ج. (11 يونيو 1997). "أشجار الكود والتحليل للترميز المصدري الخالي من الفقدان". كُتب في أرلينجتون، فيرجينيا، الولايات المتحدة الأمريكية. الإجراءات. ضغط وتعقيد التسلسلات 1997 (رقم الفهرس 97TB100171) . قسم الرياضيات وعلوم الكمبيوتر والمعلومات، مكتب البحوث البحرية (ONR). ساليرنو: معهد مهندسي الكهرباء والإلكترونيات . ص. 145-171. CiteSeerX 10.1.1.589.4726 . doi :10.1109/SEQUEN.1997.666911. ISBN 0-8186-8132-2. S2CID 124587565.
- ^ كارب، ريتشارد م. (1961-01-31). "ترميز الحد الأدنى من التكرار للقناة المنفصلة الخالية من الضوضاء" . معاملات معهد مهندسي الكهرباء والإلكترونيات في نظرية المعلومات . 7 (1). IEEE: 27–38. doi :10.1109/TIT.1961.1057615 – عبر معهد مهندسي الكهرباء والإلكترونيات.
- ^ Golin, Mordekai J. (January 1998). "A Dynamic Programming Algorithm for Constructing Optimal Prefix-Free Codes with Unequal Letter Costs" (PDF) . IEEE Transactions on Information Theory . 44 (5) (نُشر في 1998-09-01): 1770–1781. doi :10.1109/18.705558. S2CID 2265146. تم الاسترجاع في 2024-09-10 .
- ^ Hu, TC ; Tucker, AC (1971). "Optimal Computer Search Trees and Variable-Length Alphabetical Codes". مجلة SIAM للرياضيات التطبيقية . 21 (4): 514. doi :10.1137/0121057. JSTOR 2099603.
- ^ Knuth, Donald E. (1998), "Algorithm G (Garsia–Wachs algorithm for optimum binary trees)", فن برمجة الكمبيوتر، المجلد 3: الفرز والبحث (الطبعة الثانية)، Addison–Wesley، ص 451-453. انظر أيضًا التاريخ والمراجع، ص 453-454.
فهرس
- توماس إتش. كورمن ، تشارلز إي. ليسيرسون ، رونالد إل. ريفيست ، وكليفورد شتاين . مقدمة في الخوارزميات ، الطبعة الثانية. مطبعة معهد ماساتشوستس للتكنولوجيا وماكجرو هيل، 2001. رقم ISBN 0-262-03293-7 . القسم 16.3، ص 385-392.
روابط خارجية
- برمجة هوفمان بمختلف اللغات على Rosetta Code
- أكواد هوفمان (تنفيذ بايثون)
- أكواد هوفمان القياسية (تنفيذ C)
- تصور لبرمجة هوفمان
