بصلح

Re-Pair (اختصارًا لـ recursive pairing ) هي خوارزمية ضغط تعتمد على القواعد النحوية ، حيث تقوم، عند إدخال نص، ببناء برنامج خطي ، أي قواعد نحوية خالية من السياق ، لتوليد سلسلة نصية واحدة: النص المُدخل. ولتنفيذ الضغط في وقت خطي، تستهلك هذه الخوارزمية مقدارًا من الذاكرة يعادل خمسة أضعاف حجم النص المُدخل تقريبًا.

تُبنى القواعد النحوية باستبدال أكثر زوج من الأحرف تكرارًا في النص بشكل متكرر. وعندما لا يتكرر أي زوج من الأحرف، تُستخدم السلسلة الناتجة كمسلّمة للقواعد النحوية. وبالتالي، تكون القواعد النحوية الناتجة بحيث تحتوي جميع القواعد، باستثناء المسلّمة، على رمزين في الجانب الأيمن.

تم تقديم Re-Pair لأول مرة بواسطة NJ Larsson و A. Moffat [ 1 ] في عام 1999.

كيف يعمل؟

إنشاء برنامج خطي يُولّد السلسلة w  =  "xabcabcy123123zabc" باستخدام إعادة الاقتران

في ورقتهم البحثية، عُرضت الخوارزمية مع وصف تفصيلي لهياكل البيانات اللازمة لتنفيذها بكفاءة زمنية ومكانية خطية. أظهرت التجارب أن خوارزمية Re-Pair تحقق نسب ضغط عالية وتوفر أداءً جيدًا في فك الضغط. مع ذلك، يتمثل العيب الرئيسي للخوارزمية في استهلاكها للذاكرة، والذي يُعادل تقريبًا خمسة أضعاف حجم المُدخلات. هذا الاستهلاك للذاكرة ضروري لإجراء الضغط في وقت خطي، ولكنه يجعل الخوارزمية غير عملية لضغط الملفات الكبيرة.

تُظهر الصورة على اليمين كيف تقوم الخوارزمية بضغط السلسلةw=xأبجأبجy123123zأبج{\displaystyle w=xabcabcy123123zabc}.

خلال التكرار الأول، الزوجأب{\displaystyle ab}، وهو ما يحدث ثلاث مرات فيw{\displaystyle w}، يتم استبدالها برمز جديدR1{\displaystyle R_{1}}في التكرار الثاني، يكون الزوج الأكثر تكرارًا في السلسلةw=xR1جR1جy123123zR1ج{\displaystyle w=xR_{1}cR_{1}cy123123zR_{1}c}، وهوR1ج{\displaystyle R_{1}c}، يتم استبدالها برمز جديدR2{\displaystyle R_{2}}وبالتالي، في نهاية التكرار الثاني، تكون السلسلة المتبقية هيw=xR2R2y123123zR2{\displaystyle w=xR_{2}R_{2}y123123zR_{2}}في التكرارين التاليين، الأزواج12{\displaystyle 12}وR33{\displaystyle R_{3}3}يتم استبدالها برموزR3{\displaystyle R_{3}}وR4{\displaystyle R_{4}}على التوالي. وأخيراً، السلسلةw=xR2R2yR4R4zR2{\displaystyle w=xR_{2}R_{2}yR_{4}R_{4}zR_{2}}لا يحتوي على أي زوج متكرر، وبالتالي يتم استخدامه كمسلمة لقواعد الإخراج.

هياكل البيانات

لتحقيق تعقيد زمني خطي، تتطلب عملية إعادة الاقتران هياكل البيانات التالية

  • تسلسل يمثل سلسلة الإدخال. الموضعأنا{\displaystyle i}يحتوي جزء من التسلسل على الرمز رقم i من سلسلة الإدخال بالإضافة إلى مرجعين إلى مواقع أخرى في التسلسل. تشير هذه المراجع إلى المواقع التالية/السابقة، على سبيل المثالك{\displaystyle k}وم{\displaystyle m}بحيث تبدأ السلسلة الفرعية نفسها عندw[أنا]{\displaystyle w[i]}،w[ك]{\displaystyle w[k]}وw[م]{\displaystyle w[m]}ويتم التقاط جميع الحالات الثلاث بواسطة نفس المرجع (أي أن هناك متغيرًا في القواعد النحوية التي تولد السلسلة).
  • قائمة انتظار ذات أولوية . كل عنصر في هذه القائمة عبارة عن زوج من الرموز (أطراف أو أزواج مُعرَّفة مسبقًا) تظهر تباعًا في التسلسل. تُحدَّد أولوية الزوج بعدد مرات ظهوره في التسلسل المتبقي. في كل مرة يُنشأ فيها زوج جديد، تُحدَّث قائمة الانتظار ذات الأولوية.
  • جدول تجزئة لتتبع الأزواج المُعرّفة مسبقاً. يتم تحديث هذا الجدول في كل مرة يتم فيها إنشاء زوج جديد أو حذفه.

بما أن جدول التجزئة وقائمة الانتظار ذات الأولوية يشيران إلى العناصر نفسها (الأزواج)، فيمكن تنفيذهما باستخدام بنية بيانات مشتركة تُسمى PAIR، تحتوي على مؤشرات لجدول التجزئة (h_next) وقائمة الانتظار ذات الأولوية (p_next و p_prev). علاوة على ذلك، يشير كل زوج PAIR إلى بداية أول (f_pos) وآخر (b_pos) ظهور للسلسلة التي يمثلها هذا الزوج في التسلسل. يوضح الشكل التالي نظرة عامة على بنية البيانات هذه.

بنية بيانات لتنفيذ خوارزمية الاقتران المتكرر مع وقت تشغيل خطي واستخدام مساحة خطي.

تُظهر الصورتان التاليتان مثالاً على شكل هياكل البيانات هذه بعد التهيئة وبعد تطبيق خطوة واحدة من عملية الاقتران (لا يتم عرض المؤشرات إلى NULL):

حالة هياكل البيانات المستخدمة بواسطة خوارزمية الاقتران المتكرر بعد المرور عبر نص الإدخال.حالة هياكل البيانات المستخدمة بواسطة خوارزمية الاقتران المتكرر بعد إجراء أول عملية استبدال للزوج.

ترميز القواعد

بعد بناء قواعد اللغة لسلسلة إدخال معينة، ولتحقيق ضغط فعال، يجب ترميز هذه القواعد بكفاءة. إحدى أبسط طرق ترميز القواعد هي الترميز الضمني ، الذي يتضمن استدعاء الدالة encodeCFG(X)الموضحة أدناه بالتتابع على جميع رموز البديهية. وبشكل بديهي، تُرمّز القواعد عند زيارتها في اجتياز عميق للقواعد. عند زيارة قاعدة لأول مرة، يُرمّز جانبها الأيمن بشكل متكرر ويُعيّن لها رمز جديد. ومنذ تلك اللحظة، كلما تم الوصول إلى القاعدة، تُكتب القيمة المُعيّنة.

num_rules_encoded = 256 // بشكل افتراضي، تكون مجموعة أحرف ASCII الموسعة هي نهايات القواعد النحوية.writeSymbol ( symbol s ) { bitslen = log ( num_rules_encoded ); // مبدئيًا 8، لوصف أي حرف ASCII موسع ، اكتب s بالثنائي باستخدام bitslen bits }void encodeCFG_rec ( symbol s ) { if ( s ليس رمزًا نهائيًا وهذه هي المرة الأولى التي يظهر فيها الرمز s ) { take rule s X Y ; write bit 1 ; encodeCFG_rec ( X ) ; encodeCFG_rec ( Y ) ; assign to symbol s value ++ num_rules_encoded ; } else { write bit 0 ; writeSymbol ( terminal / value assigned ) } }void encodeCFG ( symbol s ) { encodeCFG_rec ( s ); write bit 1 ; }

ثمة احتمال آخر يتمثل في تقسيم قواعد النحو إلى أجيال بحيث تكون القاعدةXYZ{\displaystyle X\to YZ}ينتمي إلى جيلأنا{\displaystyle i}إذا كان واحد على الأقل منY{\displaystyle Y}أوZ{\displaystyle Z}ينتمي إلى جيلأنا-1{\displaystyle i-1}والآخر ينتمي إلى جيلج{\displaystyle j}معجأنا-1{\displaystyle j\leq i-1}ثم يتم ترميز هذه الأجيال تباعاً بدءاً من الجيل الأول.0{\displaystyle 0}كانت هذه هي الطريقة المقترحة أصلاً عند تقديم خوارزمية Re-Pair لأول مرة. مع ذلك، تستخدم معظم تطبيقات Re-Pair طريقة التشفير الضمني لبساطتها وأدائها الجيد، فضلاً عن أنها تتيح فك الضغط أثناء التشغيل.

الإصدارات

توجد عدة تطبيقات مختلفة لخوارزمية إعادة الاقتران. ويهدف كل إصدار من هذه الإصدارات إلى تحسين جانب محدد من الخوارزمية، مثل تقليل وقت التشغيل، أو تقليل استهلاك المساحة، أو زيادة نسبة الضغط.

تحسينسنةتطبيقوصف
تصفح العبارات [ 2 ]2003بدلاً من معالجة سلسلة الإدخال كسلسلة من الأحرف، تقوم هذه الأداة أولاً بتجميع الأحرف في عبارات (مثل الكلمات). تعمل خوارزمية الضغط على غرار خوارزمية إعادة التجميع، ولكنها تعتبر العبارات المحددة بمثابة نهايات القواعد النحوية. تقبل الأداة خيارات متعددة لتحديد نوع العبارات التي سيتم أخذها في الاعتبار، وتقوم بتشفير القواعد النحوية الناتجة في ملفين منفصلين: أحدهما يحتوي على البديهية والآخر على بقية القواعد.
إبداعي2011هذه إحدى أكثر تطبيقات Re-Pair شيوعًا. تستخدم هذه الطريقة هياكل البيانات الموضحة هنا (التي تم اقتراحها عند نشرها لأول مرة [ 1 ] )، وتُشفّر القواعد النحوية الناتجة باستخدام طريقة التشفير الضمني. معظم الإصدارات اللاحقة من Re-Pair مبنية على هذا الإصدار.
التشفير [ 3 ]2013بدلاً من طريقة التشفير الضمنية، يستخدم هذا التنفيذ طريقة تحويل الطول المتغير إلى الطول الثابت، حيث يتم تشفير كل قاعدة (ممثلة بسلسلة ذات طول متغير) باستخدام رمز ذي طول ثابت.
استخدام الذاكرة [ 4 ]2017تُنفَّذ الخوارزمية على مرحلتين. خلال المرحلة الأولى، تُؤخذ في الاعتبار الأزواج عالية التردد ، أي تلك التي تحدث أكثر منن/3{\displaystyle \lceil {\sqrt {n}}/3\rceil }في بعض الأحيان، بينما تُؤخذ أزواج التردد المنخفض في الاعتبار في الثانية. ويكمن الاختلاف الرئيسي بين المرحلتين في تطبيق قوائم الانتظار ذات الأولوية المقابلة.
الضغط [ 5 ]2017تُعدّل هذه النسخة طريقة اختيار الزوج التالي المراد استبداله. فبدلاً من الاكتفاء بالنظر إلى الزوج الأكثر تكراراً، تستخدم هذه النسخة أسلوباً استدلالياً يُعاقب الأزواج التي لا تتوافق مع تحليل ليمبل-زيف لسلسلة الإدخال.
الضغط [ 6 ]2018تُقلل هذه الخوارزمية حجم القواعد النحوية المُولّدة بواسطة Re-Pair عن طريق استبدال التكرارات القصوى أولًا. عندما يُحدد زوجٌ ما على أنه الزوج الأكثر تكرارًا، أي الزوج الذي سيتم استبداله في الخطوة الحالية من الخوارزمية، تُوسّع MR-repair هذا الزوج للعثور على أطول سلسلة نصية تتكرر بنفس عدد مرات تكرار الزوج المراد استبداله. يُشفّر التطبيق المُقدّم القواعد النحوية ببساطة عن طريق سرد القواعد كنص، لذا فإن هذه الأداة مخصصة لأغراض البحث فقط ولا يُمكن استخدامها للضغط كما هي.

انظر أيضاً

مراجع

  1. 1 2 لارسون، ن. ج.؛ موفات، أ. (2000). "الضغط غير المتصل بالإنترنت القائم على القاموس". وقائع معهد مهندسي الكهرباء والإلكترونيات . 88 (11): 1722-1732 . doi : 10.1109/5.892708 . ISSN 0018-9219 . 
  2. ر. وان. "تصفح وبحث المستندات المضغوطة". أطروحة دكتوراه، جامعة ملبورن، أستراليا، ديسمبر 2003.
  3. ساتوشي يوشيدا وتاكويا كيدا، ترميز فعال من الطول المتغير إلى الطول الثابت عبر خوارزمية إعادة الاقتران، في وقائع مؤتمر ضغط البيانات 2013 (DCC 2013)، ص 532، سنو بيرد، يوتا، الولايات المتحدة الأمريكية، مارس 2013.
  4. ^ Bille، P.، Gørtz، IL، & Prezza، N. (2017، أبريل). ضغط إعادة الاقتران موفر للمساحة. في 2017 (دي سي سي) (ص171-180). IEEE.
  5. غانتشورز، م.، وجيز، أ. (أبريل 2017). تحسينات على ضاغط قواعد إعادة الاقتران. في مؤتمر ضغط البيانات لعام 2017 (DCC) (ص 181-190). IEEE.
  6. فورويا، إي.، تاكاجي، تي.، ناكاشيما، واي.، إينيناغا، إس.، باناي، إتش.، وكيدا، تي. (2018). MR-RePair: ضغط القواعد النحوية بناءً على التكرارات القصوى. نسخة أولية منشورة على arXiv:1811.04596.