خوارزمية ديكسترا
خوارزمية ديكسترا ( تُلفظ /ˈdaɪk.strəz/ ، دايك - سترز ) هي خوارزمية لإيجاد أقصر المسارات بين العقد في رسم بياني مُثقَّل، والذي قد يُمثِّل ، على سبيل المثال، شبكة طرق . ابتكرها عالم الحاسوب إدسكار دبليو ديكسترا عام 1956 ونُشرت بعد ثلاث سنوات. [ 4 ] [ 5 ] [ 6 ]
تُحدد خوارزمية ديكسترا أقصر مسار من عقدة مصدر معينة إلى جميع العقد الأخرى. [ 7 ] : 196-206. ويمكن استخدامها لإيجاد أقصر مسار إلى عقدة وجهة محددة، وذلك بإنهاء الخوارزمية بعد تحديد أقصر مسار إلى تلك العقدة. على سبيل المثال، إذا كانت عقد الرسم البياني تُمثل مدنًا، وكانت تكاليف الحواف تُمثل المسافات بين أزواج المدن المتصلة بطريق مباشر، فيمكن استخدام خوارزمية ديكسترا لإيجاد أقصر مسار بين مدينة واحدة وجميع المدن الأخرى. من التطبيقات الشائعة لخوارزميات أقصر مسار بروتوكولات توجيه الشبكات ، وأبرزها بروتوكول IS-IS (النظام الوسيط إلى النظام الوسيط) وبروتوكول OSPF (فتح أقصر مسار أولًا). كما تُستخدم أيضًا كإجراء فرعي في خوارزميات أخرى مثل خوارزمية جونسون .
تستخدم الخوارزمية بنية بيانات قائمة انتظار ذات أولوية دنيا لاختيار أقصر المسارات المعروفة حتى الآن. قبل اكتشاف هياكل قوائم الانتظار ذات الأولوية الأكثر تطورًا، كانت خوارزمية ديكسترا الأصلية تعمل فيالوقت ، أينيمثل عدد العقد. [ 8 ] [ 9 ] اقترح فريدمان وتارجان (1984) طابور أولوية كومة فيبوناتشي لتحسين تعقيد وقت التشغيل إلى، أينيمثل عدد الحواف. تُعد هذه الخوارزمية، من الناحية التقاربية، الأسرع المعروفة لإيجاد أقصر مسار من مصدر واحد للرسوم البيانية الموجهة ذات الأوزان غير السالبة وغير المحدودة. مع ذلك، يمكن تحسين الحالات الخاصة (مثل الأوزان المحدودة/الصحيحة، والرسوم البيانية الموجهة غير الدورية، إلخ) بشكل أكبر . في حال السماح بالمعالجة المسبقة، يمكن أن تكون خوارزميات مثل التسلسلات الهرمية الانكماشية أسرع بما يصل إلى سبعة أضعاف .
تُستخدم خوارزمية ديكسترا عادةً على الرسوم البيانية التي تكون فيها أوزان الحواف أعدادًا صحيحة موجبة أو أعدادًا حقيقية. ويمكن تعميمها على أي رسم بياني تكون فيه أوزان الحواف مرتبة جزئيًا ، بشرط أن تكون التسميات اللاحقة (يتم إنتاج تسمية لاحقة عند اجتياز حافة) غير متناقصة بشكل رتيب . [ 10 ] [ 11 ]
في العديد من المجالات، وخاصة الذكاء الاصطناعي ، تقدم خوارزمية ديكسترا أو أحد متغيراتها بحثًا بتكلفة موحدة ، ويتم صياغتها كمثال على الفكرة الأكثر عمومية للبحث الأفضل أولاً . [ 12 ]
تاريخ
ما هو أقصر طريق للسفر من روتردام إلى جرونينجن ، بشكل عام: من مدينة معينة إلى مدينة معينة؟ إنها خوارزمية أقصر مسار ، صممتها في حوالي عشرين دقيقة. في صباح أحد الأيام، كنت أتسوق في أمستردام مع خطيبتي الشابة، وكنا متعبين، فجلسنا على شرفة المقهى لنحتسي فنجان قهوة، وكنت أفكر فيما إذا كان بإمكاني فعل ذلك، فصممت خوارزمية أقصر مسار. كما قلت، كان ابتكارًا استغرق عشرين دقيقة. في الواقع، نُشرت الخوارزمية عام 1959، بعد ثلاث سنوات. لا يزال المنشور مقروءًا، وهو في الحقيقة جميل جدًا. أحد أسباب جماله هو أنني صممته دون استخدام قلم وورقة. علمت لاحقًا أن إحدى مزايا التصميم دون قلم وورقة هي أنك تُجبر تقريبًا على تجنب كل التعقيدات التي يمكن تجنبها. في النهاية، أصبحت تلك الخوارزمية، لدهشتي الكبيرة، إحدى ركائز شهرتي.
— إدسكار ديجكسترا، في مقابلة مع فيليب إل. فرانا، اتصالات جمعية آلات الحوسبة، 2001 [ 5 ]
فكّر ديكسترا في مسألة أقصر مسار أثناء عمله كمبرمج في المركز الرياضي بأمستردام عام ١٩٥٦. أراد أن يُظهر قدرات حاسوب ARMAC الجديد. [ ١٣ ] كان هدفه اختيار مسألة وحل حاسوبي يُمكن لغير المتخصصين في الحوسبة فهمهما. صمّم خوارزمية أقصر مسار، ثم طبّقها لاحقًا على ARMAC لخريطة نقل مُبسّطة قليلاً لـ ٦٤ مدينة في هولندا (حدّدها بـ ٦٤ مدينة، بحيث تكفي ٦ بتات لترميز رقم المدينة). [ ٥ ] بعد عام، صادف مسألة أخرى طرحها مهندسو الأجهزة العاملون على حاسوب المعهد التالي: تقليل كمية الأسلاك اللازمة لتوصيل دبابيس اللوحة الخلفية للجهاز. كحل، أعاد اكتشاف خوارزمية الشجرة الممتدة الدنيا لبريم (المعروفة سابقًا ليارنيك ، والتي أعاد بريم اكتشافها أيضًا ). [ 14 ] [ 15 ] نشر ديكسترا الخوارزمية في عام 1959، بعد عامين من بريم و29 عامًا من جارنيك. [ 16 ] [ 17 ]
الخوارزمية

تتطلب الخوارزمية عقدة بداية، وتحسب أقصر مسافة من تلك العقدة إلى كل عقدة أخرى. تبدأ خوارزمية ديكسترا بمسافات لا نهائية وتحاول تحسينها خطوة بخطوة.
- أنشئ مجموعة من جميع العقد التي لم تتم زيارتها: مجموعة العقد التي لم تتم زيارتها.
- يُخصص لكل عقدة قيمة مسافة من نقطة البداية: بالنسبة لعقدة البداية، تكون المسافة صفرًا، وبالنسبة لجميع العقد الأخرى، تكون المسافة ما لا نهاية، نظرًا لعدم وجود مسار معروف لهذه العقد في البداية. أثناء التنفيذ، تكون مسافة العقدة N هي طول أقصر مسار تم اكتشافه حتى الآن بين عقدة البداية و N. [ 18 ]
- من مجموعة العقد غير المزارة، يتم اختيار العقدة الحالية لتكون ذات أقصر مسافة (محدودة)؛ في البداية، تكون هذه هي عقدة البداية (مسافة صفر). إذا كانت مجموعة العقد غير المزارة فارغة، أو تحتوي فقط على عقد ذات مسافة لا نهائية (غير قابلة للوصول)، فإن الخوارزمية تتوقف بالانتقال إلى الخطوة 6. إذا كان الهدف الوحيد هو الوصول إلى عقدة مستهدفة، فإن الخوارزمية تتوقف بمجرد أن تصبح العقدة الحالية هي العقدة المستهدفة. وإلا، تستمر الخوارزمية.
- بالنسبة للعقدة الحالية، ضع في اعتبارك جميع جيرانها الذين لم تتم زيارتهم، وقم بتحديث المسافات بينهم عبر العقدة الحالية؛ قارن المسافة المحسوبة حديثًا بالمسافة المُخصصة حاليًا للجيران، ثم خصص المسافة الأقصر للجيران. على سبيل المثال، إذا كانت العقدة الحالية A مُحددة بمسافة 6، وكان طول الحافة التي تربطها بجارتها B هو 2، فإن المسافة إلى B عبر A هي 6 + 2 = 8. إذا كانت B مُحددة سابقًا بمسافة أكبر من 8، فقم بتحديثها إلى 8 (المسار إلى B عبر A أقصر). وإلا، فاحتفظ بمسافتها الحالية (المسار إلى B عبر A ليس الأقصر).
- بعد النظر في جميع جيران العقدة الحالية الذين لم تتم زيارتهم، تُزال العقدة الحالية من مجموعة العقد غير المُزارة. وبالتالي، لا يُعاد فحص العقدة التي تمت زيارتها، وهذا صحيح لأن المسافة المُسجلة على العقدة الحالية هي الحد الأدنى (كما تم التأكد منه في الخطوة 3)، وبالتالي فهي نهائية. كرر الخطوات من الخطوة 3.
- بمجرد خروج الحلقة (الخطوات 3-5)، تحتوي كل عقدة تمت زيارتها على أقصر مسافة لها من عقدة البداية.
وصف
يمكن إيجاد أقصر مسار بين تقاطعين على خريطة مدينة باستخدام هذه الخوارزمية بقلم وورقة. يُدرج كل تقاطع على سطر منفصل: أحدهما نقطة البداية ويُرمز له بالمسافة 0. أما باقي التقاطعات، فتُرمز لها في البداية بالمسافة اللانهائية. يُقصد بذلك الإشارة إلى أنه لم يتم تحديد مسار إلى هذه التقاطعات بعد. في كل تكرار، يصبح أحد التقاطعين هو التقاطع الحالي. في التكرار الأول، يكون هذا التقاطع هو نقطة البداية.
انطلاقًا من التقاطع الحالي، تُحسب المسافة إلى كل تقاطع مجاور (متصل مباشرةً) بجمع قيمة (تصنيف) التقاطع الحالي مع المسافة إلى التقاطع المجاور، ثم يُعاد تصنيف التقاطع المجاور بالقيمة الأقل بين المجموع وتصنيفه الحالي. أي، يُعاد تصنيف التقاطع المجاور إذا كان المسار إليه عبر التقاطع الحالي أقصر من المسارات التي حُسبت سابقًا. في هذه الحالة، يُشار إلى الطريق المؤدي إلى التقاطع المجاور بسهم، ويُحذف أي سهم آخر يشير إليه. بعد حساب المسافات إلى كل تقاطع مجاور للتقاطع الحالي، يُصنف التقاطع الحالي على أنه تمت زيارته. يصبح التقاطع غير المُزار ذي التصنيف الأصغر هو التقاطع الحالي، وتتكرر العملية حتى تتم زيارة جميع العقد ذات التصنيفات الأقل من تصنيف الوجهة.
بمجرد عدم وجود عقد غير تمت زيارتها تحمل تسمية أصغر من تسمية الوجهة، فإن الأسهم المتبقية تُظهر أقصر مسار.
الشفرة الزائفة
في الشفرة الزائفة التالية ، يمثل `dist` مصفوفة تحتوي على المسافات الحالية من المصدر إلى الرؤوس الأخرى، أي أن `dist[ u ]` هي المسافة الحالية من المصدر إلى الرأس `u` . تحتوي المصفوفة `prev` على مؤشرات إلى عقد القفزة السابقة على أقصر مسار من المصدر إلى الرأس المحدد (أو، بشكل مكافئ، هي القفزة التالية على المسار من الرأس المحدد إلى المصدر). يبحث الكود `u ← vertex in Q with min dist[u] ` عن الرأس `u` في مجموعة الرؤوس ` Q` الذي له أقل قيمة لـ `dist[ u ]` . تُرجع الدالة `Graph.Distance( u , v ) ` طول الحافة التي تربط (أي المسافة بين) العقدتين المتجاورتين `u` و` v` . يمثل المتغير `alt` في السطر 14 طول المسار من عقدة المصدر إلى العقدة المجاورة `v` إذا كان سيمر عبر `u` . إذا كان هذا المسار أقصر من أقصر مسار مسجل حاليًا لـ `v` ، فسيتم تحديث مسافة ` v` إلى `alt` . [ 7 ]

دالة واحدة Dijkstra( الرسم البياني ، المصدر ): 2 3 لكل رأس v في Graph.Vertices : 4 مسافة[ v ] ← ما لا نهاية 5 prev[ v ] ← غير مُعرَّف 6 أضف v إلى Q 7 dist[ source ] ← 0 8 9 طالما أن Q ليست فارغة: 10 u ← رأس في Q ذو أقل مسافة dist[u] 11 Q.remove(u) 12 13 لكل حافة (u, v) في الرسم البياني : 14 alt ← dist[ u ] + Graph.Distance( u , v ) 15 إذا كان alt < dist[ v ]: 16 dist[ v ] ← alt 17 prev[ v ] ← u 18 19 إرجاع dist[], prev[]
لإيجاد أقصر مسار بين رأسي المصدر والهدف ، يتوقف البحث بعد السطر 10 إذا كان u = الهدف . ويمكن الحصول على أقصر مسار من المصدر إلى الهدف عن طريق التكرار العكسي.
1 S ← تسلسل فارغ 2 u ← target 3 إذا كانت prev[ u ] معرفة أو u = source : // تابع إذا كان الوصول إلى الرأس ممكنًا 4 بينما u معرفة: // أنشئ أقصر مسار باستخدام المكدس S 5 S.push(u) // ادفع الرأس إلى المكدس 6 u ← prev[ u ] // انتقل من الهدف إلى المصدر
الآن، التسلسل S هو قائمة الرؤوس التي تشكل أحد أقصر المسارات من المصدر إلى الهدف ، أو التسلسل الفارغ إذا لم يكن هناك مسار موجود.
تتمثل إحدى المشكلات الأكثر عمومية في إيجاد جميع أقصر المسارات بين المصدر والهدف (قد يكون هناك عدة مسارات بنفس الطول). عندئذٍ، بدلاً من تخزين عقدة واحدة فقط في كل مدخل من مصفوفة prev[]، يمكن تخزين جميع العقد التي تحقق شرط التخفيف. على سبيل المثال، إذا كانت كل من r والمصدر متصلة بالهدف وتقعان على أقصر مسارين مختلفين عبر الهدف (لأن تكلفة الحافة متساوية في الحالتين)، فسيتم إضافة كل من r والمصدر إلى prev[ target ] . عند اكتمال الخوارزمية، تصف بنية بيانات prev[] رسمًا بيانيًا يمثل مجموعة فرعية من الرسم البياني الأصلي مع إزالة بعض الحواف. وتتمثل خاصيتها الرئيسية في أنه إذا تم تشغيل الخوارزمية بعقدة بداية معينة، فإن كل مسار من تلك العقدة إلى أي عقدة أخرى في الرسم البياني الجديد يمثل أقصر مسار بين تلك العقد، وجميع المسارات بهذا الطول من الرسم البياني الأصلي موجودة في الرسم البياني الجديد. بعد ذلك، لإيجاد جميع أقصر هذه المسارات بين عقدتين معطيتين، يمكن استخدام خوارزمية بحث عن المسار على الرسم البياني الجديد، مثل البحث العميق أولاً .
استخدام قائمة انتظار ذات أولوية
طابور الأولوية الدنيا هو نوع بيانات مجرد يوفر ثلاث عمليات أساسية: إضافة عنصر بأولوية ، وإنقاص الأولوية، واستخراج الحد الأدنى . وكما ذُكر سابقًا، فإن استخدام هذا النوع من هياكل البيانات يُسرّع عملية الحساب مقارنةً باستخدام طابور عادي. ومن الجدير بالذكر أن كومة فيبوناتشي [ 19 ] أو طابور برودال يُقدمان تطبيقات مثالية لهذه العمليات الثلاث. ولأن الخوارزمية تختلف قليلًا في الشكل، فقد تم تنفيذها هنا بشكل منفصل باستخدام الشفرة الزائفة.
دالة واحدة Dijkstra( الرسم البياني ، المصدر ): 2 Q ← طابور تخزين أولوية الرأس 3 4 dist[ source ] ← 0 // التهيئة 5 Q .add_with_priority( source , 0) // الأولوية المرتبطة تساوي dist[·] 6 7 لكل رأس v في Graph.Vertices : ٨ إذا كانت v ≠ المصدر ٩ prev[ v ] ← غير مُعرَّف // السلف لـ v ١٠ dist[ v ] ← ما لا نهاية // مسافة غير معروفة من المصدر إلى v 11 Q.add_with_priority(v, INFINITY) 12 13 ١٤ طالما أن Q غير فارغة: // الحلقة الرئيسية ١٥ u ← Q.extract_min () // إزالة أفضل رأس وإرجاعه ١٦ لكل حافة (u, v): // المرور على جميع الجيران v لـ u ١٧ alt ← dist[ u ] + Graph.Distance( u , v ) 18 إذا كان alt < dist[ v ]: 19 prev[ v ] ← u 20 dist[ v ] ← alt 21 Q .decrease_priority( v , alt ) 22 23 return (dist, prev)
بدلاً من ملء قائمة الانتظار ذات الأولوية بجميع العقد في مرحلة التهيئة، يمكن تهيئتها لتحتوي على المصدر فقط ؛ عندئذٍ، داخل الكتلة، تتحول عملية ` decrease_priority()` إلى عملية `add_with_priority()` . [ 7 ] : 198ifalt < dist[v]
ثمة بديل آخر يتمثل في إضافة العقد إلى قائمة الانتظار ذات الأولوية دون شروط، ثم التحقق بعد الاستخراج من عدم إعادة زيارة العقدة، أو من عدم العثور على اتصال أقصر في الكتلة. ويمكن تحقيق ذلك باستخراج الأولوية المرتبطة من قائمة الانتظار، ثم معالجتها داخل الحلقة فقط. [ 20 ]u ← Q.extract_min()if alt < dist[v]pifp == dist[u]whileQ is not empty
يمكن لهذه البدائل استخدام قوائم انتظار ذات أولوية قائمة بالكامل على المصفوفات دون وظيفة تقليل المفتاح، وقد وُجد أنها تحقق أوقات حساب أسرع في الواقع العملي. ومع ذلك، وُجد أن الفرق في الأداء يكون أقل وضوحًا بالنسبة للرسوم البيانية الأكثر كثافة. [ 21 ]
دليل
لإثبات صحة خوارزمية ديكسترا، يمكن استخدام الاستقراء الرياضي على عدد العقد التي تمت زيارتها. [ 22 ]
الفرضية الثابتة : لكل عقدة تمت زيارتها v ، فإن هي أقصر مسافة من المصدر إلى v ، ولكل عقدة لم تتم زيارتها u ، فإن هي أقصر مسافة من المصدر إلى u عند المرور عبر العقد التي تمت زيارتها فقط، أو ما لا نهاية إذا لم يكن هناك مسار كهذا. (ملاحظة: لا نفترض أن هي أقصر مسافة فعلية للعقد التي لم تتم زيارتها، بينما هي أقصر مسافة فعلية).dist[v]dist[u]dist[u]dist[v]
الحالة الأساسية
تتمثل الحالة الأساسية في وجود عقدة واحدة فقط تمت زيارتها، وهي المصدر . تُعرَّف المسافة بينها بأنها صفر، وهي أقصر مسافة، نظرًا لعدم السماح بالأوزان السالبة. وبالتالي، فإن الفرضية صحيحة.
تعريفي
بافتراض صحة الفرضية لـالعقد التي تمت زيارتها، لإظهار أنها تنطبق علىلنفترض أن u هي العقدة التالية التي تمت زيارتها، أي العقدة ذات أقصر مسافة . المطلوب هو أن u هي أقصر مسافة من المصدر إلى u .dist[u]dist[u]
البرهان قائم على التناقض. إذا كان هناك مسار أقصر متاح، فإن هذا المسار الأقصر إما يحتوي على عقدة أخرى لم تتم زيارتها أو لا يحتوي عليها.
- في الحالة الأولى، لنفترض أن w هي أول عقدة غير مُزارة على هذا المسار الأقصر. بالاستقراء، فإن أقصر المسارات من المصدر إلى u و w عبر العقد المُزارة لها تكاليف و على التوالي. هذا يعني أن تكلفة الانتقال من المصدر إلى u عبر w تساوي على الأقل + الحد الأدنى لتكلفة الانتقال من w إلى u . بما أن تكاليف الحواف موجبة، فإن الحد الأدنى لتكلفة الانتقال من w إلى u هو عدد موجب. مع ذلك، فإن يساوي على الأكثر ، لأنه لولا ذلك لكانت قائمة الانتظار ذات الأولوية قد اختارت w بدلاً من u. وهذا تناقض، لأنه سبق إثبات أن + عدد موجب < .
dist[u]dist[w]dist[w]dist[u]dist[w]dist[w]dist[u] - في الحالة الأخيرة، لنفترض أن w هي العقدة قبل الأخيرة على أقصر مسار. هذا يعني أن . وهذا تناقض، لأنه بحلول الوقت الذي تتم فيه زيارة w ، يجب أن تكون قيمتها قد بلغت على الأكثر .
dist[w] + Graph.Edges[w,u] < dist[u]dist[u]dist[w] + Graph.Edges[w,u]
بالنسبة لجميع العقد الأخرى التي تمت زيارتها v ، من المعروف بالفعل أنها أقصر مسافة من المصدر ، بسبب الفرضية الاستقرائية، وهذه القيم لم تتغير.dist[v]
بعد معالجة u ، يظل صحيحًا أنه لكل عقدة w غير مُزارة ، فإن أقصر مسافة من المصدر إلى w باستخدام العقد التي تمت زيارتها فقط هي . أي مسار أقصر لم يستخدم u ، كان سيتم العثور عليه بالفعل، وإذا استخدم مسار أقصر u، فسيتم تحديثه عند معالجة u .dist[w]
بعد زيارة جميع العقد، يتكون أقصر مسار من المصدر إلى أي عقدة v من العقد التي تمت زيارتها فقط. لذلك، فإن يمثل أقصر مسافة.dist[v]
مدة التشغيل
يمكن التعبير عن حدود وقت تشغيل خوارزمية ديكسترا على رسم بياني ذي حواف E ورؤوس V كدالة لعدد الحواف، ويرمز لها بـوعدد الرؤوس، المشار إليه بـباستخدام ترميز Big-O . يعتمد حد التعقيد بشكل أساسي على بنية البيانات المستخدمة لتمثيل المجموعة Q. في ما يلي، يمكن تبسيط الحدود العليا لأنيكونبالنسبة لأي رسم بياني بسيط، لكن هذا التبسيط يتجاهل حقيقة أنه في بعض المسائل، توجد حدود عليا أخرى علىقد يكون ذلك صحيحاً.
بالنسبة لأي بنية بيانات لمجموعة الرؤوس Q ، يكون وقت التشغيل هو: [ 2 ]
أينوتمثل هذه التعقيدات عمليات تقليل المفتاح واستخراج الحد الأدنى في Q ، على التوالي.
تُخزّن أبسط نسخة من خوارزمية ديكسترا مجموعة الرؤوس Q كقائمة مرتبطة أو مصفوفة، والحواف كقائمة مجاورة أو مصفوفة . في هذه الحالة، يكون استخراج الحد الأدنى مجرد بحث خطي عبر جميع الرؤوس في Q ، لذا فإن وقت التشغيل هو.
بالنسبة للرسوم البيانية المتفرقة ، أي الرسوم البيانية التي تحتوي على عدد أقل بكثير منيمكن تحسين كفاءة خوارزمية ديكسترا بتخزين الرسم البياني على شكل قوائم تجاور، واستخدام شجرة بحث ثنائية متوازنة ذاتيًا ، أو كومة ثنائية ، أو كومة اقتران ، أو كومة فيبوناتشي ، أو كومة أولوية كطابور أولوية لاستخراج الحد الأدنى بكفاءة. ولتنفيذ خطوات تقليل المفتاح بكفاءة في كومة ثنائية، من الضروري استخدام بنية بيانات مساعدة تربط كل رأس بموقعه في الكومة، وتحديث هذه البنية مع تغير طابور الأولوية Q. أما مع شجرة بحث ثنائية متوازنة ذاتيًا أو كومة ثنائية، فإن الخوارزمية تتطلبالوقت في أسوأ الحالات؛ بالنسبة للرسوم البيانية المتصلة، يمكن تبسيط هذا الحد الزمني إلى. تعمل كومة فيبوناتشي على تحسين ذلك إلى.
عند استخدام أكوام ثنائية، يكون متوسط تعقيد الوقت أقل من أسوأ الحالات: بافتراض أن تكاليف الحواف تُسحب بشكل مستقل من توزيع احتمالي مشترك ، فإن العدد المتوقع لعمليات إنقاص المفتاح يكون محدودًا بـ، مما يعطي وقت تشغيل إجمالي قدره [ 7 ] : 199-200
التحسينات العملية والرسوم البيانية اللانهائية
في العروض الشائعة لخوارزمية ديكسترا، تُضاف جميع العقد مبدئيًا إلى قائمة الانتظار ذات الأولوية. مع ذلك، ليس هذا ضروريًا: إذ يمكن للخوارزمية أن تبدأ بقائمة انتظار تحتوي على عنصر واحد فقط، وتُضيف عناصر جديدة عند اكتشافها (بدلًا من إنقاص المفتاح، يتم التحقق مما إذا كان المفتاح موجودًا في قائمة الانتظار؛ إذا كان موجودًا، يتم إنقاص قيمته، وإلا يتم إضافته). [ 7 ] : 198 يُظهر هذا المتغير نفس حدود أسوأ الحالات للمتغير الشائع، ولكنه يحافظ عمليًا على قائمة انتظار أصغر، مما يُسرّع عمليات قائمة الانتظار. [ 12 ]
علاوة على ذلك، فإن عدم إدراج جميع العقد في الرسم البياني يُتيح إمكانية توسيع الخوارزمية لإيجاد أقصر مسار من مصدر واحد إلى أقرب عقدة من مجموعة عقد مستهدفة على رسوم بيانية لانهائية أو تلك التي يصعب تمثيلها في الذاكرة. تُسمى الخوارزمية الناتجة " بحث التكلفة الموحدة " (UCS) في أدبيات الذكاء الاصطناعي [ 12 ] [ 23 ] [ 24 ] ، ويمكن التعبير عنها بلغة شبه رمزية كما يلي:
الإجراء uniform_cost_search(start) هو العقدة ← البداية الحدود ← قائمة انتظار ذات أولوية تحتوي على عقدة فقط مجموعة موسعة ← مجموعة فارغة إذا كانت الحدود فارغة، فقم بإرجاع خطأ . node ← frontier.pop() إذا كانت العقدة تمثل حالة الهدف، فقم بإرجاع الحل (العقدة). expanded.add(node) لكل جار من جيران العقدة n، إذا لم تكن n في المجموعة الموسعة وليست في المجموعة الحدودية، فأضفها إلى المجموعة الحدودية. وإلا ، إذا كانت n في المجموعة الحدودية ذات التكلفة الأعلى، فقم بما يلي: استبدل العقدة الحالية بالعقدة n
يمكن التعبير عن تعقيدها بطريقة بديلة للرسوم البيانية الكبيرة جدًا: عندما يكون C * هو طول أقصر مسار من عقدة البداية إلى أي عقدة تحقق شرط "الهدف"، ويكون لكل حافة تكلفة لا تقل عن ε ، ويكون عدد الجيران لكل عقدة محدودًا بـ b ، فإن تعقيد الوقت والمساحة في أسوأ الحالات للخوارزمية يكون كل منهما في O ( b 1 + ⌊C * ⁄ε⌋ ) . [ 23 ]
تشمل التحسينات الإضافية لحالة الهدف الواحد المتغيرات ثنائية الاتجاه ، والمتغيرات الموجهة نحو الهدف مثل خوارزمية A* (انظر § المشكلات والخوارزميات ذات الصلة )، وتقليم الرسم البياني لتحديد العقد التي يُحتمل أن تُشكّل الجزء الأوسط من أقصر المسارات (التوجيه القائم على الوصول)، والتفكيكات الهرمية للرسم البياني المُدخل التي تُقلّل توجيه s – t إلى ربط s و t بعقد العبور الخاصة بهما، متبوعًا بحساب أقصر مسار بين عقد العبور هذه باستخدام "طريق سريع". [ 25 ] قد تكون هناك حاجة إلى مجموعات من هذه التقنيات لتحقيق الأداء الأمثل عمليًا في مشكلات مُحددة. [ 26 ]
خوارزمية ديكسترا ثنائية الاتجاه
خوارزمية دايجسترا ثنائية الاتجاه هي نسخة معدلة من خوارزمية دايجسترا، مصممة لحساب أقصر مسار بكفاءة بين رأس مصدر معين s ورأس هدف t ، بدلاً من حسابه بين جميع الرؤوس. الفكرة الأساسية هي إجراء بحثين متزامنين: أحدهما للأمام من s على الرسم البياني الأصلي، والآخر للخلف من t على الرسم البياني بعد عكس اتجاه الحواف. يحتفظ كل بحث بتقديراته الأولية للمسافة، وقائمة أولوياته، ومجموعة رؤوسه "المستقرة". يتقدم البحثان باتجاه بعضهما البعض ويلتقيان في مكان ما على طول أقصر مسار s–t . [ 27 ]
يتم الاحتفاظ بمصفوفتين للمسافة: df[v] (المسافة من s إلى v) و db[v] ( المسافة من v إلى t ) ، وتُهيأ قيمهما إلى ∞ باستثناء df [ s ] = 0 و db [ t ] = 0. يحتوي طابوران ذوا أولوية Qf و Qb على الرؤوس التي لم تُعالَج بالكامل بعد، بينما تخزن مجموعتان Sf و Sb الرؤوس التي حُدِّدت مسافة أقصر مسار لها في كل اتجاه. يخزن المتغير μ طول أفضل مسار كامل s – t تم العثور عليه حتى الآن، وقيمته الابتدائية ∞ .
تقوم الخوارزمية بشكل متكرر باستخراج الرأس ذي المسافة الدنيا من أي طابور يحتوي حاليًا على المفتاح الأصغر، وتخفف حوافها الصادرة (أو الواردة)، وتحدث قيمة μ كلما اكتشفت اتصالًا بين المجموعتين المستقرتين:
وبشكل متناظر بالنسبة للبحث العكسي.
تتمثل إحدى السمات الرئيسية في شرط التوقف: بمجرد أن يصبح مجموع الحد الأدنى للأولويات الحالية في كلا الطابورين على الأقل μ ، لا يمكن لأي مسار لم يتم تحديده بعد أن يتجاوز μ . عند هذه النقطة، تساوي μ المسافة الحقيقية لأقصر مسار δ( s , t ) ، وينتهي البحث. [ 27 ]
يتجنب هذا المعيار خطأً شائعاً يتمثل في التوقف بمجرد أن تتلامس الحدود، مما قد يؤدي إلى تجاهل وجود معبر بديل أقصر في مكان آخر.
نظرًا لأن كل عملية بحث لا تحتاج إلا لاستكشاف نصف مساحة البحث تقريبًا في الرسوم البيانية النموذجية، فإن الطريقة ثنائية الاتجاه غالبًا ما تزور عددًا أقل بكثير من الرؤوس وتُقلل عدد الحواف بشكل كبير مقارنةً بطريقة ديكسترا أحادية الاتجاه في استعلامات الأزواج المفردة. في الرسوم البيانية الشبيهة بشبكات الطرق، يمكن أن يكون التوفير هائلاً، حيث يُقلل أحيانًا المنطقة المستكشفة من كرة ضخمة إلى نصفَي كرة أصغر.
تُستخدم هذه الطريقة على نطاق واسع في توجيه المسارات من نقطة إلى نقطة للخرائط وبرامج الملاحة، وتُشكل أساسًا للعديد من تقنيات تسريع الأداء مثل ALT، والتسلسل الهرمي للتقليص، والتوجيه القائم على الوصول. [ 28 ]
إذا كان المطلوب هو أقصر مسار فعلي (وليس مجرد المسافة)، فيمكن تخزين مؤشرات المسار السابق في كلا البحثين. عندما يتم تحديث μ عبر نقطة تقاطع x ، تسجل الخوارزمية نقطة الالتقاء هذه وتعيد بناء المسار النهائي كمسار أمامي من s إلى x مضافًا إليه المسار الخلفي من x إلى t .
تُظهر الأبحاث النظرية أن النهج ثنائي الاتجاه الأمثل يمكن أن يكون الأمثل على مستوى الحالة، مما يعني أنه لا توجد خوارزمية صحيحة يمكنها تقليل عدد الحواف بشكل مقارب على نفس حالة الرسم البياني. [ 29 ]
اعتبارات الأداء العملي
على الرغم من أن خوارزمية ديكسترا مثالية للرسوم البيانية ذات أوزان الحواف غير السالبة، إلا أن وقت تشغيلها العملي يعتمد على كلٍ من هياكل البيانات وخصائص الرسم البياني. استخدام كومة ثنائية ينتج عنه وقت تشغيل من رتبة O((V+E)logV). توفر بدائل مثل أكوام فيبوناتشي حدودًا نظرية أفضل، لكنها غالبًا ما يكون أداؤها أسوأ في التطبيقات العملية بسبب عوامل ثابتة كبيرة. [ 30 ]
يلعب هيكل الرسم البياني دورًا رئيسيًا أيضًا. فالشبكات المتفرقة، مثل خرائط الطرق، تسمح لخوارزمية ديكسترا بالعمل بكفاءة نظرًا لأن معظم رؤوسها ذات درجة منخفضة. أما الرسوم البيانية الكثيفة فتزيد من عمليات الاسترخاء وتبطئ العملية. ولهذا السبب، غالبًا ما تستخدم أنظمة التوجيه الحديثة خوارزمية ديكسترا جنبًا إلى جنب مع أساليب المعالجة المسبقة مثل بحث A*، أو الاستدلالات القائمة على المعالم، أو التسلسلات الهرمية الانكماشية، مما يقلل بشكل كبير من مساحة البحث. [ 31 ]
يُعدّ موضع الذاكرة عاملاً مهماً آخر. يمكن لقوائم الانتظار ذات الأولوية المُحسّنة لذاكرة التخزين المؤقت وتخطيطات التجاور أن تُقلّل زمن الاستجابة للرسوم البيانية الكبيرة التي تتجاوز حدود ذاكرة التخزين المؤقت لوحدة المعالجة المركزية. [ 32 ]
وبسبب هذه الاعتبارات، تستخدم معظم الأنظمة الواقعية متغيرات ديكسترا المتخصصة والمضبوطة لعائلات رسوم بيانية محددة وقيود الأجهزة.
الأمثلية للمقارنة - الفرز حسب المسافة
إلى جانب حساب المسافات والمسارات، يمكن استخدام خوارزمية ديكسترا لفرز الرؤوس حسب بُعدها عن رأس بداية مُحدد. في عام 2023، أثبت كلٌ من هاوبلر، وروزهون، وتيتيك، وهلاديك، وتارجان (أحد مُخترعي كومة 1984) أنه بالنسبة لمسألة الفرز هذه على رسم بياني مُوجه ذي أوزان موجبة، فإن نسخة من خوارزمية ديكسترا ذات بنية بيانات كومة خاصة، يكون وقت تشغيلها وعدد مقارناتها ضمن عامل ثابت من الأمثل بين الخوارزميات القائمة على المقارنة لنفس مسألة الفرز على نفس الرسم البياني ورأس البداية، ولكن بأوزان حواف مُتغيرة. ولتحقيق ذلك، استخدموا كومة قائمة على المقارنة، حيث تكون تكلفة إرجاع/إزالة العنصر الأدنى من الكومة لوغاريتمية بالنسبة لعدد العناصر المُضافة بعده، وليس بالنسبة لعدد العناصر في الكومة. [ 33 ] [ 34 ]
أنواع متخصصة
عندما تكون أوزان الأقواس أعدادًا صحيحة صغيرة (محدودة بمعامل)يمكن استخدام طوابير متخصصة لزيادة السرعة. أول خوارزمية من هذا النوع هي خوارزمية ديال [ 35 ] للرسوم البيانية ذات أوزان الحواف الصحيحة الموجبة، والتي تستخدم طابورًا ذا دلو للحصول على وقت التشغيليؤدي استخدام شجرة فان إمده بواس كقائمة انتظار ذات أولوية إلى زيادة التعقيد[ 36 ] ثمة صيغة أخرى مثيرة للاهتمام تعتمد على مزيج من كومة جذرية جديدة وكومة فيبوناتشي المعروفة، وتعمل في الزمن[ 36 ] وأخيرًا ، تعمل أفضل الخوارزميات في هذه الحالة الخاصة في[ 37 ] الوقت والوقت. [ 38 ]
المشكلات والخوارزميات ذات الصلة
يمكن توسيع خوارزمية ديكسترا الأصلية بإجراء تعديلات عليها. على سبيل المثال، قد يكون من المرغوب فيه أحيانًا عرض حلول أقل من الحل الأمثل رياضيًا. وللحصول على قائمة مرتبة بالحلول الأقل من الأمثل، يُحسب الحل الأمثل أولًا. ثم يُحذف ضلع واحد من أضلاع الحل الأمثل من الرسم البياني، ويُحسب الحل الأمثل لهذا الرسم البياني الجديد. بعد ذلك، يُحذف كل ضلع من أضلاع الحل الأصلي بالتتابع، ويُحسب أقصر مسار جديد. ثم تُرتب الحلول الثانوية وتُعرض بعد الحل الأمثل الأول.
تُعد خوارزمية ديكسترا عادةً المبدأ الأساسي وراء بروتوكولات توجيه حالة الارتباط . ويُعتبر بروتوكولا OSPF و IS-IS الأكثر شيوعًا.
على عكس خوارزمية ديكسترا، يمكن استخدام خوارزمية بيلمان-فورد على الرسوم البيانية ذات أوزان الحواف السالبة، طالما لا يحتوي الرسم البياني على أي دورة سالبة يمكن الوصول إليها من رأس المصدر s . وجود مثل هذه الدورات يعني أنه لا يمكن إيجاد أقصر مسار، لأن قيمة الوسم تصبح أقل في كل مرة يتم فيها اجتياز الدورة. (يفترض هذا البيان أن "المسار" مسموح له بتكرار الرؤوس. في نظرية الرسوم البيانية، هذا غير مسموح به عادةً. في علوم الحاسوب النظرية، يُسمح به غالبًا). من الممكن تكييف خوارزمية ديكسترا للتعامل مع الأوزان السالبة من خلال دمجها مع خوارزمية بيلمان-فورد (لإزالة الحواف السالبة واكتشاف الدورات السالبة): خوارزمية جونسون .
خوارزمية A* هي تعميم لخوارزمية Dijkstra التي تقلل من حجم الرسم البياني الفرعي الذي يجب استكشافه، إذا كانت هناك معلومات إضافية متاحة توفر حدًا أدنى للمسافة إلى الهدف.
تتشابه العملية التي يقوم عليها خوارزمية ديكسترا مع العملية الجشعة المستخدمة في خوارزمية بريم . يهدف بريم إلى إيجاد شجرة ممتدة دنيا تربط جميع العقد في الرسم البياني، بينما يهتم ديكسترا بعقدتين فقط. لا يُقيّم بريم الوزن الإجمالي للمسار من عقدة البداية، بل يُقيّم الحواف الفردية فقط.
يمكن اعتبار البحث بالعرض أولاً حالة خاصة من خوارزمية ديكسترا على الرسوم البيانية غير الموزونة، حيث يتحول طابور الأولوية إلى طابور FIFO .
يمكن اعتبار طريقة المسير السريع بمثابة نسخة مستمرة من خوارزمية ديكسترا التي تحسب المسافة الجيوديسية على شبكة مثلثية.
منظور البرمجة الديناميكية
من منظور البرمجة الديناميكية ، تُعد خوارزمية ديكسترا مخطط تقريب متتابع يحل معادلة البرمجة الديناميكية الوظيفية لمسألة أقصر مسار باستخدام طريقة الوصول . [ 39 ] [ 40 ] [ 41 ]
في الواقع، شرح ديكسترا للمنطق الكامن وراء الخوارزمية: [ 42 ]
المسألة الثانية: أوجد المسار الأقصر طولاً بين عقدتين معطيتين P و Q. نستخدم حقيقة أنه إذا كانت R عقدة على المسار الأقصر من P إلى Q ، فإن معرفة هذه العقدة تستلزم معرفة المسار الأقصر من P إلى R.
انظر أيضاً
ملحوظات
- ↑ مثير للجدل، انظر موشيه سنيدوفيتش (2006). "إعادة النظر في خوارزمية ديكسترا: صلة البرمجة الديناميكية" . التحكم وعلم التحكم الآلي . 35 : 599-620 .والجزء السفلي .
- 1 2 كورمن وآخرون 2001 .
- 1 2 فريدمان وتارجان 1987 .
- ↑ ريتشاردز، هاميلتون. "إدسكار ويبي ديكسترا" . جائزة تورينج . رابطة آلات الحوسبة . تاريخ الاسترجاع: 16 أكتوبر 2017.
في المركز الرياضي، كان بناء حاسوب أرماك مشروعًا رئيسيًا. ولحفل افتتاحه الرسمي عام 1956، ابتكر ديكسترا برنامجًا لحل مشكلة تهم الجمهور غير المتخصص: بالنظر إلى شبكة طرق تربط المدن، ما هو أقصر طريق بين مدينتين محددتين؟
- 1 2 3 فرانا، فيل (أغسطس 2010). "مقابلة مع إدسكار دبليو. ديكسترا". اتصالات رابطة آلات الحوسبة . 53 (8): 41-47 . doi : 10.1145/1787234.1787249 . S2CID 27009702 .
- ^ ديكسترا ، إي دبليو (1959). "ملاحظة حول مشكلتين فيما يتعلق بالرسوم البيانية" (PDF) . الرياضيات الرقمية . 1 : 269 – 271. سيتيسيركس 10.1.1.165.7577 . دوى : 10.1007/BF01386390 . S2CID 123284777 .
- 1 2 3 4 5 ميلهورن، كورت ؛ ساندرز، بيتر (2008). "الفصل 10. أقصر المسارات" (ملف PDF) . الخوارزميات وهياكل البيانات: مجموعة الأدوات الأساسية . سبرينغر. doi : 10.1007/978-3-540-77978-0 . ISBN 978-3-540-77977-3.
- ↑ شريجفر، ألكسندر (2012). "حول تاريخ مسألة أقصر مسار" (ملف PDF) . قصص التحسين . سلسلة دوكيومنتا ماثيماتيكا. المجلد 6. الصفحات 155-167 . doi : 10.4171/dms/6/19 . ISBN 978-3-936609-58-5.
- ↑ ليزوريك وآخرون 1957 .
- ^ شتشيزنياك، إيرينيوس؛ ياجسزكزيك، أندريه؛ Woźna-Szcześniak، Bożena (2019). "Dijkstra العامة للشبكات الضوئية". مجلة الاتصالات البصرية والشبكات . 11 (11): 568-577 . أرخايف : 1810.04481 . دوى : 10.1364/JOCN.11.000568 . S2CID 52958911 .
- ^ شتشيزنياك، إيرينيوس؛ Woźna-Szcześniak, Bożena (2023)، “Generic Dijkstra: Correctness and Tractability”، NOMS 2023-2023 IEEE/IFIP Network Operations and Management Symposium ، الصفحات من 1 إلى 7، أرخايف : 2204.13547 ، دوى : 10.1109/NOMS56928.2023.10154322 ، ISBN 978-1-6654-7716-1، S2CID 248427020
- 1 2 3 فيلنر، أرييل (2011). ورقة موقف: خوارزمية ديكسترا مقابل البحث ذي التكلفة الموحدة أو حالة ضد خوارزمية ديكسترا . وقائع الندوة الدولية الرابعة حول البحث التوافقي. مؤرشفة من الأصل في 18 فبراير 2020. تم الاسترجاع في 12 فبراير 2015 .في مسألة إيجاد المسار، وجد فيلنر أن الطابور يمكن أن يكون أصغر بعامل 500-600، مما يستغرق حوالي 40% من وقت التشغيل.
- ↑ "ARMAC" . أبطال مجهولون في تاريخ الحوسبة الهولندية . 2007. مؤرشف من الأصل في 13 نوفمبر 2013.
- ↑ ديجكسترا، إدسكار دبليو، تأملات حول "ملاحظة حول مشكلتين تتعلقان بالرسوم البيانية (PDF)"
- ↑ تارجان، روبرت إندري (1983)، هياكل البيانات وخوارزميات الشبكة ، سلسلة مؤتمرات CBMS_NSF الإقليمية في الرياضيات التطبيقية، المجلد 44، جمعية الرياضيات الصناعية والتطبيقية، ص 75،
تم اكتشاف خوارزمية الشجرة الممتدة الدنيا الكلاسيكية الثالثة بواسطة جارنيك وأعيد اكتشافها بواسطة بريم وديكسترا؛ وهي معروفة باسم خوارزمية بريم.
- ↑ بريم، آر سي (1957). "شبكات أقصر اتصال وبعض التعميمات" (ملف PDF) . مجلة بيل سيستم التقنية . 36 (6): 1389-1401 . رمز Bibcode : 1957BSTJ...36.1389P . doi : 10.1002/j.1538-7305.1957.tb01515.x . مؤرشف من الأصل (ملف PDF) في 18 يوليو 2017. تم الاطلاع عليه في 18 يوليو 2017 .
- ↑ V. Jarník: O jistém problému minimálním [حول مشكلة بسيطة معينة]، Práce Moravské Přírodovědecké Společnosti، 6، 1930، ص 57-63. (باللغة التشيكية)
- ↑ غاس، شاول؛ فو، مايكل (2013). "خوارزمية ديكسترا". في غاس، شاول الأول؛ فو، مايكل سي (محرران). موسوعة بحوث العمليات وعلوم الإدارة . المجلد 1. سبرينغر. doi : 10.1007/978-1-4419-1153-7 . ISBN 978-1-4419-1137-7– عبر رابط Springer.
- ↑ فريدمان وتارجان 1984 .
- لاحظ أن الشرط p < dist[ u ] لا يمكن أن يتحقق أبدًا بسبب تحديث dist[ v ] ← alt عند تحديث قائمة الانتظار. راجع https://cs.stackexchange.com/questions/118388/dijkstra-without-decrease-key للمزيد من التفاصيل.
- ↑ تشين، م.؛ تشودري، ر.أ.؛ راماتشاندران، ف.؛ روش، د.ل.؛ تونغ، ل. (2007). قوائم الانتظار ذات الأولوية وخوارزمية ديكسترا - التقرير الفني رقم TR-07-54 الصادر عن قسم علوم الحاسوب بجامعة تكساس في أوستن - 12 أكتوبر 2007 (ملف PDF) . أوستن، تكساس: جامعة تكساس في أوستن، قسم علوم الحاسوب.
- ↑ كورمن، توماس هـ .؛ ليسرسون، تشارلز إي .؛ ريفست، رونالد ل .؛ شتاين، كليفورد (2022) [1990]. "22". مقدمة في الخوارزميات ( الطبعة الرابعة). مطبعة معهد ماساتشوستس للتكنولوجيا وماكجرو هيل. الصفحات 622-623 . ISBN 0-262-04630-X.
- 1 2 راسل، ستيوارت ؛ نورفيج، بيتر (2009) [1995]. الذكاء الاصطناعي: منهج حديث ( الطبعة الثالثة). برنتيس هول. ص 75، 81. ISBN 978-0-13-604259-4.
- ↑ أحيانًا يُستخدم أيضًا البحث الأقل تكلفة أولًا : ناو، دانا س. (1983). "أنظمة الحاسوب الخبيرة" (ملف PDF) . مجلة الحاسوب . 16 (2). معهد مهندسي الكهرباء والإلكترونيات: 63-85 . doi : 10.1109/mc.1983.1654302 . S2CID 7301753 .
- ↑ فاغنر، دوروثيا؛ ويلهايم، توماس (2007). تقنيات تسريع حسابات أقصر مسار . STACS. ص 23-36 .
- ^ باور، رينهارد. دلنج، دانيال؛ ساندرز، بيتر؛ شيفرديكر، دينيس؛ شولتس، دومينيك؛ فاغنر ، دوروثيا (2010). "الجمع بين تقنيات التسريع الهرمية والموجهة نحو الهدف لخوارزمية Dijkstra" . مجلة ACM للخوارزميات التجريبية . 15 : 2.1. دوى : 10.1145/1671970.1671976 . S2CID 1661292 .
- 1 2 توماس، مارك (30 مايو 2020). "خوارزمية ديكسترا ثنائية الاتجاه" . مدونة الرياضيات بجامعة لندن . تم الاطلاع عليه في 3 أكتوبر 2025 .
- ↑ غولدبيرغ، أندرو ف.؛ هاريلسون، كريس (2005). حساب أقصر مسار: بحث A* يلتقي بنظرية الرسم البياني . وقائع الندوة السنوية السادسة عشرة لجمعية ACM-SIAM حول الخوارزميات المنفصلة (SODA).
- ^ هيوبلر، بيرنهارد. هلاديك، ريتشارد؛ روزون، فاتسلاف؛ تارجان، روبرت إي . تيتيك ، جاكوب (2025). “خوارزمية Dijkstra ثنائية الاتجاه هي الأمثل للمثال”. في بيرسيا، إيوانا أوريانا؛ باغ، راسموس (محرران). ندوة 2025 حول البساطة في الخوارزميات، SOSA 2025، نيو أورليانز، لوس أنجلوس، الولايات المتحدة الأمريكية، 13-15 يناير 2025 . جمعية الرياضيات الصناعية والتطبيقية. ص 202 – 215. أرخايف : 2410.14638 . دوى : 10.1137/1.9781611978315.16 .
- ^ كورمين، توماس هـ . ليسرسون، تشارلز إي . ريفست، رونالد ل . شتاين، كليفورد (2009). مقدمة للخوارزميات ( الطبعة الثالثة). مطبعة معهد ماساتشوستس للتكنولوجيا. ص 658 – 663.
- ↑ جيسبرجر، روبرت؛ ساندرز، بيتر؛ شولتس، دومينيك؛ ديلينج، دانيال (2008). التسلسلات الهرمية الانقباضية: توجيه هرمي أسرع وأبسط في شبكات الطرق . الخوارزميات التجريبية (WEA 2008). سلسلة محاضرات في علوم الحاسوب. المجلد 5038. سبرينغر. الصفحات 319-333 . doi : 10.1007/978-3-540-68552-4_24 . ISBN 978-3-540-68548-7.
- ^ ساندرز، بيتر. شولتس، دومينيك (2005). تعمل التسلسلات الهرمية للطرق السريعة على تسريع استعلامات المسار الأقصر . الخوارزميات – ESA 2005. ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 3669. سبرينغر. ص 568 – 579. دوى : 10.1007 / 11561071_51 . رقم ISBN 978-3-540-29118-3.
- ^ هيوبلر، بيرنهارد. هلاديك، ريتشارد؛ روزهون، فاتسلاف؛ تارجان، روبرت؛ تيتيك ، جاكوب (28 أكتوبر 2024). “الأمثلية العالمية لـ Dijkstra عبر أكوام ما بعد أسوأ الحالات”. أرخايف : 2311.11793 [ cs.DS ].
- ↑ بروبيكر، بن (25 أكتوبر 2024). "علماء الحاسوب يحددون أفضل طريقة لاجتياز الرسم البياني" . مجلة كوانتا . تم الاطلاع عليه في 9 ديسمبر 2024 .
- ↑ اتصل بالرقم 1969 .
- 1 2 أهوجا وآخرون 1990 .
- ↑ ثورب 2000 .
- ↑ رامان 1997 .
- ↑ سنيدوفيتش، م. (2006). "إعادة النظر في خوارزمية ديكسترا: صلة البرمجة الديناميكية" (ملف PDF) . مجلة التحكم وعلم التحكم الآلي . 35 (3): 599-620 .نسخة إلكترونية من الورقة البحثية مع وحدات حسابية تفاعلية.
- ↑ ديناردو، إي. في. (2003). البرمجة الديناميكية: النماذج والتطبيقات . مينولا، نيويورك: منشورات دوفر . ISBN 978-0-486-42810-9.
- ↑ سنيدوفيتش، م. (2010). البرمجة الديناميكية: الأسس والمبادئ . فرانسيس وتايلور . ISBN 978-0-8247-4099-3.
- ↑ Dijkstra 1959 ، ص 270.
مراجع
- كورمين، توماس هـ . ليسرسون، تشارلز إي . ريفست، رونالد ل . شتاين، كليفورد (2001). “القسم 24.3: خوارزمية ديكسترا”. مقدمة للخوارزميات ( الطبعة الثانية). مطبعة معهد ماساتشوستس للتكنولوجيا وماكجرو هيل . ص 595 – 601. ISBN 0-262-03293-7.
- ديال، روبرت ب. (1969). "الخوارزمية 360: غابة أقصر مسار مع ترتيب طوبولوجي [ H ] " . اتصالات ACM . 12 (11): 632-633 . doi : 10.1145/363269.363610 . S2CID 6754003 .
- فريدمان، مايكل لورانس ؛ تارجان، روبرت إي. (1984). أكوام فيبوناتشي واستخداماتها في خوارزميات تحسين الشبكات المحسّنة . المؤتمر السنوي الخامس والعشرون لأسس علوم الحاسوب. معهد مهندسي الكهرباء والإلكترونيات . الصفحات 338-346 . doi : 10.1109/SFCS.1984.715934 .
- فريدمان، مايكل لورانس ؛ تارجان، روبرت إي. (1987). "أكوام فيبوناتشي واستخداماتها في خوارزميات تحسين الشبكات المحسّنة" . مجلة رابطة آلات الحوسبة . 34 (3): 596-615 . doi : 10.1145/28869.28874 . S2CID 7904683 .
- زان، ف. بنجامين؛ نون، تشارلز إي. (فبراير 1998). "خوارزميات أقصر مسار: تقييم باستخدام شبكات طرق حقيقية". علوم النقل . 32 (1): 65-73 . doi : 10.1287/trsc.32.1.65 . S2CID 14986297 .
- ليزوريك، م.؛ غراي، ر.س.؛ جونسون، أ.أ.؛ لادو، و.س.؛ ميكر الابن، س.ر.؛ بيتري، ر.م.؛ سيتز، ر.ن. (1957). دراسة تقنيات النمذجة - التقرير السنوي الأول - 6 يونيو 1956 - 1 يوليو 1957 - دراسة لتقنيات النمذجة لأنظمة الاتصالات . كليفلاند، أوهايو: معهد كيس للتكنولوجيا.
- كنوت، دي إي (1977). "تعميم لخوارزمية ديكسترا". رسائل معالجة المعلومات . 6 (1): 1-5 . doi : 10.1016/0020-0190(77)90002-3 .
- أهوجا، رافيندرا ك.؛ ميلهورن، كورت؛ أورلين، جيمس ب.؛ تارجان، روبرت إي. (أبريل 1990). "خوارزميات أسرع لمسألة أقصر مسار" (ملف PDF) . مجلة ACM . 37 (2): 213-223 . doi : 10.1145/77600.77615 . hdl : 1721.1/47994 . S2CID 5499589 .
- رامان، راجيف (1997). "نتائج حديثة حول مشكلة أقصر المسارات من مصدر واحد" . أخبار SIGACT . 28 (2): 81-87 . doi : 10.1145/261342.261352 . S2CID 18031586 .
- ثوروب ميكيل (2000). “في قوائم انتظار أولوية ذاكرة الوصول العشوائي”. مجلة SIAM للحوسبة . 30 (1): 86-109 . دوى : 10.1137 / S0097539795288246 . S2CID 5221089 .
- ثورب، ميكيل (1999). "أقصر المسارات غير الموجهة ذات المصدر الواحد بأوزان صحيحة موجبة في زمن خطي" . مجلة ACM . 46 (3): 362-394 . doi : 10.1145/316542.316548 . S2CID 207654795 .
روابط خارجية
- مقابلة تاريخية شفهية مع إدسكار دبليو. ديكسترا ، معهد تشارلز باباج ، جامعة مينيسوتا، مينيابوليس
- تطبيق خوارزمية ديكسترا باستخدام منهجية التطوير القائمة على الاختبار (TDD) ، بقلم روبرت سيسيل مارتن ، مدونة الكود النظيف.
- إدسكار دبليو. ديكسترا
- 1959 في مجال الحوسبة
- خوارزميات الرسوم البيانية
- خوارزميات البحث
- الخوارزميات الجشعة
- خوارزميات التوجيه
- التحسين التوافقي
- الاختراعات الهولندية
- مسافة الرسم البياني
