- احسب أقصر المسافات بين جميع أزواج العقد في الرسوم البيانية الموزونة باستخدام البرمجة الديناميكية.
- قم بتحديث مصفوفة المسافة عن طريق التكرار على العقد الوسيطة للعثور على مسارات غير مباشرة أقصر.
- يقبل هذا البرنامج الأوزان السالبة، مما يسمح بإجراء العمليات الحسابية حيث يفشل خوارزمية ديكسترا، ولكنه يكتشف الدورات السالبة ولا يحلها.
- فعال للرسوم البيانية الصغيرة أو الكثيفة؛ تعقيده O(n³) يحد من استخدامه في الرسوم البيانية الكبيرة جدًا.

تُعدّ خوارزمية فلويد-وارشال أداةً فعّالة في علوم الحاسوب والرياضيات، وهي مفيدةٌ بشكلٍ خاصّ للعاملين في مجال الرسوم البيانية ومسائل تحسين الشبكات . تُمكّن هذه الخوارزمية من إيجاد أقصر مسار بين جميع أزواج العُقد في رسم بياني مُثقّل، ما يُسهم في حلّ المسائل المعقدة بكفاءة.
في هذه المقالة سوف نستكشف بالتفصيل كيفية عمل الخوارزمية وتطبيقاتها ومميزاتها وتنفيذها خطوة بخطوة. إذا تساءلت يومًا كيف يمكن لهذه الخوارزمية مساعدتك في حل المشكلات اليومية أو المشاريع الأكثر تقدمًا، فتابع القراءة. دعونا نوضح كل ذلك حتى تتمكن من فهمه بسهولة.
ما هي خوارزمية فلويد-وارشال؟
خوارزمية فلويد-وارشال هي طريقة تُستخدم لحساب أقصر المسافات بين جميع أزواج العقد في رسم بياني مُثقَّل. وهي مفيدة بشكل خاص في المسائل التي تحتوي فيها الرسوم البيانية على أوزان سالبة ، حيث يمكنها التعامل معها بكفاءة، على عكس خوارزميات أخرى مثل خوارزمية ديكسترا ، التي لا تستطيع ذلك.
تستخدم هذه العملية تقنية البرمجة الديناميكية لتحديث مصفوفة تحتوي على أقصر المسافات بين العقد بشكل متكرر. في نهاية كل تكرار، تعرض المصفوفة أقصر المسارات بين أي زوج من الرؤوس.
كيف تعمل الخوارزمية
تعتمد الخوارزمية على مصفوفة تجاور الرسم البياني المُدخل. ثم تستخدم ثلاث حلقات متداخلة للتحقق من جميع المسارات الممكنة بين العقد، مع تحديث المسافات إذا كان المسار غير المباشر أقصر من المسار المباشر. تُنفذ هذه العملية بشكل تكراري حتى يتم تقييم جميع تركيبات المسارات.
من الأمثلة الأساسية لكيفية عمل ذلك هو النظر إلى رسم بياني ذي رؤوس مرقمة وتقييم ما إذا كانت المسافة من A إلى C عبر B أقل من المسافة المباشرة من A إلى C. من خلال القيام بذلك لكل مجموعة من الرؤوس، تكون النتيجة النهائية مصفوفة توضح أقصر المسافات بين جميع العقد.
التنفيذ في بايثون
بالنسبة لمن يرغبون في تطبيق هذه الخوارزمية في مشاريعهم، يُعدّ استخدام لغة بايثون خيارًا ممتازًا. فيما يلي شرحٌ مُفصّل للمنهج الأساسي:
import sys INF = sys.maxsize def Floyd_Warshall(graph): n = len(graph) dist = for row in graph] for k in range(n): for i in range(n): for j in range(n): dist = min(dist, dist + dist) return dist graph = , , , ] result = Floyd_Warshall(graph) print(result)
في هذا المثال، تحتوي مصفوفة الإدخال على المسافات بين العقد. تمثل قيمة 'INF' أزواج العقد غير المتصلة بشكل مباشر. بمجرد التنفيذ، يقوم البرنامج بإرجاع مصفوفة جديدة بالمسافات الدنيا المحسوبة.
تطبيقات خوارزمية فلويد-وارشال
هذه الخوارزمية ليست مجرد فضول رياضي؛ ولها تطبيقات عملية في مجالات مختلفة:
- تصميم شبكة النقل: تحديد الطرق المثلى بين المدن أو النقاط اللوجستية.
- الإتصالات والشبكات: حساب أقصر الطرق في أنظمة الاتصالات.
- تحسين الدائرة: تصميم دوائر أكثر كفاءة لتقليل التكاليف والأوقات.
المزايا والقيود
تتميز خوارزمية فلويد-وارشال بعدة مزايا ، من بينها قدرتها على التعامل مع الرسوم البيانية الموزونة ذات الأوزان السالبة ، وهو أمر لا تسمح به العديد من الخوارزميات. علاوة على ذلك، فهي سهلة التطبيق والفهم نسبيًا، مما يجعلها في متناول حتى المبتدئين في هذا المجال.
مع ذلك، توجد بعض القيود . فتعقيدها الزمني O(n³)، مما يعني أنها ليست مثالية للرسوم البيانية الضخمة للغاية. في مثل هذه الحالات، قد تكون طرق أخرى، مثل الخوارزميات الموزعة أو خوارزمية جونسون، أكثر ملاءمة.
نقاط أساسية يجب تذكرها
عند تقييم ما إذا كانت خوارزمية فلويد-وارشال مناسبة لحل مشكلة ما، ضع ما يلي في الاعتبار:
- إنه مثالي للرسوم البيانية الكاملة حيث يتعين حساب المسارات بين جميع أزواج العقد.
- يعمل بشكل جيد مع الأوزان السلبية، لكنه لا يدعم الدورات السلبية.
- يتطلب مصفوفة إدخال تمثل بشكل صحيح الاتصالات والأوزان بين العقد.
تُعد خوارزمية فلويد-وارشال أداة قوية ومتعددة الاستخدامات لحل مشكلات الرسم البياني المعقدة، بدءًا من الحد الأدنى للمسافات وحتى تحسين المسار. إن فهم كيفية عمله سوف يسمح لك بتطبيقه بشكل فعال في مجموعة واسعة من السيناريوهات والقطاعات.