ترميز دلتا إلياس
شفرة إلياس دلتا أو شفرة إلياس دلتا هي شفرة عالمية تشفر الأعداد الصحيحة الموجبة، وقد طورها بيتر إلياس . [ 1 ] : 200
التشفير
لترميز رقم X ≥ 1:
- ليكن N = ⌊log 2 X ⌋؛ أعلى قوة للعدد 2 في X ، لذا 2 N ≤ X < 2 N +1 .
- ليكن L = ⌊log 2 N + 1⌋ أعلى قوة للعدد 2 في N + 1، لذا فإن 2 L ≤ N + 1 < 2 L +1 .
- اكتب L أصفارًا، متبوعة بـ
- التمثيل الثنائي المكون من ( L + 1) بت للعدد N + 1، متبوعًا بـ
- جميع البتات باستثناء البت الرئيسي (أي آخر N بت) من X.
طريقة مكافئة للتعبير عن نفس العملية:
- قم بفصل X إلى أعلى قوة للعدد 2 التي يحتويها (2 N ) والأرقام الثنائية المتبقية N.
- قم بترميز N + 1 باستخدام ترميز جاما إلياس .
- أضف الأرقام الثنائية المتبقية N إلى هذا التمثيل لـ N + 1.
لتمثيل رقميستخدم إلياس دلتا (δ)بتات. [ 1 ] : 200. يُعد هذا مفيدًا للأعداد الصحيحة الكبيرة جدًا، حيث يكون عدد بتات التمثيل المشفر الإجمالي أقل مما يمكن الحصول عليه باستخدام ترميز غاما إلياس ، وذلك بسببجزء من التعبير السابق.
يبدأ الكود باستخدامبدلاً من:
| رقم | شمال | ن + 1 | ترميز دلتا | الاحتمال الضمني |
|---|---|---|---|---|
| 1 = 2 0 | 0 | 1 | 1 | نصف |
| 2 = 2 1 + 0 | 1 | 2 | 0100 | 1/16 |
| 3 = 2 1 + 1 | 1 | 2 | 0101 | 1/16 |
| 4 = 2 2 + 0 | 2 | 3 | 01100 | 1/32 |
| 5 = 2 2 + 1 | 2 | 3 | 01101 | 1/32 |
| 6 = 2 2 + 2 | 2 | 3 | 01110 | 1/32 |
| 7 = 2 2 + 3 | 2 | 3 | 01111 | 1/32 |
| 8 = 2 3 + 0 | 3 | 4 | 00100000 | 1/256 |
| 9 = 2 3 + 1 | 3 | 4 | 00100001 | 1/256 |
| 10 = 2 3 + 2 | 3 | 4 | 00100010 | 1/256 |
| 11 = 2 3 + 3 | 3 | 4 | 00100011 | 1/256 |
| 12 = 2 3 + 4 | 3 | 4 | 00100100 | 1/256 |
| 13 = 2 3 + 5 | 3 | 4 | 00100101 | 1/256 |
| 14 = 2 3 + 6 | 3 | 4 | 00100110 | 1/256 |
| 15 = 2 3 + 7 | 3 | 4 | 00100111 | 1/256 |
| 16 = 2 4 + 0 | 4 | 5 | 001010000 | 1/512 |
| 17 = 2 4 + 1 | 4 | 5 | 001010001 | 1/512 |
لفك تشفير عدد صحيح مشفر باستخدام خوارزمية دلتا إلياس:
- اقرأ وعدّ الأصفار من التدفق حتى تصل إلى أول صفر. سمِّ هذا العدد من الأصفار L.
- باعتبار الرقم 1 الذي تم الوصول إليه هو أول رقم في عدد صحيح، وقيمته 2L ، اقرأ الأرقام L المتبقية من هذا العدد. سمِّ هذا العدد N + 1 ، واطرح منه واحدًا لتحصل على N.
- ضع الرقم واحد في الموضع الأول من الناتج النهائي، والذي يمثل القيمة 2N .
- اقرأ الأرقام N التالية وأضفها إلى المعادلة .
مثال: 001010011
- صفران في بداية الرقم 001
- اقرأ بتتين إضافيتين، أي 00101
- فك تشفير N + 1 = 00101 = 5
- احصل على N = 5 − 1 = 4 بتات متبقية للرمز الكامل، أي 0011
- الرقم المشفر = 2 + 4 + 3 = 19
يمكن تعميم هذا الرمز ليشمل الأعداد الصحيحة الصفرية أو السالبة بنفس الطرق الموضحة في ترميز جاما لإلياس .
مثال على التعليمات البرمجية
التشفير
void eliasDeltaEncode ( const ByteBuffer & source , ByteBuffer & dest ) { IntReader intreader ( source ); BitWriter bitwriter ( dest ); while ( intreader . hasLeft ()) { int num = intreader . getInt ();int len = 1 + std :: floor ( std :: log2 ( num ) ) ; int lengthOfLen = std :: floor ( std :: log2 ( len )); for ( int i = lengthOfLen ; i > 0 ; --i ) { bitwriter.outputBit ( 0 ) ; } for ( int i = lengthOfLen ; i > = 0 ; --i ) { bitwriter.outputBit ( ( len >> i ) & 1 ) ; } for ( int i = len - 2 ; i > = 0 ; --i ) { bitwriter.outputBit ( ( num >> i ) & 1 ) ; } }bitwriter.close ( ) ; intreader.close ( ) ; }فك التشفير
void eliasDeltaDecode ( const ByteBuffer & source , ByteBuffer & dest ) { BitReader bitreader ( source ); IntWriter intwriter ( dest ); while ( bitreader.hasLeft ( ) ) { int num = 1 ; int len = 1 ; int lengthOfLen = 0 ;// قد يكون هذا خطيرًا مع الملفات التالفة. while ( ! bitreader . inputBit ()) { ++ lengthOfLen ; } for ( int i = 0 ; i < lengthOfLen ; ++ i ) { len <<= 1 ; if ( bitreader . inputBit ()) { len |= 1 ; } } for ( int i = 0 ; i < len - 1 ; ++ i ) { num <<= 1 ; if ( bitreader . inputBit ()) { num |= 1 ; } }intwriter.putInt ( num ) ; // كتابة القيمة } bitreader.close ( ) ; intwriter.close ( ) ; }التعميمات
لا يقوم ترميز دلتا إلياس بترميز الصفر أو الأعداد الصحيحة السالبة. إحدى طرق ترميز جميع الأعداد الصحيحة غير السالبة هي إضافة 1 قبل الترميز ثم طرح 1 بعد فك الترميز. إحدى طرق ترميز جميع الأعداد الصحيحة هي إنشاء تقابل ، يربط جميع الأعداد الصحيحة (0، 1، -1، 2، -2، 3، -3، ...) بالأعداد الصحيحة الموجبة تمامًا (1، 2، 3، 4، 5، 6، 7، ...) قبل الترميز. يمكن تنفيذ هذا التقابل باستخدام ترميز "ZigZag" من بروتوكول بافرز (لا يُخلط بينه وبين ترميز Zigzag ، ولا مع ترميز إنتروبيا JPEG zigzag ).
انظر أيضاً
مراجع
- 1 2 إلياس، بيتر (مارس 1975). "مجموعات الكلمات المشفرة العالمية وتمثيلات الأعداد الصحيحة". معاملات IEEE في نظرية المعلومات . 21 (2): 194-203 . doi : 10.1109/tit.1975.1055349 .
للمزيد من القراءة
- حمادة، هوزومي (يونيو 1983). "URR: التمثيل العالمي للأعداد الحقيقية" . الحوسبة من الجيل الجديد . 1 (2): 205-209 . doi : 10.1007/BF03037427 . ISSN 0288-3635 . S2CID 12806462. تاريخ الاسترجاع : 9 يوليو 2018 . (ملاحظة: يتطابق رمز إلياس دلتا مع تمثيل حمادة URR.)
- ترميز الإنتروبيا
- أنظمة الأرقام
- ضغط البيانات
