You are on page 1of 9

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‬‬

You might also like