خوارزمية فلويد-وارشال

في علم الحاسوب ، تُعرف خوارزمية فلويد-وارشال (أو خوارزمية فلويد ، أو خوارزمية روي-وارشال ، أو خوارزمية روي-فلويد ، أو خوارزمية WFI ) بأنها خوارزمية لإيجاد أقصر المسارات في رسم بياني موجه مُثقَّل ذي أوزان حواف موجبة أو سالبة (ولكن بدون دورات سالبة). [ 1 ] [ 2 ] يُحدد تنفيذ واحد للخوارزمية أطوال (مجموع الأوزان) أقصر المسارات بين جميع أزواج الرؤوس. ورغم أنها لا تُعيد تفاصيل المسارات نفسها، إلا أنه من الممكن إعادة بناء هذه المسارات بإجراء تعديلات بسيطة على الخوارزمية. كما يُمكن استخدام نسخ من الخوارزمية لإيجاد الإغلاق المتعدي لعلاقة ما، أو (في سياق نظام شولز للتصويت ) لإيجاد أوسع المسارات بين جميع أزواج الرؤوس في رسم بياني مُثقَّل.

التاريخ والتسمية

تُعدّ خوارزمية فلويد-وارشال مثالًا على البرمجة الديناميكية ، وقد نُشرت بصيغتها المتعارف عليها حاليًا بواسطة روبرت فلويد عام 1962. [ 3 ] ومع ذلك، فهي تُشابه إلى حد كبير الخوارزميات التي نشرها سابقًا برنارد روي عام 1959 [ 4 ] وستيفن وارشال عام 1962 [ 5 ] لإيجاد الإغلاق المتعدي للرسم البياني، [ 6 ] وترتبط ارتباطًا وثيقًا بخوارزمية كلين (المنشورة عام 1956) لتحويل آلة الحالة المحدودة الحتمية إلى تعبير منتظم ، مع اختلاف استخدام شبه حلقة من نوع min-plus . [ 7 ] وقد وصف بيتر إنجرمان الصيغة الحديثة للخوارزمية على شكل ثلاث حلقات تكرار متداخلة لأول مرة، وذلك أيضًا عام 1962. [ 8 ]

الخوارزمية

تقارن خوارزمية فلويد-وارشال العديد من المسارات الممكنة عبر الرسم البياني بين كل زوج من الرؤوس. وهي تضمن إيجاد جميع أقصر المسارات، وتستطيع القيام بذلك باستخدامΘ(|V|3){\displaystyle \ثيتا (|V|^{3})}المقارنات في الرسم البياني، [ 1 ] [ 9 ] على الرغم من أنه قد يكون هناكΘ(|V|2){\displaystyle \ثيتا (|V|^{2})}الحواف في الرسم البياني. ويتم ذلك عن طريق تحسين تقدير أقصر مسار بين رأسين بشكل تدريجي، حتى يصبح التقدير مثالياً.

لنفترض وجود رسم بيانيجي{\displaystyle G}مع رؤوسV{\displaystyle V}مرقمة من 1 إلى شمال{\displaystyle N}. لننظر أيضًا في دالةsحoرتهـsتPأتح(أنا،ج،ك){\displaystyle \mathrm {shortestPath} (i,j,k)}والتي تُعيد طول أقصر مسار ممكن (إن وُجد) منأنا{\displaystyle i}لج{\displaystyle j}باستخدام الرؤوس فقط من المجموعة{1،2،...،ك}{\displaystyle \{1,2,\ldots ,k\}}كنقاط وسيطة على طول الطريق. الآن، بالنظر إلى هذه الدالة، هدفنا هو إيجاد طول أقصر مسار من كل نقطة.أنا{\displaystyle i}لكلج{\displaystyle j}باستخدام أي رأس في{1،2،...،شمال}{\displaystyle \{1,2,\ldots ,N\}}بحسب التعريف، هذه هي القيمةsحoرتهـsتPأتح(أنا،ج،شمال){\displaystyle \mathrm {shortestPath} (i,j,N)}، والتي سنجدها بشكل متكرر .

لاحظ ذلكsحoرتهـsتPأتح(أنا،ج،ك){\displaystyle \mathrm {shortestPath} (i,j,k)}يجب أن يكون أقل من أو يساويsحoرتهـsتPأتح(أنا،ج،ك-1){\displaystyle \mathrm {shortestPath} (i,j,k-1)}لدينا مرونة أكبر إذا سُمح لنا باستخدام الرأسك{\displaystyle k}. لوsحoرتهـsتPأتح(أنا،ج،ك){\displaystyle \mathrm {shortestPath} (i,j,k)}في الواقع أقل منsحoرتهـsتPأتح(أنا،ج،ك-1){\displaystyle \mathrm {shortestPath} (i,j,k-1)}إذن، لا بد من وجود طريق منأنا{\displaystyle i}لج{\displaystyle j}باستخدام الرؤوس{1،2،...،ك}{\displaystyle \{1,2,\ldots ,k\}}وهذا أقصر من أي مسار مماثل لا يستخدم الرأسك{\displaystyle k}بما أنه لا توجد دورات سلبية، يمكن تحليل هذا المسار على النحو التالي:

(1) مسار منأنا{\displaystyle i}لك{\displaystyle k}التي تستخدم الرؤوس{1،2،...،ك-1}{\displaystyle \{1,2,\ldots ,k-1\}}، متبوعًا بـ
(2) مسار منك{\displaystyle k}لج{\displaystyle j}التي تستخدم الرؤوس{1،2،...،ك-1}{\displaystyle \{1,2,\ldots ,k-1\}}.

وبالطبع، يجب أن يكون هناك أقصر مسار (أو عدة مسارات)، وإلا سنتمكن من تقليل الطول أكثر. بعبارة أخرى، وصلنا إلى الصيغة التكرارية:

sحoرتهـsتPأتح(أنا،ج،ك)={\displaystyle \mathrm {shortestPath} (i,j,k)=}
مأنان(sحoرتهـsتPأتح(أنا،ج،ك-1)،{\displaystyle \mathrm {min} {\Big (}\mathrm {shortestPath} (i,j,k-1),}
sحoرتهـsتPأتح(أنا،ك،ك-1)+sحoرتهـsتPأتح(ك،ج،ك-1)){\displaystyle \mathrm {shortestPath} (i,k,k-1)+\mathrm {shortestPath} (k,j,k-1){\Big )}}.

الحالة الأساسية معطاة بواسطة

sحoرتهـsتPأتح(أنا،ج،0)=w(أنا،ج)،{\displaystyle \mathrm {shortestPath} (i,j,0)=w(i,j),}

أينw(أنا،ج){\displaystyle w(i,j)}يشير إلى وزن الحافة منأنا{\displaystyle i}لج{\displaystyle j}إذا كان موجودًا، وإلا فإن ∞ (لا نهاية).

تُشكّل هذه الصيغ جوهر خوارزمية فلويد-وارشال. تعمل الخوارزمية عن طريق حسابsحoرتهـsتPأتح(أنا،ج،ك){\displaystyle \mathrm {shortestPath} (i,j,k)}للجميع(أنا،ج){\displaystyle (i,j)}أزواج لـك=0{\displaystyle k=0}، ثمك=1{\displaystyle k=1}، ثمك=2{\displaystyle k=2}وهكذا دواليك. تستمر هذه العملية حتىك=شمال{\displaystyle k=N}وقد وجدنا أقصر مسار للجميع(أنا،ج){\displaystyle (i,j)}يتم استخدام أي رؤوس وسيطة لإنشاء أزواج. فيما يلي الشفرة الزائفة لهذه النسخة الأساسية.

الشفرة الزائفة

ليكن dist مصفوفة من |V| × |V| لأقصر المسافات، مُهيأة إلى ∞ (ما لا نهاية). لكل حافة ( u , v )، نُعيّن وزن الحافة ( u , v ) في dist[ u ][ v ] . لكل رأس نُعيّن وزن الحافة ( v ][ v ) في dist[ v ][ v ] إلى 0. لكل k من 1 إلى |V|، لكل i من 1 إلى |V|، لكل j من 1 إلى |V|، إذا كان dist[ i ][ j ] أكبر من dist[ i ][ k ] + dist[ k ][ j ] dist[ i ][ j ] = dist[ i ][ k ] + dist[ k ][ j ] end if

ملاحظة: من الأخطاء الشائعة في تطبيق خوارزمية فلويد-وارشال ترتيب الحلقات المتداخلة الثلاثية بشكل خاطئ (الترتيب الصحيح هو KIJ). لا تُعطي الخوارزميات غير الصحيحة IJKحلولًا IKJصحيحة لبعض الحالات. مع ذلك، يمكننا إثبات أنه بتكرار هذه الحلقات ثلاث مرات، نحصل على الحلول الصحيحة. [ 10 ]

مثال

يتم تنفيذ الخوارزمية المذكورة أعلاه على الرسم البياني الموجود على اليسار أدناه:

قبل التكرار الأول للحلقة الخارجية، المشار إليه بـ k = 0 أعلاه، كانت المسارات المعروفة الوحيدة هي تلك التي تمثل الحواف المفردة في الرسم البياني. عند k = 1 ، تم العثور على مسارات تمر عبر الرأس 1: على وجه الخصوص، تم العثور على المسار [2,1,3]، ليحل محل المسار [2,3] الذي يحتوي على عدد أقل من الحواف ولكنه أطول (من حيث الوزن). عند k = 2 ، تم العثور على مسارات تمر عبر الرأسين {1,2}. يوضح المربعان الأحمر والأزرق كيفية تجميع المسار [4,2,1,3] من المسارين المعروفين [4,2] و[2,1,3] اللذين تمت مواجهتهما في التكرارات السابقة، مع وجود 2 في نقطة التقاطع. لم يتم النظر في المسار [4,2,3]، لأن [2,1,3] هو أقصر مسار تمت مواجهته حتى الآن من 2 إلى 3. عند k = 3 ، تم العثور على مسارات تمر عبر الرأسين {1,2,3}. وأخيراً، عند k = 4 ، يتم العثور على جميع أقصر المسارات.

ستكون مصفوفة المسافة في كل تكرار من k ، مع المسافات المحدثة بالخط العريض ، كما يلي:

k = 0ج
1234
أنا10-2
2403
302
4-10
k = 1ج
1234
أنا10-2
2402
302
4-10
k = 2ج
1234
أنا10-2
2402
302
43-110
k = 3ج
1234
أنا10-20
24024
302
43-110
k = 4ج
1234
أنا10-1-20
24024
35102
43-110

سلوك ذو دورات سلبية

الدورة السالبة هي دورة يكون مجموع أضلاعها قيمة سالبة. لا يوجد أقصر مسار بين أي زوج من الرؤوس.أنا{\displaystyle i}،ج{\displaystyle j}والتي تشكل جزءًا من دورة سلبية، لأن أطوال المسارات منأنا{\displaystyle i}لج{\displaystyle j}يمكن أن تكون القيمة صغيرة جدًا (سالبة). وللحصول على نتائج ذات دلالة عددية، تفترض خوارزمية فلويد-وارشال عدم وجود دورات سالبة. ومع ذلك، إذا وُجدت دورات سالبة، فيمكن استخدام خوارزمية فلويد-وارشال للكشف عنها. والفكرة الأساسية هي كالتالي:

  • تقوم خوارزمية فلويد-وارشال بمراجعة أطوال المسارات بين جميع أزواج الرؤوس بشكل متكرر.(أنا،ج){\displaystyle (i,j)}، بما في ذلك حيثأنا=ج{\displaystyle i=j};
  • في البداية، طول المسار(أنا،أنا){\displaystyle (i,i)}يساوي صفرًا؛
  • مسار[أنا،ك،...،أنا]{\displaystyle [i,k,\ldots ,i]}لا يمكن تحسين ذلك إلا إذا كان طوله أقل من الصفر، أي أنه يشير إلى دورة سالبة؛
  • وبالتالي، بعد تطبيق الخوارزمية،(أنا،أنا){\displaystyle (i,i)}ستكون القيمة سالبة إذا كان هناك مسار ذو طول سالب منأنا{\displaystyle i}العودة إلىأنا{\displaystyle i}.

لذا، للكشف عن الدورات السالبة باستخدام خوارزمية فلويد-وارشال، يمكن فحص قطر مصفوفة المسار، ويشير وجود عدد سالب إلى أن الرسم البياني يحتوي على دورة سالبة واحدة على الأقل. [ 9 ] ومع ذلك، عند وجود دورة سالبة، أثناء تنفيذ الخوارزمية، تظهر أعداد كبيرة أُسّيًا من رتبةΩ(6نwمأx){\displaystyle \Omega (6^{n}\cdot w_{max})}يمكن أن تظهر، حيثwمأx{\displaystyle w_{max}}يمثل هذا أكبر وزن مطلق للحافة في الرسم البياني. لتجنب مشاكل تجاوز الحد الأدنى للأعداد الصحيحة، ينبغي التحقق من وجود دورة سالبة داخل حلقة التكرار الداخلية للخوارزمية. [ 11 ]

إعادة بناء المسار

لا توفر خوارزمية فلويد-وارشال عادةً سوى أطوال المسارات بين جميع أزواج الرؤوس. مع تعديلات بسيطة، يُمكن إنشاء طريقة لإعادة بناء المسار الفعلي بين أي رأسين طرفيين. على الرغم من أن البعض قد يميل إلى تخزين المسار الفعلي من كل رأس إلى كل رأس آخر، إلا أن هذا غير ضروري، بل إنه مكلف للغاية من حيث الذاكرة. بدلاً من ذلك، يُمكننا استخدام شجرة أقصر مسار ، والتي يُمكن حسابها لكل عقدة فيΘ(|هـ|){\displaystyle \Theta (|E|)}الوقت المستخدمΘ(|V|){\displaystyle \Theta (|V|)}الذاكرة، وتسمح لنا بإعادة بناء مسار موجه بكفاءة بين أي رأسين متصلين.

الشفرة الزائفة

تحتوي المصفوفة prev[u][v]على الرأس قبل الأخير على المسار من uإلى v(باستثناء حالة prev[v][v]، حيث تحتوي دائمًا على vحتى لو لم تكن هناك حلقة ذاتية على v): [ 12 ]

ليكن dist a|V|×|V|{\displaystyle |V|\times |V|}مصفوفة المسافات الدنيا مهيأة إلى{\displaystyle \infty }(ما لا نهاية) ليكن prev هو a|V|×|V|{\displaystyle |V|\times |V|}مصفوفة مؤشرات الرؤوس مهيأة إلى قيمة فارغةالإجراء FloydWarshallWithPathReconstruction () هو لكل حافة (u, v) قم بما يلي: dist[u][v] = w(u, v) // وزن الحافة (u, v) prev[u][v] = u لكل رأس v، قم بما يلي: dist[v][v] = 0 prev[v][v] = v لكل k من 1 إلى |V|، نفّذ // تطبيق فلويد-وارشال القياسي لكل i من 1 إلى |V| لكل j من 1 إلى |V| إذا كان dist[i][j] > dist[i][k] + dist[k][j] ثم dist[i][j] = dist[i][k] + dist[k][j] prev[i][j] = prev[k][j]
الإجراء Path (u, v) هو إذا كان prev[u][v] = null ثم إرجاع [] المسار = [v] بينما uv افعل v = prev[u][v] path.prepend(v) مسار العودة

تعقيد الخطة

يتركن{\displaystyle n}يكون|V|{\displaystyle |V|}عدد الرؤوس. لإيجاد جميعن2{\displaystyle n^{2}}ل sحoرتهـsتPأتح(أنا،ج،ك){\displaystyle \mathrm {shortestPath} (i,j,k)}(للجميع)أنا{\displaystyle i}وج{\displaystyle j}) من تلك الخاصة بـ sحoرتهـsتPأتح(أنا،ج،ك-1){\displaystyle \mathrm {shortestPath} (i,j,k-1)}يتطلبΘ(ن2){\displaystyle \Theta (n^{2})}العمليات. بما أننا نبدأ بـ sحoرتهـsتPأتح(أنا،ج،0)=هـدزهـجosت(أنا،ج){\displaystyle \mathrm {shortestPath} (i,j,0)=\mathrm {edgeCost} (i,j)}واحسب تسلسلن{\displaystyle n}المصفوفاتsحoرتهـsتPأتح(أنا،ج،1){\displaystyle \mathrm {shortestPath} (i,j,1)}،sحoرتهـsتPأتح(أنا،ج،2){\displaystyle \mathrm {shortestPath} (i,j,2)}،...{\displaystyle \ldots }،sحoرتهـsتPأتح(أنا،ج،ن){\displaystyle \mathrm {shortestPath} (i,j,n)}، بتكلفة قدرهاΘ(ن2){\displaystyle \Theta (n^{2})}، إجمالي التعقيد الزمني للخوارزمية هونΘ(ن2)=Θ(ن3){\displaystyle n\cdot \Theta (n^{2})=\Theta (n^{3})}[ 9 ] [ 13 ]

التطبيقات والتعميمات

يمكن استخدام خوارزمية فلويد-وارشال لحل المشكلات التالية:

التطبيقات

تتوفر تطبيقات للعديد من لغات البرمجة .

مقارنة مع خوارزميات أقصر مسار الأخرى

بالنسبة للرسوم البيانية ذات أوزان الحواف غير السالبة، يمكن استخدام خوارزمية ديكسترا لإيجاد جميع أقصر المسارات من رأس واحد في وقت تشغيلΘ(|هـ|+|V|سجل|V|){\displaystyle \Theta (|E|+|V|\log |V|)}وبالتالي، فإن تشغيل خوارزمية ديكسترا بدءًا من كل رأس يستغرق وقتًاΘ(|هـ||V|+|V|2سجل|V|){\displaystyle \Theta (|E||V|+|V|^{2}\log |V|)}. منذ|هـ|=يا(|V|2){\displaystyle |E|=O(|V|^{2})}وهذا ينتج عنه أسوأ وقت تشغيل لخوارزمية ديكسترا المتكررة لـيا(|V|3){\displaystyle O(|V|^{3})}بينما يتطابق هذا مع وقت التشغيل التقريبي في أسوأ الحالات لخوارزمية فلويد-وارشال، فإن الثوابت المستخدمة لها أهمية كبيرة. عندما يكون الرسم البياني كثيفًا (أي،|هـ||V|2{\displaystyle |E|\approx |V|^{2}})، تميل خوارزمية فلويد-وارشال إلى الأداء بشكل أفضل عمليًا. عندما يكون الرسم البياني متفرقًا (أي،|هـ|{\displaystyle |E|}أصغر بكثير من|V|2{\displaystyle |V|^{2}})، يميل ديكسترا إلى الهيمنة.

بالنسبة للرسوم البيانية المتفرقة ذات الحواف السالبة ولكن بدون دورات سالبة، يمكن استخدام خوارزمية جونسون ، بنفس وقت التشغيل التقاربي لنهج ديكسترا المتكرر.

توجد أيضًا خوارزميات معروفة تستخدم ضرب المصفوفات السريع لتسريع حساب أقصر مسار بين جميع أزواج العناصر في الرسوم البيانية الكثيفة، ولكنها عادةً ما تفترض افتراضات إضافية حول أوزان الحواف (مثل اشتراط أن تكون أعدادًا صحيحة صغيرة). [ 17 ] [ 18 ] إضافةً إلى ذلك، ونظرًا لعوامل الثبات العالية في وقت تشغيلها، فإنها لا تُحسّن سرعة خوارزمية فلويد-وارشال إلا في حالة الرسوم البيانية الكبيرة جدًا.

مراجع

  1. 1 2 كورمين، توماس هـ . ليسرسون، تشارلز إي . ريفست، رونالد ل. (1990). مقدمة في الخوارزميات (  الطبعة الأولى). مطبعة معهد ماساتشوستس للتكنولوجيا وماكجرو هيل. رقم ISBN 0-262-03141-8.انظر على وجه الخصوص القسم 26.2، "خوارزمية فلويد-وارشال"، الصفحات  558-565 والقسم 26.4، "إطار عام لحل مشاكل المسار في الرسوم البيانية الموجهة"، الصفحات  570-576.
  2. كينيث هـ. روزن (2003). الرياضيات المتقطعة وتطبيقاتها، الطبعة الخامسة . أديسون ويسلي. ISBN 978-0-07-119881-3.
  3. فلويد، روبرت و. (يونيو 1962). "الخوارزمية 97: أقصر مسار" . اتصالات رابطة آلات الحوسبة . 5 (6): 345. doi : 10.1145/367766.368168 . S2CID 2003382 . 
  4. ^ روي برنارد (1959). "العبور والاتصال" . سي آر أكاد. الخيال العلمي. باريس (بالفرنسية). 249 : 216 – 218.
  5. وارشال، ستيفن (يناير 1962). "نظرية حول المصفوفات البوليانية" . مجلة ACM . 9 (1): 11-12 . doi : 10.1145/321105.321107 . S2CID 33763989 . 
  6. وايسشتاين، إريك دبليو. "خوارزمية فلويد-وارشال" . ماث وورلد .
  7. كلين، إس سي (1956). "تمثيل الأحداث في الشبكات العصبية والآلات المحدودة". في سي إي شانون وجيه مكارثي (محرران). دراسات في الآلات . مطبعة جامعة برينستون. ص 3-42 . 
  8. إنجرمان، بيتر ز. (نوفمبر 1962). "الخوارزمية 141: مصفوفة المسار" . اتصالات رابطة آلات الحوسبة . 5 (11): 556. doi : 10.1145/368996.369016 . S2CID 29010500 . 
  9. ١ ٢ ٣ هوشباوم، دوريت (٢٠١٤). "القسم ٨.٩: خوارزمية فلويد-وارشال لإيجاد أقصر المسارات بين جميع الأزواج" (ملف PDF) . ملاحظات المحاضرة لمقرر IEOR ٢٦٦: خوارزميات الرسوم البيانية وتدفقات الشبكات . قسم الهندسة الصناعية وبحوث العمليات، جامعة كاليفورنيا، بيركلي . الصفحات ٤١-٤٢ . 
  10. هايد، إيكومي (2019). "التطبيقات غير الصحيحة لخوارزمية فلويد-وارشال تعطي حلولاً صحيحة بعد ثلاث تكرارات". arXiv : 1904.01210 [ cs.DS ].
  11. ستيفان هوغاردي (أبريل 2010). "خوارزمية فلويد-وارشال على الرسوم البيانية ذات الدورات السالبة". رسائل معالجة المعلومات . 110 ( 8-9 ): 279-281 . doi : 10.1016/j.ipl.2010.02.001 .
  12. "كتاب الخوارزميات المجاني" .
  13. باراس، جون؛ ثيودوراكوبولوس، جورج (2022). مشاكل المسار في الشبكات . دار نشر سبرينغر الدولية. ISBN 9783031799839.
  14. غروس، جوناثان ل.؛ يلين، جاي (2003). دليل نظرية الرسم البياني . الرياضيات المتقطعة وتطبيقاتها. مطبعة سي آر سي. ص 65. ISBN  9780203490204..
  15. بينالوزا، رافائيل. "البنى الجبرية للإغلاق المتعدي" . ندوة "خوارزميات الرسوم البيانية" . جامعة دريسدن التقنية، قسم علوم الحاسوب، معهد علوم الحاسوب النظرية. مؤرشف من الأصل بتاريخ 22-10-2009.
  16. جيليس، دونالد (1993). جدولة المهام مع قيود الأسبقية AND/OR (أطروحة دكتوراه، الملحق ب) (PDF) (تقرير).
  17. زويك، أوري (مايو 2002). "أقصر المسارات بين جميع الأزواج باستخدام مجموعات الربط وضرب المصفوفات المستطيلة". مجلة ACM . 49 (3): 289-317 . arXiv : cs/0008011 . doi : 10.1145/567112.567114 . S2CID 1065901 . .
  18. تشان، تيموثي م. (يناير 2010). "المزيد من الخوارزميات لإيجاد أقصر المسارات بين جميع الأزواج في الرسوم البيانية الموزونة". مجلة SIAM للحوسبة . 39 (5): 2075-2089 . CiteSeerX 10.1.1.153.6864 . doi : 10.1137/08071990x . .