مصفوفة LCP

في علم الحاسوب ، تُعدّ مصفوفة أطول البادئات المشتركة ( مصفوفة LCP ) بنية بيانات مساعدة لمصفوفة اللواحق . وهي تخزن أطوال أطول البادئات المشتركة (LCPs) بين جميع أزواج اللواحق المتتالية في مصفوفة لواحق مرتبة.

على سبيل المثال، إذا كانت A  := [aab،أب،أبااب،ب،باب] عبارة عن مصفوفة لاحقة، أطول بادئة مشتركة بين A [1] =aabو A [2] =أبيكونأوالتي طولها 1، لذا فإن H [2] = 1 في مصفوفة LCP H. وبالمثل، فإن LCP لـ A [2] =أبو A [3] =أباابيكونأب، لذا فإن H [3] = 2.

يُتيح توسيع مصفوفة اللواحق باستخدام مصفوفة LCP محاكاة عمليات اجتياز شجرة اللواحق من أعلى إلى أسفل ومن أسفل إلى أعلى بكفاءة ، [ 1 ] [ 2 ] كما يُسرّع عملية مطابقة الأنماط على مصفوفة اللواحق ، [ 3 ] ويُعدّ شرطًا أساسيًا لأشجار اللواحق المضغوطة. [ 4 ]

تاريخ

تم تقديم مصفوفة LCP في عام 1993، بواسطة أودي مانبر وجين مايرز جنبًا إلى جنب مع مصفوفة اللاحقة من أجل تحسين وقت تشغيل خوارزمية البحث عن السلسلة الخاصة بهم . [ 3 ]

تعريف

يتركأ{\displaystyle A}ليكن مصفوفة اللواحق للسلسلةS=s1،s2،...sن-1دولار{\displaystyle S=s_{1},s_{2},\ldots s_{n-1}\$}من الطولن{\displaystyle n}، أيندولار{\displaystyle \$}هو حرف مميز فريد من نوعه وأصغر حجماً من الناحية المعجمية من أي حرف آخر.S[أنا،ج]{\displaystyle S[i,j]}يشير إلى السلسلة الفرعية منS{\displaystyle S}تتراوح منأنا{\displaystyle i}لج{\displaystyle j}. هكذا،S[أ[أنا]،ن]{\displaystyle S[A[i],n]}هوأنا{\displaystyle i}أصغر لاحقة منS{\displaystyle S}.

يتركlcp(v،w){\displaystyle \operatorname {lcp} (v,w)}يشير إلى طول أطول بادئة مشتركة بين سلسلتين نصيتينv{\displaystyle v}وw{\displaystyle w}ثم مصفوفة LCPح[1،ن]{\displaystyle H[1,n]}هو مصفوفة أعداد صحيحة بحجمن{\displaystyle n}بحيثح[1]{\displaystyle H[1]}غير مُعرَّف وح[أنا]=lcp(S[أ[أنا-1]،ن]،S[أ[أنا]،ن]){\displaystyle H[i]=\operatorname {lcp} (S[A[i-1],n],S[A[i],n])}لكل1<أنان{\displaystyle 1<i\leq n}. هكذاح[أنا]{\displaystyle H[i]}يخزن طول أطول بادئة مشتركة للمصطلح المعجميأنا{\displaystyle i}اللاحقة الأصغر رقم 1 واللاحقة السابقة لها في مصفوفة اللواحق.

الفرق بين مصفوفة LCP ومصفوفة اللاحقة:

  • مصفوفة اللاحقة: تمثل الترتيب المعجمي لكل لاحقة في المصفوفة.
  • مصفوفة LCP: تحتوي على أقصى طول لتطابق البادئة بين لاحقتين متتاليتين، بعد فرزها معجميًا.

مثال

لنفترض وجود سلسلةS=موز${\displaystyle S={\textrm {الموزة\$}}}:

أنا1234567
S[i]بأنأنأدولار

ومصفوفة اللواحق المرتبة المقابلة لهاأ{\displaystyle A} :

أنا1234567
أ[i]7642153

مصفوفة اللواحق مع كتابة اللواحق عموديًا في الأسفل:

أنا1234567
أ[i]7642153
S[A[i], n][1]دولارأأأبنن
S[A[i], n][2]دولارننأأأ
S[A[i], n][3]أأندولارن
S[A[i], n][4]دولارنأأ
S[A[i], n][5]أندولار
S[A[i], n][6]دولارأ
S[A[i], n][7]دولار

ثم مصفوفة LCPح{\displaystyle H}يتم بناؤها عن طريق مقارنة اللواحق المتتالية معجميًا لتحديد أطول بادئة مشتركة بينها:

أنا1234567
أهلاً]غير محدد013002

فعلى سبيل المثال،ح[4]=3{\displaystyle H[4]=3}هو طول أطول بادئة مشتركةأنا{\displaystyle {\text{ana}}}تشترك فيها اللواحقأ[3]=S[4،7]=ana${\displaystyle A[3]=S[4,7]={\textrm {ana\$}}}وأ[4]=S[2،7]=أناناس{\displaystyle A[4]=S[2,7]={\textrm {anana\$}}}. لاحظ أنح[1]{\displaystyle H[1]}غير محدد، لأنه لا يوجد لاحقة أصغر منه معجمياً.

خوارزميات بناء فعالة

يمكن تقسيم خوارزميات بناء مصفوفة LCP إلى فئتين مختلفتين: الخوارزميات التي تحسب مصفوفة LCP كمنتج ثانوي لمصفوفة اللاحقة والخوارزميات التي تستخدم مصفوفة لاحقة تم إنشاؤها بالفعل من أجل حساب قيم LCP.

يقدم مانبر ومايرز (1993) خوارزمية لحساب مصفوفة LCP إلى جانب مصفوفة اللواحق فييا(نسجلن){\displaystyle O(n\log n)}الوقت. يوضح كاركاينن وساندرز (2003) أنه من الممكن أيضًا تعديلهايا(ن){\displaystyle O(n)}خوارزمية زمنية بحيث تحسب مصفوفة LCP أيضًا. قدم كاساي وآخرون (2001) أوليا(ن){\displaystyle O(n)}خوارزمية الوقت (FLAAP) التي تحسب مصفوفة LCP بالنظر إلى النص ومصفوفة اللاحقة.

بافتراض أن كل رمز نصي يشغل بايتًا واحدًا وأن كل عنصر من عناصر مصفوفة اللاحقة أو LCP يشغل 4 بايتات، فإن العيب الرئيسي لخوارزميتهم هو شغل مساحة كبيرة من13ن{\displaystyle 13n}بايتات، بينما يشغل الناتج الأصلي (نص، مصفوفة لاحقة، مصفوفة LCP) فقط9ن{\displaystyle 9n}بايتات. لذلك، ابتكر مانزيني (2004) نسخة محسّنة من خوارزمية كاساي وآخرون (2001) (lcp9) وقلل من شغل المساحة إلى9ن{\displaystyle 9n}بايت. يقدم Kärkkäinen وManzini & Puglisi (2009) تحسينًا آخر لخوارزمية كاساي (Φ{\displaystyle \Phi }(خوارزمية) تُحسّن وقت التشغيل. بدلاً من مصفوفة LCP الفعلية، تُنشئ هذه الخوارزمية مصفوفة LCP المُبدّلة (PLCP)، حيث تظهر القيم بترتيب النص بدلاً من الترتيب المعجمي.

يقدم غوغ وأوليبوش (2011) خوارزميتين على الرغم من كونهما بطيئتين نظرياً (يا(ن2){\displaystyle O(n^{2})}كانت هذه الخوارزميات أسرع من الخوارزميات المذكورة أعلاه من الناحية العملية.

اعتبارًا من عام 2012يعود الفضل في أسرع خوارزمية لبناء مصفوفة LCP في الوقت الخطي حاليًا إلى فيشر (2011) ، والتي بدورها تستند إلى إحدى أسرع خوارزميات بناء مصفوفة اللواحق (SA-IS) التي طورها نونغ، تشانغ، وتشان (2009) . وتُعد خوارزمية فيشر وكوربيتز (2017)، المبنية على خوارزمية DivSufSort ليوتا موري، أسرع منها.

التطبيقات

كما أشار أبو الهدى، كورتز وأوليبوش (2004)، يمكن حل العديد من مشاكل معالجة السلاسل النصية من خلال الأنواع التالية من عمليات اجتياز الشجرة :

  • اجتياز شجرة اللواحق الكاملة من الأسفل إلى الأعلى
  • اجتياز من أعلى إلى أسفل لشجرة فرعية من شجرة اللواحق
  • اجتياز شجرة اللواحق باستخدام روابط اللواحق.

أظهر كاساي وآخرون (2001) كيفية محاكاة اجتياز شجرة اللواحق من الأسفل إلى الأعلى باستخدام مصفوفة اللواحق ومصفوفة LCP فقط. قام أبو الهدى، وكورتز، وأوليبوش (2004) بتحسين مصفوفة اللواحق باستخدام مصفوفة LCP وهياكل بيانات إضافية، ووصفوا كيفية استخدام مصفوفة اللواحق المحسّنة هذه لمحاكاة جميع أنواع اجتياز شجرة اللواحق الثلاثة. قلّل فيشر وهيون (2007) من متطلبات المساحة لمصفوفة اللواحق المحسّنة عن طريق المعالجة المسبقة لمصفوفة LCP لاستعلامات الحد الأدنى للنطاق . وبالتالي، يمكن حل أي مشكلة يمكن حلها باستخدام خوارزميات شجرة اللواحق باستخدام مصفوفة اللواحق المحسّنة . [ 2 ]

تحديد ما إذا كان هناك نمطP{\displaystyle P}من الطولم{\displaystyle m}هي سلسلة فرعية من سلسلةS{\displaystyle S}من الطولن{\displaystyle n}يأخذيا(مسجلن){\displaystyle O(m\log n)}الوقت إذا تم استخدام مصفوفة اللاحقة فقط. وباستخدام معلومات LCP بالإضافة إلى ذلك، يمكن تحسين هذا الحد إلىيا(م+سجلن){\displaystyle O(m+\log n)}الوقت. [ 3 ] يُبين أبو الهدى، وكورتز، وأوليبوش (2004) كيفية تحسين وقت التشغيل هذا بشكل أكبر لتحقيق الأمثليا(م){\displaystyle O(m)}الوقت. وبالتالي، باستخدام معلومات مصفوفة اللواحق ومصفوفة LCP، يمكن الإجابة على استعلام القرار بنفس سرعة استخدام شجرة اللواحق .

تُعدّ مصفوفة LCP جزءًا أساسيًا من أشجار اللواحق المضغوطة، والتي توفر وظائف شجرة اللواحق الكاملة، مثل روابط اللواحق واستعلامات السلف المشترك الأدنى . [ 5 ] [ 6 ] علاوة على ذلك، يمكن استخدامها مع مصفوفة اللواحق لحساب تحليل Lempel-Ziv LZ77 فييا(ن){\displaystyle O(n)}الوقت. [ 2 ] [ 7 ] [ 8 ] [ 9 ]

مشكلة أطول سلسلة فرعية متكررة لسلسلة نصيةS{\displaystyle S}من الطولن{\displaystyle n}يمكن حلها فيΘ(ن){\displaystyle \Theta (n)}الوقت باستخدام مصفوفة اللاحقةأ{\displaystyle A}ومصفوفة LCP. يكفي إجراء مسح خطي عبر مصفوفة LCP للعثور على قيمتها القصوىvمأx{\displaystyle v_{max}}والفهرس المقابلأنا{\displaystyle i}أينvمأx{\displaystyle v_{max}}يتم تخزينها. ثم يتم تحديد أطول سلسلة فرعية تظهر مرتين على الأقل بواسطةS[أ[أنا]،أ[أنا]+vمأx-1]{\displaystyle S[A[i],A[i]+v_{max}-1]}.

يشرح الجزء المتبقي من هذا القسم تطبيقين لمصفوفة LCP بمزيد من التفصيل: كيف يمكن استخدام مصفوفة اللواحق ومصفوفة LCP لسلسلة نصية لإنشاء شجرة اللواحق المقابلة وكيف يمكن الإجابة على استعلامات LCP للواحق العشوائية باستخدام استعلامات الحد الأدنى للنطاق على مصفوفة LCP.

أوجد عدد مرات ظهور نمط معين

لإيجاد عدد مرات ظهور سلسلة معينةP{\displaystyle P}(طولم{\displaystyle m}) في نصتي{\displaystyle T}(طولشمال{\displaystyle N}), [ 3 ]

  • نستخدم البحث الثنائي على مصفوفة اللواحق الخاصة بـتي{\displaystyle T}لإيجاد موضع البداية والنهاية لجميع حالات ظهورP{\displaystyle P}.
  • والآن لتسريع عملية البحث، نستخدم مصفوفة LCP، وتحديداً نسخة خاصة من مصفوفة LCP (LCP-LR أدناه).

تكمن المشكلة في استخدام البحث الثنائي القياسي (بدون معلومات LCP) في أنه في كل منيا(سجلشمال){\displaystyle O(\log N)}لإجراء المقارنات، نقارن P بالعنصر الحالي في مصفوفة اللواحق، مما يعني مقارنة سلسلة كاملة تصل إلى m حرفًا. لذا فإن التعقيد هويا(مسجلشمال){\displaystyle O(m\log N)}.

تساعد مصفوفة LCP-LR في تحسين ذلك إلىيا(م+سجلشمال){\displaystyle O(m+\log N)}، بالطريقة التالية:

في أي مرحلة من مراحل خوارزمية البحث الثنائي، نأخذ في الاعتبار، كالمعتاد، نطاقًا(ل،...،R){\displaystyle (L,\dots ,R)}من مجموعة اللواحق ونقطتها المركزيةم{\displaystyle M}ونقرر ما إذا كنا سنواصل بحثنا في النطاق الفرعي الأيسر(ل،...،م){\displaystyle (L,\dots ,M)}أو في النطاق الفرعي الأيمن(م،...،R){\displaystyle (M,\dots ,R)}لكي نتخذ القرار، نقوم بالمقارنةP{\displaystyle P}إلى السلسلة فيم{\displaystyle M}. لوP{\displaystyle P}هو نفسهم{\displaystyle M}لقد اكتمل بحثنا. ولكن إن لم يكن كذلك، فقد قارنا بالفعل الخيار الأول.ك{\displaystyle k}شخصياتP{\displaystyle P}ثم قرر ما إذاP{\displaystyle P}أصغر أو أكبر معجميًا منم{\displaystyle M}لنفترض أن النتيجة هي أنP{\displaystyle P}أكبر منم{\displaystyle M}لذا، في الخطوة التالية، سننظر في(م،...،R){\displaystyle (M,\dots ,R)}ونقطة مركزية جديدةم{\displaystyle M'}في المنتصف:

 م ...... م' ...... ر | نحن نعلم: lcp(P,M)==k

يكمن السر الآن في أن LCP-LR يتم حسابه مسبقًا بحيث يكونيا(1){\displaystyle O(1)}-lookup يخبرنا بأطول بادئة مشتركة لـم{\displaystyle M}وم{\displaystyle M'}،لجص(م،م){\displaystyle \mathrm {lcp} (M,M')}.

نعلم بالفعل (من الخطوة السابقة) أنم{\displaystyle M}له بادئة خاصة بهك{\displaystyle k}الشخصيات المشتركة معP{\displaystyle P}:لجص(P،م)=ك{\displaystyle \mathrm {lcp} (P,M)=k}والآن توجد ثلاثة احتمالات:

  • الحالة 1:ك<لجص(م،م){\displaystyle k<\mathrm {lcp} (M,M')}، أيP{\displaystyle P}تحتوي على عدد أقل من الأحرف البادئة المشتركة مع M مقارنةً بما تشترك فيه M مع M'. هذا يعني أن الحرف (k+1) في M' هو نفسه الحرف (k+1) في M، وبما أن P أكبر معجميًا من M، فلا بد أن تكون أكبر معجميًا من M' أيضًا. لذا نتابع في النصف الأيمن (M',...,R).
  • الحالة الثانية:ك>لجص(م،م){\displaystyle k>\mathrm {lcp} (M,M')}، أيP{\displaystyle P}يحتوي على المزيد من الأحرف البادئة المشتركة معم{\displaystyle M}منم{\displaystyle M}يشترك معم{\displaystyle M'}وبالتالي، إذا قارناP{\displaystyle P}لم{\displaystyle M'}، سيكون البادئة المشتركة أصغر منك{\displaystyle k}، وم{\displaystyle M'}سيكون أكبر معجميًا منP{\displaystyle P}لذا، ودون إجراء المقارنة فعلياً، نواصل في النصف الأيسر(م،...،م){\displaystyle (M,\dots ,M')}.
  • الحالة الثالثة:ك=لجص(م،م){\displaystyle k=\mathrm {lcp} (M,M')}إذن، M و M' متطابقتان معP{\displaystyle P}في الأولك{\displaystyle k}الشخصيات. لتحديد ما إذا كنا سنستمر في النصف الأيسر أو الأيمن، يكفي مقارنةP{\displaystyle P}لم{\displaystyle M'}بدءاً من(ك+1){\displaystyle (k+1)}الحرف th.
  • نستمر بشكل متكرر.

والنتيجة الإجمالية هي أنه لا توجد سمة من سماتP{\displaystyle P}تتم مقارنة الحرف بأي حرف من النص أكثر من مرة (للمزيد من التفاصيل، انظر [ 3 ] ). ويقتصر العدد الإجمالي لمقارنات الأحرف علىم{\displaystyle m}إذن فإن التعقيد الكلي هو بالفعليا(م+سجلشمال){\displaystyle O(m+\log N)}.

ما زلنا بحاجة إلى حساب LCP-LR مسبقًا حتى يتمكن من إخبارنا بذلك فييا(1){\displaystyle O(1)}احسب قيمة LCP بين أي عنصرين في مصفوفة اللواحق. نعلم أن مصفوفة LCP القياسية تعطينا قيمة LCP للعناصر المتتالية فقط، أيلجص(أنا-1،أنا){\displaystyle \mathrm {lcp} (i-1,i)}لأيأنا{\displaystyle i}. لكن،م{\displaystyle M}وم{\displaystyle M'}لا تُعتبر المدخلات المذكورة في الوصف أعلاه بالضرورة مدخلات متتالية.

يكمن مفتاح ذلك في إدراك أن نطاقات معينة فقط(ل،...،R){\displaystyle (L,\dots ,R)}لن يحدث ذلك أبدًا أثناء البحث الثنائي: يبدأ دائمًا بـ(0،...،شمال){\displaystyle (0,\dots ,N)}ويقسمها من المنتصف، ثم يستمر إما إلى اليسار أو اليمين ويقسمها إلى نصفين مرة أخرى وهكذا. ويمكن النظر إلى الأمر بطريقة أخرى  : كل عنصر في مصفوفة اللواحق يمثل نقطة مركزية لنطاق واحد ممكن فقط أثناء البحث الثنائي. لذا، يوجد بالضبط N نطاقًا مختلفًا.(ل...م...R){\displaystyle (L\dots M\dots R)}قد يلعب ذلك دورًا أثناء البحث الثنائي، ويكفي إجراء الحساب المسبق.لجص(ل،م){\displaystyle \mathrm {lcp} (L,M)}ولجص(م،R){\displaystyle \mathrm {lcp} (M,R)}لأولئكشمال{\displaystyle N}النطاقات المحتملة. هذا هو2شمال{\displaystyle 2N}القيم المحسوبة مسبقًا المتميزة، وبالتالي فإن LCP-LR هويا(شمال){\displaystyle O(N)}في الحجم.

علاوة على ذلك، توجد خوارزمية تكرارية مباشرة لحساب2شمال{\displaystyle 2N}قيم LCP-LR فييا(شمال){\displaystyle O(N)}الوقت من مصفوفة LCP القياسية.

لتلخيص:

  • من الممكن حساب LCP-LR فييا(شمال){\displaystyle O(N)}الوقت ويا(2شمال)=يا(شمال){\displaystyle O(2N)=O(N)}مسافة من LCP.
  • يساعد استخدام خوارزمية LCP-LR أثناء البحث الثنائي على تسريع عملية البحث منيا(مسجلشمال){\displaystyle O(M\log N)}ليا(م+سجلشمال){\displaystyle O(M+\log N)}.
  • يمكننا استخدام عمليتي بحث ثنائيتين لتحديد الطرف الأيسر والأيمن لنطاق المطابقة لـP{\displaystyle P}، ويتوافق طول نطاق التطابق مع عدد مرات ظهور P.

بناء شجرة اللواحق

بالنظر إلى مصفوفة اللواحقأ{\displaystyle A}ومصفوفة LCPح{\displaystyle H}من سلسلةS=s1،s2،...sندولار{\displaystyle S=s_{1},s_{2},\ldots s_{n}\$}من الطولن+1{\displaystyle n+1}شجرة اللواحق الخاصة بهاSتي{\displaystyle ST}يمكن بناؤها فييا(ن){\displaystyle O(n)}يعتمد الوقت على الفكرة التالية: ابدأ بشجرة اللواحق الجزئية لأصغر لاحقة معجميًا وقم بإدخال اللواحق الأخرى بشكل متكرر بالترتيب الذي تحدده مصفوفة اللواحق.

يتركSتيأنا{\displaystyle ST_{i}}كن شجرة اللواحق الجزئية لـ0أنان{\displaystyle 0\leq i\leq n}. علاوة على ذلك، دعد(v){\displaystyle d(v)}ليكن طول سلسلة جميع تسميات المسارات من جذرSتيأنا{\displaystyle ST_{i}}إلى العقدةv{\displaystyle v}.

الحالة 1 (د(v)=ح[أنا+1]{\displaystyle d(v)=H[i+1]}): لنفترض اللواحقأدولار{\displaystyle a\$}،أنأدولار{\displaystyle ana\$}،أنأنأدولار{\displaystyle anana\$}وبأنأنأدولار{\displaystyle banana\$}من السلسلةS=بأنأنأدولار{\displaystyle S=banana\$}تمت إضافتها بالفعل إلى شجرة اللواحق. ثم اللاحقةنأدولار{\displaystyle na\$}تمت إضافته إلى الشجرة كما هو موضح في الصورة. تم تمييز المسار الأيمن باللون الأحمر.

ابدأ بـSتي0{\displaystyle ST_{0}}، الشجرة التي تتكون من الجذر فقط. لإدراجأ[أنا+1]{\displaystyle A[i+1]}داخلSتيأنا{\displaystyle ST_{i}}اسلك المسار الأيمن بدءًا من الورقة التي تم إدخالها مؤخرًاأ[أنا]{\displaystyle A[i]}إلى الجذر، حتى أعمق عقدةv{\displaystyle v}معد(v)ح[أنا+1]{\displaystyle d(v)\leq H[i+1]}يتم الوصول إليه.

نحتاج إلى التمييز بين حالتين:

  • د(v)=ح[أنا+1]{\displaystyle d(v)=H[i+1]}هذا يعني أن تسلسل التسميات على الجذر إلىv{\displaystyle v}المسار يساوي أطول بادئة مشتركة من اللواحقأ[أنا]{\displaystyle A[i]}وأ[أنا+1]{\displaystyle A[i+1]}في هذه الحالة ، أدخلأ[أنا+1]{\displaystyle A[i+1]}كصفحة جديدةx{\displaystyle x}عقدةv{\displaystyle v}وقم بتسمية الحافة(v،x){\displaystyle (v,x)}معS[أ[أنا+1]+ح[أنا+1]،ن]{\displaystyle S[A[i+1]+H[i+1],n]}وبالتالي، يتكون تصنيف الحافة من الأحرف المتبقية من اللاحقة.أ[أنا+1]{\displaystyle A[i+1]}التي لا يتم تمثيلها بالفعل من خلال تسلسل تسميات الجذر إلىv{\displaystyle v}المسار. هذا يُنشئ شجرة اللواحق الجزئيةSتيأنا+1{\displaystyle ST_{i+1}}.
    الحالة الثانية (د(v)<ح[أنا+1]{\displaystyle d(v)<H[i+1]}): لإضافة لاحقةنأنأدولار{\displaystyle nana\$}، الحافة المؤدية إلى اللاحقة المُدرجة سابقًانأدولار{\displaystyle na\$}يجب تقسيمها. يتم تسمية الحافة الجديدة المؤدية إلى العقدة الداخلية الجديدة بأطول بادئة مشتركة من اللواحق.نأدولار{\displaystyle na\$}ونأنأدولار{\displaystyle nana\$}. يتم وضع علامات على الحواف التي تربط بين الورقتين باستخدام أحرف اللاحقة المتبقية التي لا تشكل جزءًا من البادئة.
  • د(v)<ح[أنا+1]{\displaystyle d(v)<H[i+1]}هذا يعني أن تسلسل التسميات على الجذر إلىv{\displaystyle v}يعرض المسار عددًا أقل من الأحرف مقارنةً بأطول بادئة مشتركة من اللواحق.أ[أنا]{\displaystyle A[i]}وأ[أنا+1]{\displaystyle A[i+1]}والأحرف المفقودة موجودة في تسمية الحافة لـv{\displaystyle v}الحافة اليمنى لـ 's . لذلك، علينا تقسيم تلك الحافة على النحو التالي: ليكنw{\displaystyle w}أن يكون ابنv{\displaystyle v}علىSتيأنا{\displaystyle ST_{i}}المسار الأيمن.
  1. احذف الحافة(v،w){\displaystyle (v,w)}.
  2. أضف عقدة داخلية جديدةy{\displaystyle y}وحافة جديدة(v،y){\displaystyle (v,y)}مع ملصقS[أ[أنا]+د(v)،أ[أنا]+ح[أنا+1]-1]{\displaystyle S[A[i]+d(v),A[i]+H[i+1]-1]}يتكون الملصق الجديد من الأحرف المفقودة من أطول بادئة مشتركة لـأ[أنا]{\displaystyle A[i]}وأ[أنا+1]{\displaystyle A[i+1]}وبالتالي، فإن تسلسل تسميات الجذر إلىy{\displaystyle y}يعرض المسار الآن أطول بادئة مشتركة لـأ[أنا]{\displaystyle A[i]}وأ[أنا+1]{\displaystyle A[i+1]}.
  3. يتصلw{\displaystyle w}إلى العقدة الداخلية التي تم إنشاؤها حديثًاy{\displaystyle y}من خلال الحافة(y،w){\displaystyle (y,w)}هذا مصنفS[أ[أنا]+ح[أنا+1]،أ[أنا]+د(w)-1]{\displaystyle S[A[i]+H[i+1],A[i]+d(w)-1]}يتكون الملصق الجديد من الأحرف المتبقية من الحافة المحذوفة(v،w){\displaystyle (v,w)}التي لم تُستخدم كعلامة للحافة(v،y){\displaystyle (v,y)}.
  4. يضيفأ[أنا+1]{\displaystyle A[i+1]}كصفحة جديدةx{\displaystyle x}وقم بتوصيله بالعقدة الداخلية الجديدةy{\displaystyle y}من خلال الحافة(y،x){\displaystyle (y,x)}هذا مصنفS[أ[أنا+1]+ح[أنا+1]،ن]{\displaystyle S[A[i+1]+H[i+1],n]}وبالتالي، يتكون تصنيف الحافة من الأحرف المتبقية من اللاحقة.أ[أنا+1]{\displaystyle A[i+1]}التي لا يتم تمثيلها بالفعل من خلال تسلسل تسميات الجذر إلىv{\displaystyle v}طريق.
  5. يؤدي هذا إلى إنشاء شجرة اللواحق الجزئيةSتيأنا+1{\displaystyle ST_{i+1}}.

تُظهر حجة استهلاك بسيطة أن وقت تشغيل هذه الخوارزمية محدود بـيا(ن){\displaystyle O(n)}:

العقد التي يتم اجتيازها في الخطوةأنا{\displaystyle i}عن طريق السير في المسار الأيمن منSتيأنا{\displaystyle ST_{i}}(باستثناء العقدة الأخيرة)v{\displaystyle v}تُزال من المسار الأيمن ، عندماأ[أنا+1]{\displaystyle A[i+1]}تُضاف هذه العقد إلى الشجرة كعقدة جديدة. ولن يتم اجتياز هذه العقد مرة أخرى في جميع الخطوات اللاحقة.ج>أنا{\displaystyle j>i}لذلك، على الأكثر2ن{\displaystyle 2n}سيتم اجتياز العقد بالكامل.

استعلامات LCP عن اللواحق العشوائية

مصفوفة LCPح{\displaystyle H}يحتوي فقط على طول أطول بادئة مشتركة لكل زوج من اللواحق المتتالية في مصفوفة اللواحقأ{\displaystyle A}ومع ذلك، بمساعدة مصفوفة اللواحق العكسيةأ-1{\displaystyle A^{-1}}(أ[أنا]=جأ-1[ج]=أنا{\displaystyle A[i]=j\Leftrightarrow A^{-1}[j]=i}أي اللاحقةS[ج،ن]{\displaystyle S[j,n]}يبدأ ذلك من الموقعج{\displaystyle j}فيS{\displaystyle S}يتم تخزينها في الموضعأ-1[ج]{\displaystyle A^{-1}[j]}فيأ{\displaystyle A}) والاستعلامات الدنيا ذات النطاق الزمني الثابت علىح{\displaystyle H}من الممكن تحديد طول أطول بادئة مشتركة للواحق العشوائية فييا(1){\displaystyle O(1)}وقت.

بسبب الترتيب المعجمي لمصفوفة اللاحقة، كل بادئة مشتركة للواحقS[أنا،ن]{\displaystyle S[i,n]}وS[ج،ن]{\displaystyle S[j,n]}يجب أن يكون بادئة مشتركة لجميع اللواحق بينأنا{\displaystyle i}موقع 's في مصفوفة اللواحقأ-1[أنا]{\displaystyle A^{-1}[i]}وج{\displaystyle j}موقع 's في مصفوفة اللواحقأ-1[ج]{\displaystyle A^{-1}[j]}لذلك، فإن طول أطول بادئة مشتركة بين جميع هذه اللواحق هو القيمة الدنيا في الفترةح[أ-1[أنا]+1،أ-1[ج]]{\displaystyle H[A^{-1}[i]+1,A^{-1}[j]]}يمكن إيجاد هذه القيمة في زمن ثابت إذاح{\displaystyle H}تتم معالجتها مسبقًا للاستعلامات المتعلقة بالحد الأدنى للنطاق.

وبالتالي، بالنظر إلى سلسلة نصيةS{\displaystyle S}من الطولن{\displaystyle n} وموقعان عشوائيان أنا،ج{\displaystyle i,j}في السلسلةS{\displaystyle S} معأ-1[أنا]<أ-1[ج]{\displaystyle A^{-1}[i]<A^{-1}[j]}، طول أطول بادئة مشتركة بين اللواحقS[أنا،ن]{\displaystyle S[i,n]}وS[ج،ن]{\displaystyle S[j,n]}يمكن حسابها على النحو التالي:LCP(أنا،ج)=ح[RMQح(أ-1[أنا]+1،أ-1[ج])]{\displaystyle \operatorname {LCP} (i,j)=H[\operatorname {RMQ} _{H}(A^{-1}[i]+1,A^{-1}[j])]}.

ملحوظات

مراجع

  • أبو الهدى، محمد إبراهيم؛ كورتز، ستيفان؛ أوهليبوش، إينو (2004). "استبدال أشجار اللواحق بمصفوفات اللواحق المحسّنة" . مجلة الخوارزميات المنفصلة . 2 : 53-86 . doi : 10.1016/S1570-8667(03)00065-0 .
  • مانبر، أودي؛ مايرز، جين (1993). "مصفوفات اللواحق: طريقة جديدة للبحث عن السلاسل النصية عبر الإنترنت". مجلة SIAM للحوسبة . 22 (5): 935. CiteSeerX 10.1.1.105.6571 . doi : 10.1137/0222058 . S2CID 5074629 .  
  • كاساي، ت.؛ لي، ج.؛ أريمورا، هـ.؛ أريكاوا، س.؛ بارك، ك. (2001). حساب أطول بادئة مشتركة في مصفوفات اللواحق في زمن خطي وتطبيقاته . وقائع الندوة السنوية الثانية عشرة حول مطابقة الأنماط التوافقية. سلسلة محاضرات في علوم الحاسوب. المجلد  2089. الصفحات 181-192 . doi : 10.1007/3-540-48194-X_17 . ISBN  978-3-540-42271-6.
  • أوهليبوش، إينو؛ فيشر، يوهانس؛ جوج، سيمون (2010). CST++ : معالجة السلاسل النصية واسترجاع المعلومات. سلسلة محاضرات في علوم الحاسوب. المجلد  6393. ص  322. doi : 10.1007/978-3-642-16321-0_34 . ISBN 978-3-642-16320-3.
  • كاركاينن، يوها؛ ساندرز، بيتر ( 2003). بناء مصفوفة لاحقة عمل خطية بسيطة . وقائع المؤتمر الدولي الثلاثين حول الأوتوماتا واللغات والبرمجة. الصفحات 943-955 . تاريخ الاسترجاع: 28 أغسطس 2012 . 
  • فيشر، يوهانس (2011). استقراء مصفوفة LCP . الخوارزميات وهياكل البيانات. سلسلة محاضرات في علوم الحاسوب. المجلد  6844. الصفحات 374-385 . arXiv : 1101.3448 . doi : 10.1007/978-3-642-22300-6_32 . ISBN  978-3-642-22299-3.
  • مانزيني، جيوفاني (2004). حيلتان لتوفير المساحة لحساب مصفوفة LCP في زمن خطي . نظرية الخوارزميات - SWAT 2004. سلسلة محاضرات في علوم الحاسوب. المجلد  3111. ص  372. doi : 10.1007/978-3-540-27810-8_32 . ISBN 978-3-540-22339-9.
  • كاركاينن، يوها؛ مانزيني، جيوفاني؛ بوغليسي، سيمون ج. (2009). مصفوفة البادئة الأطول المشتركة المُبدَّلة . مطابقة الأنماط التوافقية. سلسلة محاضرات في علوم الحاسوب. المجلد  5577. ص  181. doi : 10.1007/978-3-642-02441-2_17 . ISBN 978-3-642-02440-5.
  • بوغليسي، سيمون جيه؛ توربين، أندرو (2008). المفاضلات بين المساحة والوقت لحساب مصفوفة أطول بادئة مشتركة . الخوارزميات والحساب. سلسلة محاضرات في علوم الحاسوب. المجلد  5369. ص  124. doi : 10.1007/978-3-540-92182-0_14 . ISBN 978-3-540-92181-3.
  • جوج، سيمون؛ أوهليبوش، إينو (2011). خوارزميات بناء مصفوفات LCP السريعة والخفيفة (ملف PDF) . وقائع ورشة عمل هندسة الخوارزميات والتجارب، ALENEX 2011. الصفحات 25-34 . تاريخ الاسترجاع: 28 أغسطس 2012 . 
  • نونغ، جي؛ تشانغ، سين؛ تشان، واي هونغ (2009). بناء مصفوفة اللواحق الخطية باستخدام الفرز المستحث شبه النقي . مؤتمر ضغط البيانات 2009. ص  193. doi : 10.1109/DCC.2009.42 . ISBN 978-0-7695-3592-0.
  • فيشر، يوهانس؛ هيون، فولكر (2007). تمثيل جديد موجز لمعلومات RMQ وتحسينات في مصفوفة اللواحق المحسّنة . التوافقية، والخوارزميات، والمنهجيات الاحتمالية والتجريبية. سلسلة محاضرات في علوم الحاسوب. المجلد  4614. ص  459. doi : 10.1007/978-3-540-74450-4_41 . ISBN 978-3-540-74449-8.
  • تشين، جي.؛ بوغليسي، إس. جيه.؛ سميث، دبليو. إف. (2008). "تحليل ليمبل-زيف باستخدام وقت ومساحة أقل". الرياضيات في علوم الحاسوب . 1 (4): 605. doi : 10.1007/s11786-007-0024-4 . S2CID 1721891 . 
  • كروشيمور، م.؛ إيلي، ل. (2008). "حساب أطول عامل سابق في وقت خطي وتطبيقاته". رسائل معالجة المعلومات . 106 (2): 75. CiteSeerX 10.1.1.70.5720 . doi : 10.1016/j.ipl.2007.10.006 . S2CID 5492217 .  
  • كروشيمور، م.؛ إيلي، ل.؛ سميث، و. ف. (2008). خوارزمية بسيطة لحساب تحليل ليمبل زيف . مؤتمر ضغط البيانات (dcc 2008). ص  482. doi : 10.1109/DCC.2008.36 . hdl : 20.500.11937/5907 . ISBN 978-0-7695-3121-2.
  • ساداكاني، ك. (2007). "أشجار اللواحق المضغوطة ذات الوظائف الكاملة". نظرية أنظمة الحوسبة . 41 (4): 589-607 . CiteSeerX 10.1.1.224.4152 . doi : 10.1007/s00224-006-1198-x . S2CID 263130 .  
  • فيشر، يوهانس؛ ماكينين، فيلي؛ نافارو، غونزالو (2009). "أشجار اللواحق المضغوطة ذات الإنتروبيا المحدودة الأسرع" . علوم الحاسوب النظرية . 410 (51): 5354. doi : 10.1016/j.tcs.2009.09.012 .
  • فيشر، يوهانس؛ كوربيتش، فلوريان (5 أكتوبر 2017). "تفكيك DivSufSort". وقائع مؤتمر براغ لعلم السلاسل 2017. arXiv : 1710.01896 .