يمكن اختزال مسألة التسعة ذيول الموزونة إلى مشكلة أقصر مسار مرجح.
قدم القسم مشكلة التسعة ذيول وحلها باستخدام خوارزمية BFS. يعرض هذا القسم شكلًا مختلفًا من المشكلة ويحلها باستخدام خوارزمية المسار الأقصر.
تتمثل مشكلة التسعة ذيول في العثور على الحد الأدنى لعدد الحركات التي تؤدي إلى توجيه جميع العملات المعدنية لأسفل. كل حركة تقلب العملة الرئيسية وجيرانها. تقوم مسألة التسعة ذيول الموزونة بتعيين عدد التقلبات كوزن في كل حركة. على سبيل المثال، يمكنك تغيير العملات المعدنية في الشكل أدناه أ إلى تلك الموجودة في الشكل أدناه ب عن طريق قلب العملة الأولى في الصف الأول وجارتيها. وبالتالي، فإن وزن هذه الخطوة هو 3. يمكنك تغيير العملات المعدنية في الشكل أدناه c إلى الشكل أدناه d عن طريق قلب العملة المركزية وجيرانها الأربعة. لذا فإن وزن هذه الحركة هو 5.
يمكن تقليل مشكلة التسعة ذيول الموزونة إلى إيجاد أقصر مسار من عقدة البداية إلى العقدة المستهدفة في رسم بياني مرجح الحافة. يحتوي الرسم البياني على 512 عقدة. أنشئ حافة من العقدة v إلى u إذا كان هناك انتقال من العقدة u إلى العقدة v. قم بتعيين عدد التقلبات ليكون وزن الحافة.
تذكر أننا في القسم قمنا بتعريف فئة NineTailModel لنمذجة مشكلة التسعة ذيول. نحدد الآن فئة جديدة تسمى WeightedNineTailModel التي تمتد إلى NineTailModel، كما هو موضح في الشكل أدناه.
تنشئ فئة NineTailModel رسمًا بيانيًا وتحصل على شجرة متجذرة في العقدة المستهدفة 511. WeightedNineTailModel هو نفس NineTailModel باستثناء أنه يقوم بإنشاء WeightedGraph ويحصل على ShortestPathTree المتجذر في العقدة المستهدفة 511. WeightedNineTailModel يمتد NineTailModel. تبحث الطريقة getEdges() عن جميع الحواف في الرسم البياني. تقوم طريقة getNumberOfFlips(int u, int v) بإرجاع عدد مرات التقليب من العقدة u إلى العقدة v. تقوم الطريقة getNumberOfFlips(int u) بإرجاع عدد مرات التقليب من العقدة u إلى العقدة المستهدفة.
الكود أدناه يطبقWeightedNineTailModel.
package demo; import java.util.*; public class WeightedNineTailModel extends NineTailModel { /** Construct a model */ public WeightedNineTailModel() { // Create edges Listedges = getEdges(); // Create a graph WeightedGraph graph = new WeightedGraph(edges, NUMBER_OF_NODES); // Obtain a shortest path tree rooted at the target node tree = graph.getShortestPath(511); } /** Create all edges for the graph */ private List getEdges() { // Store edges List edges = new ArrayList(); for(int u = 0; u .ShortestPathTree)tree).getCost(u); } }
WeightedNineTailModel NineTailModel لإنشاء WeightedGraph لنمذجة مشكلة التسعة ذيول الموزونة (السطور 10-11). لكل عقدة u، تبحث طريقة getEdges() عن عقدة مقلوبة v وتقوم بتعيين عدد التقلبات كوزن للحافة (v، u) (السطر 30). تقوم الطريقة getNumberOfFlips(int u, int v) بإرجاع عدد مرات التقلب من العقدة u إلى العقدة v (الأسطر 38-47). عدد التقلبات هو عدد الخلايا المختلفة بين
عقدتين (السطر 44).
WeightedNineTailModel على ShortestPathTree المتجذر في العقدة المستهدفة 511 (السطر 14). لاحظ أن tree هو حقل بيانات محمي محدد في NineTailModel وShortestPathTree هو فئة فرعية من Tree. تستخدم الطرق المحددة في NineTailModel الخاصية شجرة.
تقوم طريقةgetNumberOfFlips(int u) (السطور 49-52) بإرجاع عدد مرات التقلب من العقدة u إلى العقدة المستهدفة، وهي تكلفة المسار من العقدة u إلى العقدة المستهدفة. يمكن الحصول على هذه التكلفة عن طريق استدعاء طريقة getCost(u) المحددة في فئة ShortestPathTree (السطر 51).
يوفر الكود أدناه برنامجًا يطالب المستخدم بإدخال العقدة الأولية ويعرض الحد الأدنى لعدد مرات التقلب للوصول إلى العقدة المستهدفة.
خطوات قلب العملات هي
سه
تحويل النص إلى كلام
سمو
تي اتش تي
تحويل النص إلى كلام
تحويل النص إلى كلام
تحويل النص إلى كلام
يطالب البرنامج المستخدم بإدخال عقدة أولية مكونة من تسعة أحرف مع مزيج من
Hs وTs كسلسلة في السطر 8، ويحصل على مجموعة من الأحرف من السلسلة (السطر 9)، تنشئ نموذجًا (السطر 11)، وتحصل على أقصر مسار من العقدة الأولية إلى العقدة المستهدفة (الأسطر 12-13)، وتعرض العقد في المسار (الأسطر 16-17)، وتستدعي getNumberOfFlips للحصول على عدد مرات التقليب اللازمة للوصول إلى العقدة المستهدفة (السطر 20).
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3