ترميز الإنتروبي
عندنا رموز، لكلٍّ احتمال، ونريد كتابتها بأقرب ما يمكن إلى حدّ
شانون H. سنبني أربعة أجيال يصلح كلٌّ خطأ سابقه:
RLE → Huffman → الحسابي → ANS — وهي كلّ مرمّزات صيغ الصور قاطبةً.
مصدر برموز A:0.9 B:0.04 C:0.03 D:0.03. احسب H
(ستجده أقلّ من بِت واحد بكثير).
صمّم أكواد بادئة (prefix-free). المشكلة: أقصر كود طوله بِت واحد على الأقل. فمتوسّطك ≥ ١ بِت/رمز مهما فعلت — لكن H أقلّ من ١! أنت محشور: شانون يقول الحدّ أقلّ من بِت، لكن "بِت واحد" أصغر عملة تملكها. كيف تنفق نصف بِت على رمز؟
الجيل الأول: Huffman — مثلى لكن صحيحة
الرمز الأشيع يستحق كوداً أقصر. مثّل الأكواد كشجرة ثنائية؛ كل ورقة رمز، والمسار إليها كوده — وشرط البادئة يتحقّق تلقائياً (كل الرموز أوراق). الخوارزمية الجشعة: ادمج أصغر عقدتين وزناً تكراراً حتى تبقى عقدة واحدة.
متوسّط Huffman بين H و H+1، فلا يبلغ H
لأنه ملزَم بأطوال صحيحة. على مصدر A:0.99, B:0.01:
H≈0.08 بِت/رمز، لكن Huffman يعطي بِتّاً لكلٍّ = متوسّط ١ بِت =
أسوأ من الأمثل ١٢ ضعفاً! ضاع الـ0.92 بِت في "تقريب نصف بِت
لأعلى". هذا هو الثقب الذي يملؤه الجيل التالي — وهو سبب هجر الصيغ الحديثة
لـHuffman.
الجيل الثاني: الترميز الحسابي — كتابة أجزاء البِت
المشكلة أن Huffman يخصّص كوداً لكل رمز فأقلّ عملة بِت كامل. الحلّ
الثوري: رمّز الرسالة كلّها كعددٍ واحد. قسّم [0,1)
بنسب الاحتمالات؛ كل رمز يختار شريحته فتصير مجالك الجديد؛ كرّر. أرسِل أي عدد في
المجال النهائي.
H حيث عجز Huffman. تأخّر تبنّيه بسبب براءات اختراع لا قصور تقني.الجيل الثالث: ANS — سرعة Huffman بدقّة الحسابي
الحسابي يبلغ H لكنه بطيء. سؤال Duda (2009): اجمع سرعة جداول
Huffman مع دقّة الحسابي → ANS (Asymmetric Numeral Systems):
نظام عدّ غير متماثل حيث كل رمز "يدفع" log₂(1/pᵢ) بِت حسب
احتماله. الحالة عدد صحيح x؛ الترميز يحوّله إلى x' ≈ x/pₛ.
يصير بحثاً في جدول صغير — سرعة قريبة من Huffman، مع بلوغ H.
ANS يفكّ بترتيب معكوس لترتيب الترميز (مكدّس LIFO). قيد معماري حقيقي يؤثّر على تنظيم الصيغ لبياناتها — ستراه يفسّر قرارات في العقدة ٠٨.
| المرمّز | يبلغ H؟ | السرعة | صيغ تستعمله |
|---|---|---|---|
| RLE | لا | فائق | BMP, TIFF, ذيل DCT |
| Huffman | لا | عالٍ | PNG (DEFLATE), JPEG |
| الحسابي/المدى | نعم | منخفض | JPEG2000, JBIG2, VP8 |
| ANS | نعم | عالٍ | JPEG XL, AVIF, Zstd |
- اقرأ ملفاً، احسب تكرار البايتات، ابنِ شجرة Huffman، رمّز إلى تيّار بِتّات (جمّع البِتّات في بايتات يدوياً)، ثم اكتب الفكّاك. تحقّق من التطابق.
- قِس الهدر: صمّم مدخلاً ٩٩٪ بايت واحد و١٪ متنوّع. احسب
الحجم الفعلي / الحجم النظري N·H. يجب أن يكون أكبر بكثير من ١. - تحدٍّ: نفّذ ترميزاً حسابياً ثنائياً بسيطاً مع إعادة تطبيع، ورمّز المدخل الكارثي نفسه. شاهد 0.08 بِت/رمز تتحقّق فعلياً.
لا تنتقل قبل أن ترى رقم الهدر بعينيك. أن تقيس بنفسك أن Huffman أهدر ١٢ ضعفاً على مدخلٍ صمّمته = فهمٌ لا يُنسى.
المرمّز يحوّل (رمز، احتمال) إلى بِتّات هدفه بلوغ H. Huffman
محبوس فوق H بالتقريب الصحيح؛ الحسابي يبلغه بكتابة أجزاء البِت؛
ANS يجمع الدقّة بالسرعة. لكن المرمّز نصف القصّة — هو يفترض أن "النموذج" أعطاه
احتمالات جيّدة. من أين تأتي الاحتمالات الجيّدة؟ هذا النموذج،
وإليه ننتقل.