Golomb coding
ترميز غولومب منهج لضغط البيانات بدون فقدان
ترميز غولومب هو طريقة لضغط البيانات بدون فقدان تستخدم عائلة من ترميزات ضغط البيانات التي اخترعها سولومون دبليو. غولومب في الستينيات. يتميز ترميز غولومب باستخدام عائلة من الترميزات التي تعتمد على توزيع هندسي، والتي تكون ترميزات غولومب الأمثل لها في حالة استخدام ترميز مسبق. وبذلك، يناسب ترميز غولومب بشكل كبير الحالات التي تكون فيها تواتر قيم صغيرة في تدفق المدخلات أعلى بكثير من تواتر القيم الكبيرة.
ترميز رايس[عدل]
يشير ترميز رايس (الذي اخترعه روبرت إف. رايس) إلى استخدام مجموعة فرعية من عائلة ترميزات غولومب لإنتاج ترميز مسبق أبسط (ولكن قد يكون غير مثالي). استخدم رايس هذه المجموعة من الترميزات في مخطط ترميز تكيفي؛ يمكن أن يشير "ترميز رايس" إلى ذلك المخطط التكيفي أو إلى استخدام تلك المجموعة الفرعية من ترميزات غولومب. بينما يمكن ضبط معلمة ترميز غولومب لتكون أي قيمة صحيحة موجبة، فإن ترميزات رايس هي تلك التي يمكن ضبط معلماتها لتكون قوى من العدد 2. وهذا يجعل ترميزات رايس مناسبة للاستخدام على الحاسوب، حيث يمكن تنفيذ عمليات الضرب والقسمة على 2 بكفاءة أكبر في الحساب الثنائي.
اقترح رايس هذه المجموعة الفرعية الأبسط لأن التوزيعات الهندسية غالباً ما تتغير مع مرور الوقت، وليست معروفة بدقة، أو كليهما، لذا قد لا يكون اختيار الترميز المثالي الظاهر مفيداً جداً.
يستخدم ترميز رايس كمرحلة ترميز انتروبي في عدة طرق ضغط الصور بدون فقدان وضغط بيانات الصوت.
نظرة عامة[عدل]
![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Golomb_code_example.png/450px-Golomb_code_example.png)
بناء الترميزات[عدل]
يستخدم ترميز غولومب معلمة قابلة للضبط M لتقسيم قيمة المدخل x إلى جزئين: q، نتيجة قسمة على M، وr، الباقي. يتم إرسال الحاصل في ترميز ثنائي، يليه الباقي في ترميز ثنائي مقطوع. عندما M = 1، يكون ترميز غولومب مكافئاً للترميز الثنائي.
يمكن التفكير في ترميزات غولومب-رايس على أنها ترميزات تشير إلى عدد عن طريق موضع "السلة" (q)، و"الإزاحة" داخل "السلة" (r). يوضح الشكل المثالي موضع q وإزاحة r لترميز عدد صحيح x باستخدام معلمة غولومب-رايس M = 3، مع احتمالات المصدر التي تتبع توزيع هندسي مع p(0) = 0.2.
بشكل رسمي، يتم إعطاء الجزئين بالتعبير التالي، حيث x هو العدد الصحيح غير السالب الذي يتم ترميزه:
و
- .
![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/GolombCodeRedundancy.svg/langar-450px-GolombCodeRedundancy.svg.png)
سيتم ترميز كل من q وr باستخدام عدد متغير من البتات: q بترميز ثنائي، وr بترميز ثنائي مقطوع. إذا كان r < 2^(b+1) - M، فإن يتم استخدام b بت لترميز r؛ وإلا يتم استخدام b + 1 بت لترميز r. بوضوح، b = log2(M) إذا كان M قوة من العدد 2 ويمكننا ترميز جميع قيم r باستخدام b بت.
العدد الصحيح x الذي تم معالجته بواسطة غولومب هو طول التشغيل لعملية برنولي، التي تتبع توزيع هندسي يبدأ من 0. أفضل خيار للمعلمة M هو دالة للعملية برنولي المقابلة، التي يتم تمثيلها بـ p = P(x=0) احتمالية النجاح في محاولة برنولي معينة. M إما متوسط التوزيع أو المتوسط ±1. يمكن تحديده بواسطة هذه المتباينات:
التي تم حلها بواسطة
- .
للمثال مع p(0) = 0.2:
- .
ترميز غولومب لهذا التوزيع مكافئ لترميز هافمان لنفس الاحتمالات، إذا كان من الممكن حساب ترميز هافمان لمجموعة لانهائية من قيم المصدر.
الاستخدام مع الأعداد الصحيحة الموقعة[عدل]
تم تصميم مخطط غولومب لترميز تسلسلات الأعداد غير السالبة. ومع ذلك، يمكن توسيعه بسهولة لقبول تسلسلات تحتوي على أعداد سالبة باستخدام مخطط "تداخل وتشابك"، حيث يتم إعادة تعيين جميع القيم إلى عدد صحيح موجب بطريقة فريدة وقابلة للعكس. تبدأ التسلسل بـ: 0، -1، 1، -2، 2، -3، 3، -4، 4، وغيرها. يتم تعيين القيمة السالبة الـ n (أي -n) إلى العدد الفردي الـ n (2n-1)، ويتم تعيين القيمة الموجبة الـ m إلى العدد الزوجي الـ m (2m). يمكن تعبير عن ذلك رياضياً كما يلي: يتم تعيين قيمة موجبة x إلى (x' = 2|x| = 2x، x ≥ 0)، ويتم تعيين قيمة سالبة y إلى (y' = 2|y| - 1 = -2y - 1، y < 0). يمكن استخدام مثل هذا الترميز للبساطة، حتى لو كان غير مثالي. ترميزات أخرى مثالية للتوزيعات الهندسية ثنائية الجانب تشمل متغيرات مختلفة من ترميز غولومب، اعتماداً على معلمات التوزيع، بما في ذلك هذا.
خوارزمية بسيطة[عدل]
فيما يلي ترميز رايس-غولومب، حيث يستخدم ترميز الباقي ترميز ثنائي مقطوع بسيط، يسمى أيضاً "ترميز رايس" (ترميزات ثنائية ذات طول متغير أخرى، مثل الترميزات الحسابية أو هافمان، ممكنة لترميزات الباقي، إذا كان التوزيع الإحصائي لترميزات الباقي غير مسطح، وبشكل خاص عندما لا يتم استخدام جميع الباقيات الممكنة بعد القسمة). في هذه الخوارزمية، إذا كانت المعلمة M قوة من العدد 2، فإنها تصبح مكافئة لترميز رايس الأبسط:
- ثبت المعلمة M على قيمة صحيحة.
- لـ N، العدد الذي يتم ترميزه، ابحث عن
حاصل = q = floor(N/M)[عدل]
الباقي = r = N modulo M[عدل]
- أنشئ كلمة الترميز
نمط الترميز: <حاصل الترميز><ترميز الباقي>، حيث[عدل]
حاصل الترميز (في الترميز الثنائي)[عدل]
اكتب سلسلة بت 1 بطول q (بديلاً، سلسلة بت 0)[عدل]
اكتب بت 0 (على التوالي، بت 1)[عدل]
ترميز الباقي (في الترميز الثنائي المقطوع)[عدل]
دع b = floor(log2(M))[عدل]
إذا r < 2^(b+1)-M فقم بترميز r في تمثيل ثنائي باستخدام b بت.[عدل]
إذا r >= 2^(b+1)-M فقم بترميز العدد r+2^(b+1)-M في تمثيل ثنائي باستخدام b + 1 بت.[عدل]
فك الترميز:
- فك ترميز التمثيل الثنائي لـ q (عد عدد 1 في بداية الترميز)
- تخطي المحدد 0
- دع b = floor(log2(M))
فسر الـ b بتات التالية كعدد ثنائي r'. إذا تم تحقيق r' < 2^(b+1)-M، فإن الباقي r = r'[عدل]
وإلا فسر b + 1 بت كعدد ثنائي r'. الباقي يتم تقديمه بـ r = r' - 2^(b+1) + M[عدل]
- حسب N = q * M + r
مثال[عدل]
افترض M = 10. لذلك b = floor(log2(10)) = 3. القطع هو 2^(b+1) - M = 16 - 10 = 6.
|
|
على سبيل المثال، مع ترميز رايس-غولومب باستخدام المعلمة M = 10، يتم تقسيم العدد العشري 42 أولاً إلى q = 4 وr = 2، ويتم ترميزه كـ qcode(q)،rcode(r) = qcode(4)،rcode(2) = 11110،010 (لا تحتاج إلى ترميز الفاصلة المقابلة في تدفق الإخراج، لأن الصفر في نهاية ترميز q يكفي للإشارة إلى نهاية q وبداية r؛ كل من ترميز q وترميز r ذاتي الحدود).
الاستخدام لترميز طول التشغيل[عدل]
- لاحظ أن p و1 – p مقلوبان في هذا القسم مقارنة بالاستخدام في الأقسام السابقة.
بافتراض أبجدية من رمزين، أو مجموعة من حدثين، P وQ, باحتمالات p و(1 – p) على التوالي، حيث p ≥ 1/2، يمكن استخدام ترميز غولومب لترميز تشغيلات صفر أو أكثر من P مفصولة بـ Q واحدة. في هذا التطبيق، أفضل إعداد للمعلمة M هو العدد الصحيح الأقرب إلى . عندما p = 1/2، M = 1، ويكون ترميز غولومب مكافئاً للترميز الثنائي (n ≥ 0 P متبوعة بـ Q واحدة يتم ترميزها كـ n أواني تليها صفر). إذا كان مطلوباً ترميز أبسط، يمكن تعيين معلمة غولومب-رايس b (أي، معلمة غولومب M = 2^b) إلى العدد الصحيح الأقرب إلى ; على الرغم من أنه ليس دائماً المعلمة الأفضل، إلا أنه غالباً ما يكون المعلمة الأفضل لرايس وأداء ضغطه قريب جداً من الترميز غولومب الأمثل. (اقترح رايس استخدام ترميزات مختلفة لنفس البيانات لمعرفة الأفضل. اقترح باحث لاحق في مختبر الدفع النفاث (JPL) طرق مختلفة لتحسين أو تقدير معلمة الترميز.)
افترض استخدام ترميز رايس بجزء ثنائي يحتوي على b بتات لترميز طول التشغيل لتسلسلات حيث P لها احتمال p. إذا كان هو احتمال أن يكون البت جزءاً من تشغيل k-بت (k-1 P وQ واحدة) و هو نسبة الضغط لهذا التشغيل، فإن النسبة المتوقعة للضغط هي
غالباً ما يتم التعبير عن الضغط بنسبة 1 - ، وهي النسبة التي تم ضغطها. لـ p ≈ 1، تؤدي طريقة ترميز طول التشغيل إلى نسب ضغط قريبة من الانتروبي. على سبيل المثال، استخدام ترميز رايس b = 6 لـ p = 0.99 يعطي 91.89% ضغط، بينما الحد الانتروبي هو 91.92%.
ترميز غولومب-رايس تكيفي لطول التشغيل[عدل]
عندما لا يكون توزيع احتمالي للأعداد الصحيحة معروفاً، لا يمكن تحديد المعلمة الأمثل لمشفر غولومب-رايس. لذلك، في عدة تطبيقات، يتم استخدام نهج ذو مرحلتين: أولاً، يتم مسح كتلة البيانات لتقدير دالة كثافة احتمالية (PDF) للبيانات. ثم يتم تحديد معلمة غولومب-رايس من تلك الـ PDF المقدرة. تفضيل أبسط لذلك النهج هو الافتراض بأن الـ PDF تنتمي إلى عائلة معلمة، وتقدير معلمات الـ PDF من البيانات، ثم حساب المعلمة غولومب-رايس الأمثل. وهو النهج المستخدم في معظم التطبيقات التي تم ذكرها أدناه.
نهج بديل لترميز بيانات أعداد صحيحة غير معروفة الـ PDF أو متغيرة هو استخدام مشفر تكيفي رجعي. يحقق مشفر RLGR ذلك باستخدام خوارزمية بسيطة جداً تعدل معلمة غولومب-رايس لأعلى أو لأسفل، اعتماداً على آخر رمز مشفر. يمكن لمفكك أن يتبع نفس القاعدة لمتابعة تغير معلمات الترميز، لذلك لا تحتاج إلى إرسال أي معلومات جانبية، فقط البيانات المشفرة. بافتراض دالة PDF عامة غاوسية، التي تغطي مجموعة واسعة من الإحصائيات الملاحظة في البيانات مثل أخطاء التنبؤ أو معاملات التحويل في مشفرات الوسائط المتعددة، يمكن أن يؤدي خوارزمية ترميز RLGR جيداً في هذه التطبيقات.
التطبيقات[عدل]
![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Golomb_coded_Rice_Algorithm_experiment_Compression_Ratios.png/450px-Golomb_coded_Rice_Algorithm_experiment_Compression_Ratios.png)
يستخدم عدة مشفرات إشارات ترميز رايس للباقيات التنبؤية. في الخوارزميات التنبؤية، تميل هذه الباقيات إلى الدخول في توزيع هندسي ثنائي الجانب، مع تكرار الباقيات الصغيرة بشكل أكبر من الباقيات الكبيرة، ويقترب ترميز رايس من ترميز هافمان لهذا التوزيع بدون العبء المرتبط بإرسال جدول هافمان. إشارة واحدة لا تتطابق مع توزيع هندسي هي موجة جيبية، لأن الباقيات التفاضلية تنشئ إشارة جيبية توزيعها ليس هندسياً (أعلى الباقيات وأدناها لها تواتر عالي متماثل، فقط الباقيات المتوسطة الموجبة والسالبة تحدث أقل).
يستخدم عدة مشفرات صوت بدون فقدان، مثل Shorten، FLAC، Apple Lossless، وMPEG-4 ALS، ترميز رايس بعد مرحلة التنبؤ الخطي (تسمى "فلتر FIR تكيفي" في Apple Lossless). يتم استخدام ترميز رايس أيضاً في مشفر الصور بدون فقدان FELICS.
يتم استخدام مشفر غولومب-رايس في مرحلة ترميز الانتروبي لمشفرات الصور بدون فقدان القائمة على خوارزمية رايس. تنتج إحدى هذه التجارب رسم بياني لنسب الضغط الموضح.
يستخدم مخطط JPEG-LS الباقيات التنبؤية ترميز رايس-غولومب.
يتم استخدام النسخة التكيفية من ترميز غولومب-رايس، مشفر RLGR [١]، لترميز محتوى الشاشة في الآلات الافتراضية في مكون RemoteFX من بروتوكول سطح المكتب البعيد من مايكروسوفت.
انظر أيضاً[عدل]
المراجع[عدل]
للقراءة الإضافية[عدل]
- Golomb, Solomon W. (1966). Run-length encodings. IEEE Transactions on Information Theory, IT--12(3):399--401
- خطأ: لا توجد وحدة بهذا الاسم "Citation/CS1".
- Robert F. Rice (1979), "Some Practical Universal Noiseless Coding Techniques", Jet Propulsion Laboratory, Pasadena, California, JPL Publication 79--22, March 1979.
- Witten, Ian Moffat, Alistair Bell, Timothy. "Managing Gigabytes: Compressing and Indexing Documents and Images." Second Edition. Morgan Kaufmann Publishers, San Francisco CA. 1999 (ردمك 1-55860-570-3)
- David Salomon. "Data Compression",(ردمك 0-387-95045-1).
- H. S. Malvar, Adaptive run-length/Golomb–Rice encoding of quantized generalized Gaussian sources with unknown statistics, Proc. Data Compression Conference, 2006.
- RLGR Entropy Encoding, Microsoft MS-RDPRFX Open Specification, RemoteFX codec for Remote Desktop Protocol.
- S. Büttcher, C. L. A. Clarke, and G. V. Cormack. Information Retrieval: Implementing and Evaluating Search Engines نسخة محفوظة 2020-10-05 على موقع واي باك مشين.. MIT Press, Cambridge MA, 2010.