Data Structure and algorithms
)Skip Lists( قوائم التخطي
4 / April / 2019
قوائم التخطي (1 - )Skip Lists
ً ً
تحتوي القوائم املرتبطة على عيب واحد خطير ،فهي تتطلب مسحا تسلسليا لتحديد عنصر
مطلوب البحث عنه.
حيث يبدأ البحث من بداية القائمة ( )headويتوقف عند العثور على العنصر املطلوب
البحث عنه أو الوصول إلى نهاية القائمة دون العثور على هذا العنصر.
يمكن أن يؤدي ترتيب العناصر (وفق عالقة أكبر أو أصغر ملواصفة أو مواصفات الغرض) في
ً
القائمة إلى تسريع عملية البحث ،ولكن ال يزال البحث املتسلسل مطلوبا.
لذلك ،قد نفكر في القوائم التي تسمح بتخطي بعض العقد لتجنب املعالجة املتسلسلة.
قائمة التخطي :هي نوع مثير لإلهتمام من القوائم املرتبطة املرتبة والتي تجعل املعالجة غير
املتسلسلة ممكنة.
قوائم التخطي (2 - )Skip Lists
قائمة التخطي هي بنية بيانات تسمح بـ:
تعقيد بحث )𝑛 𝑂 (log
تعقيد اإلدراج )𝑛 𝑂 (log
ضمن تسلسل مرتب لـ ( )nعنصر.
وبالتالي ،يمكن أن تحصل على أفضل مصفوفة (للبحث) مع الحفاظ على بنية قائمة تشبه
قائمة تسمح باإلدخال -وهو أمر غير ممكن في املصفوفات.
قائمة التخطي مبنية في طبقات ،حيث الطبقة السفلية هي قائمة مرتبطة مرتبة عادية ،وكل
طبقة أعلى تكون بمثابة "ممر صريح" للقوائم الجزئية األخرى.
قوائم التخطي (3 - )Skip Lists
من أجل قائمة مترابطة ب ـ ُ )n( :عقدة فإن :العقدة الثانية تشير إلى العقدتين التاليتين لها ،والعقدة الرابعة
تشير إلى ُ
العقد األربعة التالية لها ،وهكذا.
يتم تحقيق ذلك من خالل وجود أرقام مختلفة من املؤشرات في ُعقد القائمة :نصف العقد يحتوي على مؤشر
واحد فقط ،وربع العقد يحتوي على مؤشرين ،وثمن العقد يحتوي على ثالثة مؤشرات ،وهكذا.
العقد التي تبدأ عندها القوائم «الجزئية» هي 2،4،8،16،32،64،128، … … .. :وهي ذات مستويات متساوية. أرقام ُ
Level
null
4
null
3
22
10 45
null
2
7 17 31
5 8 12 19 28 37
null
1
head 2nd node 4th node 8th node tail
make all nodes level 1
j ← 1
while the number of nodes at level j > 1 do
معلومات من اإلنترنيت
for each i'th node at level j do
if i is odd
يمكن أن نجعل
if i is not the last node at level j
randomly choose whether to promote it to level j+1
مستويات البنية شبه
else
do not promote
عشوائية وفق
end if
else if i is even and node i-1 was not promoted
:الخوارزمية التالية
promote it to level j+1
end if
repeat : الشكل التالي كمثال
j ← j + 1
repeat
معلومات من اإلنترنيت
خوارزمية البحث في قوائم التخطي ()Search
معلومات من اإلنترنيت
دالة البحث في قوائم
التخطي ()Search
باللغة ()C++
سؤال
• احسب تعقيد خوارزمية البحث وفق ()Big-O notation
• تتبع خوارزمية البحث من أجل البحث عن قيمة ما في قائمة التخطي التالية:
Level
null
4
null
3
22
10 45
null
2
7 17 31
5 8 12 19 28 37
null
1
head 2nd node 4th node 8th node tail