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

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

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

Approaching Brute Force Algorithm Using Javascript

  1. فيما يلي بعض الأمثلة التي تبدأ بالمستوى البسيط إلى المتقدم (مشكلة البائع المتجول ومشكلة الحقيبة 0/1)
  2. تعتمد هذه الأمثلة على خوارزمية القوة الغاشمة

ملاحظتي: -

  1. هناك العديد من الجوانب السلبية لخوارزمية القوة الغاشمة ولكن قبل القفز مباشرة إلى البرمجة الديناميكية والأساليب الأخرى
  2. يجب أن يكون لديك أفكار حول هذا النهج ويجب عليك معرفة سبب حاجتنا إلى نمط البرمجة الديناميكية (حفظ العودية)

إذا لاحظت عن كثب نمط القوة الغاشمة

const wrapper = (value) => {
    const helper = (combinedArray, depth) => {
       if (depth == 3) {
          // operation
           return ;
       }

       for (let coin of coins) {
           if (value - coin >=0) {
               combinedArray.push(coin);
               helper(combinedArray, label 1);
               combinedArray.pop();
           }
       }
    }

    helper([], 0);
    return result;
};

const res = wrapper(value);
console.log(res);

س1. ابدأ بمجموعتين من العملات المعدنية

const wrapper = () => {
    const coinSide = ['head', 'tail']
    const result = [];
    const helper = (currentCombination, depth) => {
        if (depth == 2) {
            result.push([...currentCombination]);
            return ;
        }

        for (side of coinSide) {
            currentCombination.push(side);
            helper(currentCombination, depth  1);
            currentCombination.pop()
        }
    }

    helper([], 0);

    return result;
};

const res = wrapper();

console.log(res);

السؤال الثاني. ابدأ بثلاث مجموعات من العملات المعدنية

const wrapper = () => {
    const coinSide = ['head', 'tail']
    const result = [];
    const helper = (currentCombination, depth) => {
        if (depth == 3) {
            result.push([...currentCombination]);
            return ;
        }

        for (side of coinSide) {
            currentCombination.push(side);
            helper(currentCombination, depth  1);
            currentCombination.pop()
        }
    }

    helper([], 0);

    return result;
};

const res = wrapper();

console.log(res);

/*
[
  [ 'head', 'head', 'head' ],
  [ 'head', 'head', 'tail' ],
  [ 'head', 'tail', 'head' ],
  [ 'head', 'tail', 'tail' ],
  [ 'tail', 'head', 'head' ],
  [ 'tail', 'head', 'tail' ],
  [ 'tail', 'tail', 'head' ],
  [ 'tail', 'tail', 'tail' ]
]
*/

س3. ترتيب الجلوس

const wrapper = () => {
    const result = [];
    const group = ['b1', 'b2', 'g1']
    const helper = (combination, depth) => {
        if (depth == 3) {
            result.push([...combination]);
            return;
        }

        for (let item of group) {
            if (combination.indexOf(item) ،
  

، ['g1'، 'b1'، 'b2']، ['g1'، 'b2'، 'b1' ] ] */
السؤال الرابع. مشكلة العملة / المبلغ

// Minimum coin Problem
const wrapper = (value) => {
    let result = 99999;
    let resultArr = [];
    const coins = [10, 6, 1];
    const helper = (value, label, combinedArray) => {
       if (value == 0) {
           if (result > label) {
               result = label;
               resultArr = [...combinedArray]
           }
           return ;
       }

       for (let coin of coins) {
           if (value - coin >=0) {
               combinedArray.push(coin);
               helper(value-coin, label 1, combinedArray);
               combinedArray.pop();
           }
       }
    }

    helper(value, 0, []);
    console.log(resultArr)

    return result;
};

const res = wrapper(12);

console.log(res);
/*
[ 6, 6 ]
2
*/

// مشكلة الحد الأدنى للعملة المجمع الثابت = (القيمة) => { دع النتيجة = 99999؛ دع resultArr = []; العملات الثابتة = [10، 6، 1]؛ مساعد const = (القيمة، التسمية، الصفيف المدمج) => { إذا (القيمة == 0) { إذا (النتيجة> التسمية) { النتيجة = التسمية؛ resultArr = [...combinedArray] } يعود ؛ } لـ (دع عملة معدنية) { إذا (القيمة - العملة >=0) { CombinedArray.push(coin); helper(value-coin, label 1, CombinedArray); CombineArray.pop(); } } } helper(value, 0, []); console.log(resultArr) نتيجة الإرجاع؛ }; const res = المجمع (12)؛ console.log(res); /* [ 6, 6 ] 2 */
Q5.Set الجيل

// Minimum coin Problem
const wrapper = (value) => {
    let result = 99999;
    let resultArr = [];
    const coins = [10, 6, 1];
    const helper = (value, label, combinedArray) => {
       if (value == 0) {
           if (result > label) {
               result = label;
               resultArr = [...combinedArray]
           }
           return ;
       }

       for (let coin of coins) {
           if (value - coin >=0) {
               combinedArray.push(coin);
               helper(value-coin, label 1, combinedArray);
               combinedArray.pop();
           }
       }
    }

    helper(value, 0, []);
    console.log(resultArr)

    return result;
};

const res = wrapper(12);

console.log(res);
/*
[ 6, 6 ]
2
*/

// المشكلة 1: إنشاء كافة المجموعات الفرعية للمجموعة // بيان المشكلة: // بالنظر إلى مجموعة من العناصر الفريدة، قم بإنشاء جميع المجموعات الفرعية الممكنة (مجموعة الطاقة). // يحتاج هذا الحل إلى مزيد من التحسين. // مثال: // الإدخال: [1، 2، 3] // الإخراج: [[]، [1]، [2]، [3]، [1، 2]، [1، 3]، [2، 3]، [1، 2، 3]] غلاف ثابت = () => { النتيجة الثابتة = [[]]؛ إدخال ثابت = [1,2,3]; input.forEach(item => result.push([item])); مساعد const = (التركيبة، العمق) => { إذا (العمق == 2) { إذا (result.indexOf(combination)
السؤال السادس: مشكلة رجل المبيعات المتجول باستخدام خوارزمية القوة الغاشمة

// Minimum coin Problem
const wrapper = (value) => {
    let result = 99999;
    let resultArr = [];
    const coins = [10, 6, 1];
    const helper = (value, label, combinedArray) => {
       if (value == 0) {
           if (result > label) {
               result = label;
               resultArr = [...combinedArray]
           }
           return ;
       }

       for (let coin of coins) {
           if (value - coin >=0) {
               combinedArray.push(coin);
               helper(value-coin, label 1, combinedArray);
               combinedArray.pop();
           }
       }
    }

    helper(value, 0, []);
    console.log(resultArr)

    return result;
};

const res = wrapper(12);

console.log(res);
/*
[ 6, 6 ]
2
*/

// مشكلة رجل المبيعات المتجول باستخدام خوارزمية القوة الغاشمة وظيفة حساب المسافة (مصفوفة، مسار) { دع المسافة الإجمالية = 0؛ من أجل (دع i = 0؛ i { إذا (العمق == 4) { result.push([...combination]); يعود؛ } لـ (دع العنصر من arr) { إذا (combination.indexOf(item) Index) console.log(المدن) التباديل الثابت = التباديل(المدن); console.log(التباديل) دع minDistance = Infinity; Let bestPath = []; لـ (دع مسار التباديل) { مسافة ثابتة = احسب المسافة (مصفوفة، مسار)؛ إذا (المسافة
س7. 0/1 مشكلة القوة الغاشمة في حقيبة الظهر

// Minimum coin Problem
const wrapper = (value) => {
    let result = 99999;
    let resultArr = [];
    const coins = [10, 6, 1];
    const helper = (value, label, combinedArray) => {
       if (value == 0) {
           if (result > label) {
               result = label;
               resultArr = [...combinedArray]
           }
           return ;
       }

       for (let coin of coins) {
           if (value - coin >=0) {
               combinedArray.push(coin);
               helper(value-coin, label 1, combinedArray);
               combinedArray.pop();
           }
       }
    }

    helper(value, 0, []);
    console.log(resultArr)

    return result;
};

const res = wrapper(12);

console.log(res);
/*
[ 6, 6 ]
2
*/
// 0/1 مشكلة القوة الغاشمة في حقيبة الظهر وظيفة knapsackBruteForce (الأوزان والقيم والسعة) { دع n = الأوزان. الطول؛ دع maxValue = 0؛ const subsetResult = []; كونست ثنائي فالس = [0، 1]؛ // وظيفة لحساب الوزن الإجمالي وقيمة مجموعة فرعية وظيفة حساب المجموعة الفرعية (مجموعة فرعية) { دع الوزن الإجمالي = 0؛ دع القيمة الإجمالية = 0؛ من أجل (دع i = 0؛ i { إذا (العمق == 4) { subsetResult.push([...combination]); يعود ؛ } لـ (دع عنصر BinaryVals) { combin.push(item); مساعد (تركيبة، عمق 1)؛ مزيج.البوب ​​() } } مساعد([], 0); console.log(subsetResult) // إنشاء كافة المجموعات الفرعية باستخدام التمثيل الثنائي لـ (دع مجموعة فرعية من subsetResult) { Let { TotalWeight, TotalValue } = countSubset(subset); إذا (الوزن الإجمالي القيمة القصوى) { maxValue = TotalValue; } } إرجاع القيمة القصوى؛ } // مثال للاستخدام: الأوزان الثابتة = [2، 3، 4، 5]؛ القيم الثابتة = [3، 4، 5، 6]؛ السعة الثابتة = 5؛ const maxVal = knapsackBruteForce(weights,values,capacity); console.log(`القيمة القصوى في الحقيبة هي: ${maxVal}`); /* [ [ 0، 0، 0، 0 ]، [ 0، 0، 0، 1 ]، [ 0، 0، 1، 0 ]، [ 0، 0، 1، 1 ]، [ 0، 1، 0، 0 ]، [ 0، 1، 0، 1 ]، [ 0، 1، 1، 0 ]، [ 0، 1، 1، 1 ]، [ 1، 0، 0، 0 ]، [ 1، 0، 0، 1 ]، [ 1، 0، 1، 0 ]، [ 1، 0، 1، 1 ]، [ 1، 1، 0، 0 ]، [ 1، 1، 0، 1 ]، [ 1, 1, 1, 0 ], [ 1, 1, 1, 1 ] ] الحد الأقصى للقيمة في الحقيبة هو: 7 */

Approaching Brute Force Algorithm Using Javascript

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/ashutoshsarangi/approaching-brute-force-algorithm-using-javascript-4ppl?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3