"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > دراسة الحالة: مشكلة ذيول التسعة المرجحة

دراسة الحالة: مشكلة ذيول التسعة المرجحة

تم النشر بتاريخ 2024-11-08
تصفح:347

يمكن اختزال مسألة التسعة ذيول الموزونة إلى مشكلة أقصر مسار مرجح.
قدم القسم مشكلة التسعة ذيول وحلها باستخدام خوارزمية BFS. يعرض هذا القسم شكلًا مختلفًا من المشكلة ويحلها باستخدام خوارزمية المسار الأقصر.

تتمثل مشكلة التسعة ذيول في العثور على الحد الأدنى لعدد الحركات التي تؤدي إلى توجيه جميع العملات المعدنية لأسفل. كل حركة تقلب العملة الرئيسية وجيرانها. تقوم مسألة التسعة ذيول الموزونة بتعيين عدد التقلبات كوزن في كل حركة. على سبيل المثال، يمكنك تغيير العملات المعدنية في الشكل أدناه أ إلى تلك الموجودة في الشكل أدناه ب عن طريق قلب العملة الأولى في الصف الأول وجارتيها. وبالتالي، فإن وزن هذه الخطوة هو 3. يمكنك تغيير العملات المعدنية في الشكل أدناه c إلى الشكل أدناه d عن طريق قلب العملة المركزية وجيرانها الأربعة. لذا فإن وزن هذه الحركة هو 5.

Case Study: The Weighted Nine Tails Problem

يمكن تقليل مشكلة التسعة ذيول الموزونة إلى إيجاد أقصر مسار من عقدة البداية إلى العقدة المستهدفة في رسم بياني مرجح الحافة. يحتوي الرسم البياني على 512 عقدة. أنشئ حافة من العقدة v إلى u إذا كان هناك انتقال من العقدة u إلى العقدة v. قم بتعيين عدد التقلبات ليكون وزن الحافة.

تذكر أننا في القسم قمنا بتعريف فئة NineTailModel لنمذجة مشكلة التسعة ذيول. نحدد الآن فئة جديدة تسمى WeightedNineTailModel التي تمتد إلى NineTailModel، كما هو موضح في الشكل أدناه.

Case Study: The Weighted Nine Tails Problem

تنشئ فئة NineTailModel رسمًا بيانيًا وتحصل على شجرة متجذرة في العقدة المستهدفة 511. WeightedNineTailModel هو نفس NineTailModel باستثناء أنه يقوم بإنشاء WeightedGraph ويحصل على ShortestPathTree المتجذر في العقدة المستهدفة 511. WeightedNineTailModel يمتد NineTailModel. تبحث الطريقة getEdges() عن جميع الحواف في الرسم البياني. تقوم طريقة getNumberOfFlips(int u, int v) بإرجاع عدد مرات التقليب من العقدة u إلى العقدة v. تقوم الطريقة getNumberOfFlips(int u) بإرجاع عدد مرات التقليب من العقدة u إلى العقدة المستهدفة.

الكود أدناه يطبق

WeightedNineTailModel.

عرض الحزمة؛ import java.util.*; الطبقة العامة WeightedNineTailModel تمتد NineTailModel { /** بناء النموذج */ عامة WeightedNineTailModel() { // إنشاء الحواف List edges = getEdges(); // إنشاء رسم بياني WeightedGraph graph = new WeightedGraph(edges, NUMBER_OF_NODES); // احصل على أقصر شجرة مسار متجذرة في العقدة المستهدفة الشجرة = graph.getShortestPath(511); } /** إنشاء كافة حواف الرسم البياني */ قائمة خاصة getEdges() { // حواف المتجر List edges = new ArrayList(); ل(int u = 0; u .ShortestPathTree)tree).getCost(u); } }
package demo;
import java.util.*;

public class WeightedNineTailModel extends NineTailModel {
    /** Construct a model */
    public WeightedNineTailModel() {
        // Create edges
        List edges = 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).

يوفر الكود أدناه برنامجًا يطالب المستخدم بإدخال العقدة الأولية ويعرض الحد الأدنى لعدد مرات التقلب للوصول إلى العقدة المستهدفة.


عرض الحزمة؛ استيراد java.util.Scanner؛ الطبقة العامة WeightedNineTail { public static void main(String[] args) { // اطلب من المستخدم إدخال تسع عملات معدنية 'Hs وTs System.out.print("أدخل العملات التسع الأولية Hs وTs:"); إدخال الماسح الضوئي = الماسح الضوئي الجديد (System.in)؛ String s = input.nextLine(); char[] originalNode = s.toCharArray(); نموذج WeightedNineTailModel = جديد WeightedNineTailModel(); java.util.List path = model.getShortestPath(NineTailModel.getIndex(initialNode)); System.out.println("خطوات قلب العملات المعدنية هي"); لـ (int i = 0; i package demo; import java.util.Scanner; public class WeightedNineTail { public static void main(String[] args) { // Prompt the user to enter nine coins' Hs and Ts System.out.print("Enter the initial nine coins Hs and Ts: "); Scanner input = new Scanner(System.in); String s = input.nextLine(); char[] initialNode = s.toCharArray(); WeightedNineTailModel model = new WeightedNineTailModel(); java.util.List path = model.getShortestPath(NineTailModel.getIndex(initialNode)); System.out.println("The steps to flip the coins are "); for (int i = 0; i أدخل تسع عملات معدنية أولية Hs وTs: HHHTTTTHHH

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

سه

تحويل النص إلى كلام
سمو

سه

تي اتش تي
تحويل النص إلى كلام

TTT

تحويل النص إلى كلام
تحويل النص إلى كلام

عدد التقليب هو 8

يطالب البرنامج المستخدم بإدخال عقدة أولية مكونة من تسعة أحرف مع مزيج من

Hs وTs كسلسلة في السطر 8، ويحصل على مجموعة من الأحرف من السلسلة (السطر 9)، تنشئ نموذجًا (السطر 11)، وتحصل على أقصر مسار من العقدة الأولية إلى العقدة المستهدفة (الأسطر 12-13)، وتعرض العقد في المسار (الأسطر 16-17)، وتستدعي getNumberOfFlips للحصول على عدد مرات التقليب اللازمة للوصول إلى العقدة المستهدفة (السطر 20).

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/paulike/case-study-the-weighted-nine-tails-problem-3n9i?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3