Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

‫‪1200‬‬

‫نظري‬

‫‪00‬‬ ‫مراجعة لخوارزميات‬


‫‪1‬‬
‫وتعريف البحث‬
‫‪01/10/2023‬‬ ‫‪10‬‬ ‫د‪ .‬عمّار النحّاس‬

‫درسنا في مق ّررات سابقة بعض خوارزم ّيات البحث مثل ‪ DFS, BFS, Dijkstra‬في مق ّرر خوارزميات ‪ ،2‬إضافة لفكرة عا ّمة‬
‫الصنعي‪ ،‬في مق ّررنا هذا سنراجع هذه الخوارزميات وسنعمل على‬
‫ّ‬ ‫عن خوارزمية )*‪ A-Star(A‬في مق ّرر مبادئ الذكاء‬
‫فهم معنى تسميتها بخوارزميات بحث ونضيف عليها بعض التحسينات باإلضافة إلى خوارزميات جديدة‬

‫بدايةً ال بدّ لنا من مراجعة بعض المفاهيم األساسيّة‪:‬‬


‫‪ ‬البحث‬
‫هو إيجاد عنصر بخصائص معيّنة ضمن مجموعة من العناصر (فضاء البحث)‬
‫‪ ‬خوارزمية البحث‬
‫هي مجموعة الخطوات المتّبعة للتجوّل في فضاء البحث إليجاد العنصر المطلوب‬
‫في خوارزمية البحث نحاول تجنب زيارة كامل فضاء البحث من خالل توقع الطريق الذي قد يوصلنا إلى الهدف‬

‫كما نعلم فإن هناك عدّة أنواع للمسائل التي قد تصادفنا‪ ،‬وسبق أن ذكرناها في المحاضرة‬ ‫▪‬
‫األولى من مقرّر العملي‪ ،‬وكما ذكرنا سنتعامل مع‪:‬‬
‫‪Fully Observable, Deterministic, Static, Single & Multi Player‬‬
‫سنتعامل مع ‪ Single Player‬في المحاضرات الثالث األولى ومع ‪ Multi Player‬في المحاضرة‬ ‫▪‬
‫الرابعة‬

‫تمثيل المسألة‬
‫ال بدّ لنا من إيجاد طريقة لتمثيل المسألة حاسوب ّياً حتى نتمكّن من حلّها‪ ،‬وسنقوم بذلك من خالل تمثيلها بـ‪:‬‬
‫‪State .1‬‬
‫تمثّل حالة المسألة في مرحلة ما‪ ،‬حيث ال بدّ لنا من إيجاد طريقة مناسبة لتمثيل جميع المعطيات الالزمة بحيث نستطيع‬
‫معرفة أيّ معلومة نحتاجها عن الحالة‬
‫‪Initial State .2‬‬
‫الحالة االبتدائية في المسألة والتي سنبدأ منها محاولة البحث إليجاد حل‬

‫‪/ITE.RBCs‬‬
‫‪1‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫‪Operation .3‬‬
‫تمثّل الحركة وطريقة االنتقال من حالة إلى أخرى‪ ،‬حيث ال بدّ لنا من تغطية جميع االنتقاالت الممكنة والتمكّن من معرفة‬
‫الحالة الناتجة‬
‫‪Goal test .4‬‬
‫طريقة ما الختبار هل وصلنا إلى حل أم ال‪ ،‬في بعض األحيان يكون الحل هو عبارة عن حالة معيّنة نسعى للوصول إليها‬
‫عندئذٍ نكتفي بالمقارنة معها ‪ ،Goal State‬وأحياناً يكون الحل هو تحقيق شروط معيّنة فنقوم بفحصها‬

‫نالحظ أنّه يمكننا تمثيل فضاء البحث بهذه الطريقة باستخدام ‪ Graph‬حيث سنمثّل‬ ‫▪‬
‫الـ‪ State‬بـ ‪Node‬‬
‫والـ‪ Operation/Action‬بـ ‪Edges‬‬
‫وعندما نقوم بإيجاد حلّ ما نكون فعليّاً قد أوجدنا طريق ‪ Path‬من الحالة االبتدائية إلى الحالة الهدف‬ ‫▪‬
‫أما الحل األمثل ‪ Optimal solution‬فهو سيكون أقصر طريق بين الحالة االبتدائية والحالة الهدف‬ ‫▪‬
‫‪Shortest Path‬‬
‫لنأخذ بعض األمثلة عن مسائل ونحاول تمثيلها‪:‬‬

‫‪The 8-Puzzles‬‬
‫هي رقعة مؤلّفة من مربع أبعاده ‪ 3×3‬تحوي ثمانية أرقام ومربع فارغ‬
‫الهدف ترتيب هذه األرقام وجعل الفراغ في النهاية‪.‬‬
‫يمكن أن نمثّلها‪:‬‬
‫‪:State .1‬‬
‫ما يهمنا هو شكل الرقعة‪ ،‬ويمكننا حفظ شكل الرقعة بأكثر من طريقة‪:‬‬
‫مصفوفة ثنائيّة‪:‬‬ ‫▪‬
‫‪[ {1, 3, 2},‬‬
‫‪{7, 8, 6},‬‬
‫]‪{5, 4, #},‬‬
‫حيث ‪ #‬يمثّل الفراغ‬
‫مصفوفة أحاديّة‬ ‫▪‬
‫]‪[ 1, 3, 2, 7, 8, 6, 5, 4, #‬‬
‫بفرض الرقم ‪ x‬يقع في السطر ‪ i‬والعمود ‪ j‬وعدد األعمدة الكلّي ‪cols‬‬
‫عندها يكون موقع الرقم ‪ x‬في المصفوفة األحاديّة‬
‫𝑗 ‪𝑖 ∗ 𝑐𝑜𝑙𝑠 +‬‬

‫‪2‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫نمثّل موقع كل رقم على حدة‪:‬‬ ‫▪‬


‫‪1 → ሺ1,1ሻ‬‬ ‫‪4 → ሺ3,2ሻ‬‬ ‫‪7 → ሺ2,1ሻ‬‬

‫‪2 → ሺ1,3ሻ‬‬ ‫‪5 → ሺ3,1ሻ‬‬ ‫‪8 → ሺ2,2ሻ‬‬

‫‪3 → ሺ1,2ሻ‬‬ ‫‪6 → ሺ2,3ሻ‬‬ ‫‪# → ሺ3,3ሻ‬‬

‫نختار الطريقة التي تجعل العمليّات أسهل ما يكون فنختار هنا مثالً المصفوفة الثنائيّة‪ ،‬ألنّها تسهّل علينا معرفة‬ ‫▪‬
‫قيمة أيّ خانة بسرعة كما تسهّل علينا االنتقاالت‬
‫‪:Action .2‬‬
‫لدينا أربع انتقاالت وهي تحريك الفراغ بإحدى االتّجاهات األربعة (أعلى‪ ،‬أسفل‪ ،‬يمين‪ ،‬يسار)‬
‫‪:Initial State .3‬‬
‫هي الحالة األولى األساسيّة للرقعة‬
‫‪:Goal State .4‬‬
‫هو أن تكون الرقعة مرتّبة بالشكل المطلوب‪ ،‬أي يمكن مقارنتها‬
‫مع الـ‪ State‬الحاليّة‪.‬‬

‫‪The 8 Queens‬‬
‫هي رقعة شطرنج مربّعة أبعادها ‪ 8×8‬نريد وضع ثمانية وزراء عليها بحيث ال يشكّل أي وزير تهديداً لوزير آخر‪.‬‬
‫نمثّلها بالشكل‪:‬‬
‫‪:State .1‬‬
‫هنالك عدّة طرق لكن سنستخدم حاليّاً المصفوفة الثنائيّة لتمثيل الرقعة‪ ،‬حيث كل خليّة إمّا أن تكون‬
‫فارغة أو تحوي وزير‪.‬‬
‫‪:Action .2‬‬
‫إضافة وزير في خليّة فارغة‬
‫‪:Initial state .3‬‬
‫رقعة فارغة تماماً‬
‫‪:Goal test .4‬‬
‫التجوّل على كامل الرقعة والتأكد من أنّه ال يوجد أي وزير يستطيع مهاجمة وزير آخر‪.‬‬

‫‪3‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫‪Maze‬‬
‫لدينا متاهة لها نقطة بداية ونقطة نهاية نريد الوصول إليها‬
‫يمكن تمثيلها بالشكل‪:‬‬
‫‪:State .1‬‬
‫مصفوفة ثنائية‪ ،‬كل عنصر إمّا فراغ أو حاجز‪ ،‬إضافة إلى حفظ موقع الالعب (‪)x,y‬‬
‫‪:Action .2‬‬
‫تحريك الالعب بأحد االتجاهات األربعة إن أمكن (إن لم يوجد حاجز)‬
‫)‪(x+1,y) , (x,y+1) , (x-1,y) , (x,y-1‬‬ ‫أي‪:‬‬
‫‪:Initial State .3‬‬
‫موقع الالعب في نقطة البداية‬
‫‪:Goal test .4‬‬
‫هل الالعب وصل لنقطة الهدف (نقطة النهاية)‬
‫هناك أيضاً العديد من المسائل األخرى التي تتمثل كمسائل بحث‪..‬‬

‫‪Branching Factor‬‬
‫هو وسطي عدد الفروع (الوصالت أو الحركات) الخارجة من العقد بشكل عامّ‪.‬‬
‫لحسابه نأخذ مجموع عدد الحركات الممكنة من كلّ عقدة مقسوماً على عدد العقد‪.‬‬
‫فمثالً في ‪ 8-Puzzles‬عدد الحركات من كلّ عقدة‪:‬‬

‫أي‪:‬‬
‫‪2∗4+3∗4+4∗1‬‬
‫‪≈ 2,667‬‬
‫‪9‬‬
‫مالحظة‪:‬‬
‫أحيانا ال نستطيع حساب وسطي عدد الفروع‪ ،‬في تلك الحالة يكون الـ ‪ branching factor‬هو أكبر عدد فروع ممكن‪.‬‬

‫‪4‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫خوارزميات البحث‬
‫بعد أن تمكّنا من تمثيل مسائلنا على شكل ‪ ،Graph‬البدّ لنا من وضع خوارزمية للتجوّل عليه وإيجاد‬
‫حل لمسألتنا‪.‬‬
‫▪ هناك نوعين أساسيين لخوارزميّات البحث‪:‬‬

‫الخوارزميات العمياء ‪:Blind‬‬


‫هي التي تحاول إيجاد الحل لكن ال تستفيد من معلومات وطبيعة المسألة وهي ما سنتعامل معه في محاضرتنا‬
‫‪:Heuristic‬‬
‫هي التي تستفيد من طبيعة المسألة وتحاول توقع كلفة كل طريق وبناء على ذلك نحاول أن نوجد أفضل حل‪ ،‬وسنتعرّف‬
‫عليها في المحاضرات القادمة‬
‫أوالً‪.‬‬
‫عام ال ب ّد أن نتع ّرف عليه ّ‬
‫لكن جميع الخوارزم ّيات بنوعيها تعمل ضمن قالب ّ‬
‫الخوارزمية العامّة للبحث‬
‫لدينا نوعين من العقد ضمن البيان‪:‬‬
‫‪ .1‬عقدة مغلقة – ‪:Closed node‬‬
‫هي عقدة قمنا بالمرور عليها ومعالجتها وتوليد العقد المجاورة لها من خالل تجريب الـ‪ Actions‬الممكنة‪.‬‬
‫‪ .2‬عقدة مفتوحة – ‪:Opened / Fringe node‬‬
‫هي العقدة التي لم نعالجها بعد‪ ،‬يمكن تخيّلها على أنّنا أضفناها إلى قائمة االنتظار‪.‬‬
‫مبدأ عمل خوارزميات البحث هو اختيار عقدة ما من ‪ Opened nodes‬ومعالجتها‪ ،‬عندئذٍ نقوم‬
‫بفحص هل هذه هي الحالة الهدف أم ال‪ ،‬ونقوم أيضاً بـ‪:‬‬
‫▪ حذف هذه العقدة من الـ ‪Opened nodes‬‬
‫▪ إضافة هذه القعدة إلى الـ ‪Closed nodes‬‬
‫▪ إضافة أبناء العقدة إلى الـ ‪Opened nodes‬‬
‫االختالف بين خوارزميات البحث فيما بينها يكمن بطريقة اختيار عقدة لمعالجتها‪.‬‬
‫في مادّة خوارزميات ‪ 2‬كنّا نقوم بحفظ العقد المزارة ‪( visited‬أو ‪ Closed‬كما نسميها اآلن(‪.‬‬
‫لكن في حالتنا هذه نحن نحاول حل مسائل بفضاء بحث هائل لذلك لتوفير الحجم لن نقوم بحفظ العقد المزارة وإنما‬
‫نكتفي بحفظ العقد الـ ‪.Opened‬‬
‫بهذه الطريقة عند المرور على عقدة سبق وأن زرناها ال بدّ لنا من معالجتها ثانيةً فنكون قد خسرنا بعض الوقت‪ ،‬لكن هذا‬
‫ضروري لتوفير المساحة ‪space–time tradeoff‬‬

‫‪5‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫لنأخذ مثاالً على الـ ‪8-Puzzles‬‬

‫‪Opened nodes‬‬

‫ترتيب فتح العقد‬


‫حاليا‬
‫عشوائي ّ‬
‫ّ‬

‫‪Opened nodes‬‬

‫‪Opened nodes‬‬
‫الحظ أننا‬
‫أعدنا فتح‬
‫الحالة ‪D‬‬
‫التي سبق‬
‫وأن‬
‫عالجناها‬

‫‪Opened nodes‬‬
‫النهائية‬
‫ّ‬ ‫نجد أن الحالة ‪ F‬هي الحالة‬
‫وتنتهي المسألة‬

‫‪6‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫إذاً يمكن كتابة ‪ Pseudocode‬التالي تقريباً كخوازرمية عامّة (هذا الكود قد تمّ حفظ العقد المغلقة فيه أيضاً‪ ،‬لكن يمكن‬
‫‪OPEN = {InitialState}, CLOSE = nil‬‬ ‫ببساطة عدم حفظها)‬
‫‪SUCCESS = False‬‬
‫‪While OPEN != {} And SUCCESS = false do‬‬ ‫▪ المقصود بالتابع ‪ g‬هو كلفة الوصول للعقدة‪.‬‬
‫‪Begin‬‬
‫▪ المقصود بالتابع ‪ k‬هو كلفة االنتقال من العقدة‬
‫)‪u = Get_First_Node_From_Open(OPEN‬‬
‫األولى للثانية (وزن الوصلة)‪.‬‬
‫)‪OPEN = Remove_First(OPEN‬‬
‫‪if GoalState(u) Then‬‬
‫‪SUCCESS = True‬‬
‫‪ELSE‬‬
‫‪Begin‬‬
‫)‪Add(u,CLOSE‬‬
‫‪For each v in Children(u) do‬‬
‫‪Begin‬‬
‫‪if v Not in CLOSE Then‬‬
‫‪Begin‬‬
‫)‪Add(v,OPEN‬‬
‫)‪g(v)=g(u)+k(u,v‬‬
‫‪Father(v)=u‬‬
‫‪End‬‬
‫‪End‬‬
‫‪End‬‬ ‫نالحظ من المثال السابق‪:‬‬
‫‪End‬‬ ‫▪ فضاء الحل أصبح ممثّل لدينا كـ ‪ Graph‬وتحديداً على شكل ‪.Tree‬‬
‫‪if OPEN = {} Then FAIL‬‬ ‫▪ ‪ Opened nodes‬تمثّل األوراق في الشجرة‬
‫)‪Else GenerateSolutionPath(u‬‬
‫▪ ‪ Closed nodes‬تمثّل بقيّة الشجرة‬
‫قبل أن ننتقل إلى الخوارزميات بالتفصيل ال بدّ لنا من وضع معايير للمقارنة بين هذه الخوارزميات‪..‬‬

‫‪ :Completness .1‬هل الخوارزمية تصل إلى حل دائماً أم من الممكن ألّا تتمكّن من إيجاد حل‪ ،‬أو قد تدخل في‬
‫حلقة النهائية‪.‬‬
‫‪ :Optimal .2‬هل الخوارزمية توجِد حل أمثلي أم ال‬
‫‪ :Space Complexity .3‬كم من المساحة نستخدم لتحقيق الخوارزمية‬
‫‪ :Time Complexity .4‬كم من الوقت يستغرق تنفيذ الخوارزمية‬

‫مالحظة‪:‬‬
‫أحياناً نستخدم خوارزميات ليست ‪ Optimal‬ألنها توفر الكثير من الوقت أو المساحة‪ ،‬وتعطينا حل مقبول‬
‫نوعاً ما‪.‬‬

‫‪7‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫)‪Depth First Search (DFS‬‬


‫هي من الخوارزميات العمياء التي ال تهتم بتوقّع الكلفة المستقبليّة‪ ،‬بل تعمل وفق مبدأ‪:‬‬

‫‪LIFO‬‬
‫‪Last in First out‬‬
‫فتأخذ آخر عقدة دخلت إلى الـ ‪ Opened nodes‬وتقوم بفتحها ومعالجتها‪ ،‬لذا فهي تستخدم الـ ‪Stack‬‬
‫لقد تعلمنا هذه الخوارزمية في مقررات سابقة لذلك لن نستفيض بشرحها‬
‫معايير الخوارزمية‪:‬‬

‫‪:Completness .1‬‬
‫هذه الخوارزمية قد تدخل في حلقة ال نهائية (ألننا لم نعد نستخدم مصفوفة ‪ )visited‬لذلك هي ليست‬
‫كاملة‪.‬‬
‫‪:Optimal .2‬‬
‫أمثلي‪ّ ،‬إال إذا قمنا بإيجاد جميع الحلول الممكنة والمقارنة بينها وهذا أمر مكلف وغير‬
‫ّ‬ ‫ال تصل إلى حل‬
‫منطقي‬
‫‪Space Complexity .3‬‬
‫)‪O(b*m‬‬
‫حيث‪b: branching factor , m: the biggest depth in search space :‬‬
‫ألننا سنخزن فقط األوراق (‪ )Opened nodes‬ففي كل مستوى سنخزن أبناء عقدة واحدة (وسط ّياً ‪ )b‬ألننا‬
‫لو فتحنا العقدة المجاورة لها فال ب ّد أنّنا قد أغلقنا جميع أبنائها‬
‫سنخزن في ‪ m‬مستوى (أكبر عمق ممكن)‪.‬‬ ‫ّ‬ ‫وعلى األكثر‬
‫‪O(bm) Time Complexity .4‬‬
‫ألننا قد نضطر لمعالجة الشجرة كاملة‬

‫)‪Breath First Search (BFS‬‬


‫مماثلة تماماً للـ ‪ DFS‬بطريقة العمل لكن تختلف بأنها تعتمد مبدأ‬

‫‪FIFO‬‬
‫‪First in First out‬‬
‫حيث تأخذ أوّل عقدة دخلت إلى الـ ‪ Opened nodes‬وتقوم بفتحها ومعالجتها لذا هي تستخدم ‪Queue‬‬

‫‪8‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫‪:Completeness .1‬‬
‫أن عدد الحركات الممكنة هو محدود دائماً (‪)b is finite‬‬
‫تكون كاملة وتستطيع الوصول إلى حل طالما ّ‬

‫‪:Optimal .2‬‬
‫تستطيع إيجاد الحل األمثل بشرط أن تكون كلفة جميع االنتقاالت متساوية‪ ،‬وأن تكون كلفة الحل تزداد‬
‫بزيادة عمق الحل‪.‬‬
‫‪:Space Complexity .3‬‬
‫بما أننا نخزن األوراق فقط فحجم التخزين هو عدد العقد في المستوى الذي يوجد فيه الحل ‪ ،d‬ومن كل‬
‫مستوى للتالي يتضاعف عدد العقد من خالل ضربها بوسطي عدد األبناء تقريباً ‪ b‬فيكون التعقيد )‪O(bd+1‬‬
‫حيث‪d: depth of solution , b: branching factor :‬‬
‫‪:Time Complexity .4‬‬
‫هو كلفة معالجة كل عقد الشجرة أي حجم الشجرة وهو من رتبة )‪O(bd+1‬‬

‫)‪Uniform Cost Search (UCS‬‬


‫تشبه ‪ Dijkstra‬في مبدأ عملها إلى حد كبير إذ أنها تختار العقدة صاحبة الكلفة األقلّ من الـ ‪ Opened nodes‬وتقوم‬
‫بمعالجتها وإضافة أبنائها‬
‫تستخدم غالباً في حال كان لالنتقاالت أوزان بشرط أن هذه األوزان موجبة تماماً‬ ‫▪‬
‫في حال كانت لجميع االنتقاالت نفس الكلفة عندئذٍ تعمل نفس ‪ BFS‬بسبب أنّنا نأخذ في كلّ مرة العقدة ذات‬ ‫▪‬
‫أصغر كلفة ونعالجها ونولّد منها حاالت جديدة‬
‫وبما أن قيم جميع األوزان موجبة تماماً فكلفة الطريق متزايدة حتماً لذلك فإن أول مرور على العقدة هو المرور‬ ‫▪‬
‫األمثل بأقلّ كلفة‬

‫‪:Completeness .1‬‬
‫أن تكون األوزان أكبر تماماً من الصفر (في حال كان هنالك وصلة‬
‫تستطيع إيجاد حل دائماً بالتأكيد بشرط ّ‬
‫قيمتها صفر أو سالبة فسيدخل في حلقة النهائية) وعدد الحركات الممكنة محدود (منتهي) (‪)b is finite‬‬
‫‪:Optimal .2‬‬
‫دائماً توجد الحل األمثل ألنها تختار الوزن األقل كلفة‬
‫‪:Space Complexity .3‬‬
‫بأسوأ األحوال تكون مثل ال‪ BFS‬أي )‪O(bd+1‬‬
‫‪:Time Complexity .4‬‬
‫أيضاً بأسوأ األحوال تكون مثل الـ‪ BFS‬أي )‪O(bd+1‬‬
‫أن كلفة إيجاد أصغر عنصر والحذف واإلضافة هي )‪O(1‬‬‫وذلك بفرض ّ‬

‫‪9‬‬
‫‪/ITE.RBCs‬‬
‫خوارزميات البحث الذكية | د‪ .‬عمار النحاس‬

‫لنأخذ مثال على ‪:UCS‬‬


‫بفرض أننا نريد الوصول من ‪ A‬إلى ‪G‬‬

‫‪Closed‬‬ ‫} {‬ ‫‪Opened‬‬ ‫)‪(A,0‬‬


‫نأخذ العقدة )‪ (A,0‬ألنها األقلّ كلفة ونولّد أبنائها‬
‫‪Closed‬‬ ‫)‪(A,0‬‬ ‫‪Opened‬‬ ‫)‪(C,3), (B,7), (G,25‬‬
‫نأخذ ‪ C‬ألنها األصغر كلفة ونولّد أبنائها‬
‫‪(B,5), (B,7),‬‬
‫‪Closed‬‬ ‫)‪(A,0), (C,3‬‬ ‫‪Opened‬‬
‫)‪(G,10), (G,25‬‬
‫نأخذ )‪ (B,5‬ألنها األصغر كلفة‬
‫‪(B,7),(G,10),(D,9),‬‬
‫‪Closed‬‬ ‫)‪(A,0), (C,3), (B,5‬‬ ‫‪Opened‬‬
‫)‪(G,25‬‬
‫نأخذ )‪(B,7‬‬
‫‪(A,0), (C,3), (B,5),‬‬ ‫‪(D,9), (G,10), (D,11),‬‬
‫‪Closed‬‬ ‫‪Opened‬‬
‫)‪(B,7‬‬ ‫)‪(G,25‬‬
‫)‪(D,9‬‬
‫‪(A,0), (C,3), (B,5),‬‬ ‫‪(G,10), (G,14), (D,11),‬‬
‫‪Closed‬‬ ‫‪Opened‬‬
‫)‪(B,7), (D,9‬‬ ‫)‪(G,25‬‬
‫)‪ (G,10‬ونالحظ وصولنا للهدف وأن كلفة أقصر طريق هي ‪10‬‬
‫‪(A,0), (C,3), (B,5),‬‬
‫‪Closed‬‬ ‫‪Opened‬‬ ‫)‪(G,14), (D,11), (G,25‬‬
‫)‪(B,7), (D,9), (G,10‬‬

‫نالحظ أن الخوارزمية اختارت العقد‬


‫بأقل كلفة لها وزارتها‬

‫انتهت املحاضرة‬
‫‪10‬‬
‫‪/ITE.RBCs‬‬

You might also like