أطول متتالية جزئية متزايدة في علم الحاسوب، تعالج مسألةُ إيجاد البحث عن متتالية جزئية من متتالية معطاة بحيث تكون عناصر هذه المتتالية الجزئية مرتبة، تصاعديّاً أو تنازليًّا، وبحيث تكون أطول ما يمكن .وهذه المتتالية الجزئية ليست بالضرورة ناتجة عن عناصر متجاورة كما أنها يمكن ألا تكون وحيدة ضمن المتتالية الأصلية. تمت دراسة مسألة إيجاد أطول متتالية جزئية متزايدة في سياق دراسة عدة فروع متعلقة بالرياضيات، متضمنة الخوارزميات ، تجمع مصفوفة غاوسية،نظرية تمثيل الزمر، والفيزياء.[1] يمكن حل مسألة إيجاد أطول متتالية جزئية متزايدة في زمن( O(n log n، حيث n هو طول متتالية الدخل .
مثال
في متتالية ڤان دير كورپت الثنائية
- 0، 8، 4، 12، 2، 10، 6، 14، 1، 9، 5، 13، 3، 11، 7، 15، …
إحدى المتتاليات الجزئية الأطول المتزايدة هي
- 0، 2، 6، 9، 13، 15.
طول هذه المتتالية الجزئية هو 6; أي أن المتتالية الأصلية لا تحوي متتالية جزئية من 7 عناصر يمكنها تشكيل متتالية جزئية متزايدة.كما أن المتتالية الجزئية المتزايدة الأطول ليست وحيدة فمثلاً لدينا
- 0، 4، 6، 9، 11، 15 أو 0، 4، 6، 9، 13، 15
هما متتاليتان جزئيتان متزايدتان من نفس طول المتتالية الجزئية المتزايدة الأطول .
علاقتها بمسائل خوارزمية أخرى
مسألة إيجاد المتتالية الجزئية المتزايدة الأطول لها تعلق وطيد بمسألة إيجاد أطول متتالية جزئية مشتركة، والتي تحتاج زمناً من الدرجة الثالثة لحلها باستخدام البرمجة الديناميكية : إن أطول متتالية جزئية متزايدة في متتالية ما S هي أطول متتالية جزئية مشتركة بين المتتاليتين S و T، حيث T هي نتيجة ترتيب المتتالية S.
من أجل الحالة الخاصة التي يكون فيها الدخل عبارة عن تبديل للأعداد الصحيحة 1، 2، ...، n، يمكن لهذا الحل أن يكون فعالاً، ليعطينا حلاً بحدود( O(n log log n.[2]
خوارزمية فعالة للحل
الخوارزمية التالية تحلّ مسألة إيجاد أطول متتالية جزئية متزايدة باستخدام المصفوفات والبحث الثنائي. فهي تقوم بمعالجة عناصر المتتالية تباعاً، وتقوم بحفظ أطول متتالية جزئية تم العثور عليها حتى الآن. إذا رمزنا إلى عناصر المتتالية بـ [X[1]، X[0، الخ. فبعد معالجة العنصر [X[i، تكون الخوارزمية قد حفظت قيماً في مصفوفتين:
- [M[j — تحفظ قيمة الفهرس k لأصغر عنصر [X[k حيث توجد متتالية جزئية متزايدة طولها j وتنتهي بالعنصر [X[kفي المجال k ≤ i (لاحظ أن لدينا هنا j ≤ k ≤ i ، لأن j يمثل طول المتتالية الجزئية المتزايدة، وk يمثل رقم فهرس انتهاء المتتالية الجزئية.فمن الواضح أنه لا يمكننا الحصول على متتالية جزئية متزايدة طولها 13 عندما نكون لانزال عند العناصر رقم 11 ، . k ≤ i بالتعريف).
- [P[k — تحفظ رقم الفهرس للعنصر الذي يسبق [X[k في أطول متتالية جزئية متزايدة تنتهي عند [X[k.
إضافة لما سبق فإن الخوارزمية تحفظ عدداً L يمثل طول أطول متتالية جزئية متزايدة تم العثور عليها حتى الآن.
في الخوارزمية أدناه سنزيح المصفوفة M بالعنصر [M[0 الذي لن يستخدم للتسهيل (فالمصفوفة تستخدم الترقيم بدءاً من الصفر ).
لاحظ أن المتتالية [[X[M[1]]، X[M[2]]، ...، X[M[L تكون غير متناقصة عند أي نقطة من الخوارزمية، لذلك إذا كان هناك متتالية جزئية طولها i تنتهي عند [[X[M[i فهناك أيضاً متتالية جزئية طولها i-1 تنتهي عند قيمة أصغر : وهي القيمة [[[X[P[M[i. لذلك نقوم بعمل بحث ثنائي في المتتالية في زمن لوغاريتمي .
سنكتب الخوارزمية بالعربية لتقريبها إلى الفهم أكثر بحيث توضح المسميات وظيفة كل متحول ومصفوفة وذلك كما يلي :
- سنرمز بالكلمة أمجد لــأطول متتالية جزئية متزايدة .
- [M[j تكافئها : رقم_أصغر_نهاية_لأمجد_بطول_ما[ج]
- [P[k تكافئها : رقم_السابق_في_أمجد_لعنصر_ما[ك]
- [X[k تكافئها : الدخل[ك]
- عدد العناصر N يقابله الحجم
- طول أمجد تم العثور عليها L يقابله الطول
نص الخوارزمية بطريقة شبه الكود كما يلي :
رقم_السابق_في_أمجد_لعنصر_ما = مصفوفة طولها الحجم رقم_أصغر_نهاية_لأمجد_بطول_ما = مصفوفة طولها الحجم+1 الطول = 0 من أجل المتحول س ضمن المجال من 0 إلى الحجم-1 : \\ بحث ثنائي للعثور على أكبر قيمة تحقق العلاقتين ج ≤ الطول \\ و الدخل[ رقم_أصغر_نهاية_لأمجد_بطول_ما[ج] ] <الدخل[س] رقم_القيمة_الأدنى = 1 رقم_القيمة_الأعلى = الطول طالما رقم_القيمة_الأدنى ≤ رقم_القيمة_الأعلى : رقم_القيمة_الوسطى = (رقم_القيمة_الأدنى+رقم_القيمة_الأعلى)\2 إذا كان الدخل[ رقم_أصغر_نهاية_لأمجد_بطول_ما[رقم_القيمة_الوسطى] ] <الدخل[س]: رقم_القيمة_الأدنى = رقم_القيمة_الوسطى +1 وإلا : رقم_القيمة_الأعلى = رقم_القيمة_الوسطى -1 نهاية جملة الشرط نهاية حلقة التكرار \\ بعد انتهاء البحث،رقم_القيمة_الأدنى أكبر بمقدار 1 من \\ طول أمجد التي تسبق الدخل[س] الطول_الجديد = رقم_القيمة_الأدنى \\ العنصر الذي يسبق الدخل[س] في أمجد المنتهية بالدخل[س] \\ هو آخر عنصر من أمجد ذات الطول الطول_الجديد -1 السابق_في_أمجد_لعنصر_ما[س] = رقم_أصغر_نهاية_لأمجد_بطول_ما[الطول_الجديد -1 ] إذا كان الطول_الجديد> الطول : \\ أي أننا وجدنا أمجد جديدة أطول من السابقة \\ لذلك علينا تحديث قيمة الطول و رقم_أصغر_نهاية_لأمجد_بطول_ما رقم_أصغر_نهاية_لأمجد_بطول_ما[الطول_الجديد] = س الطول = الطول_الجديد وإلا إذا كان الدخل[س] <الدخل[رقم_أصغر_نهاية_لأمجد_بطول_ما[الطول_الجديد]]: \\ أي أننا عثرنا على قيمة أصغر لنهاية أمجد بطول الطول_الجديد \\ فعلينا تغيير هذه القيمة رقم_أصغر_نهاية_لأمجد_بطول_ما[الطول_الجديد] = س نهاية جملة الشرط نهاية حلقة التكرار \\إعادة بناء أمجد عناصر_أمجد = مصفوفة طولها الطول ك = رقم_أصغر_نهاية_لأمجد_بطول_ما[الطول] من أجل المتحول س في المجال من الطول-1 إلى 0 : عناصر_أمجد[س] = الدخل [ك] ك = رقم_السابق_في_أمجد_لعنصر_ما[ك] نهاية حلقة التكرار قم بإعادة عناصر_أمجد نهاية الخوارزمية
الزمن الكلي الذي تستغرقه الخوارزمية باستخدام رمز O الكبير هو (O(n log n وذلك لأن الخوارزمية تقوم بعملية بحث ثنائي من أجل كل عنصر .ناقش العالم فريدمان(1975) تعديلات على الخوارزمية نسبها إلى دونالد كنوث ، تختبر خوارزميته المعدلة فيما إذا كان من الممكن استخدام العنصر [X[i لتمديد المتتالية الجزئية الحالية الأطول، وذلك خلال زمن ثابت، وذلك قبل القيام بالبحث الثنائي .
تستخدم الخوارزمية وفق هذا التعديل عدداً أقصى من عمليات المقارنة هو (n log2 n − n log2log2 n + O(n في الحالة الأسوأ، وهو زمن مثالي لخوارزمية تعتمد المقارنة وذلك حتى الوصول إلى الثابت في عبارة (O(n .
حدود الطول
حسب مبرهنة إيردوس-سيكريس، فإن أي متتالية من n2+1 عدد صحيح مختلف إما أن يكون لها متتالية جزئية متزايدة أو متناقصة طولها n+1.
في القوائم التي تكون فيها كل تبديلات القائمة متماثلة تقريباً، يكون الطول المتوقع لأطول متتالية جزئية متزايدة هو تقريباً2√n. عندما تسعى n إلى اللانهاية، يكون طول أطول متتالية جزئية متزايدة في متتالية مبدّلة عشوائياً من n عنصر ذا توزّع يقترب من توزّع Tracy–Widom ، أي توزع أكبر قيمة ذاتية لمصفوفة عشوائية ضمن تجمع الغاوسي المتكامل .
خوارزميات متصلة على الخط
مقالات ذات صلة
مراجع
- Aldous, David; Diaconis, Persi (1999), "Longest increasing subsequences: from patience sorting to the Baik–Deift–Johansson theorem", Bulletin of the American Mathematical Society, 36 (04): 413–432, doi:10.1090/S0273-0979-99-00796-X .
- Hunt, J.; Szymanski, T. (1977), "A fast algorithm for computing longest common subsequences", Communications of the ACM, 20 (5): 350–353, doi:10.1145/359581.359603