كيفية حل مشكلة الحقيبة الكسرية في لغة C++

Kyfyt Hl Mshklt Alhqybt Alksryt Fy Lght C



تشير مشكلة الحقيبة الكسرية في لغة C++ إلى تحديد طريقة لملء الحقيبة بعناصر ذات وزن معين وربح معين بحيث تحتوي الحقيبة على الحد الأقصى للقيمة دون تجاوز الحد الأقصى.

كيفية حل مشكلة الحقيبة الكسرية في لغة C++

بالنظر إلى مجموعة من العناصر، لكل منها الوزن والربح المحدد، حدد كل عدد من العناصر في مجموعة بحيث يكون الوزن الإجمالي للعناصر أقل من الحد الأقصى للحقيبة، ولكن يجب أن تظل القيمة كبيرة قدر الإمكان.







خوارزمية لتنفيذ مشكلة الحقيبة الكسرية

يمكن فهم عمل خوارزمية Knapsack من خلال النقاط التالية:



  • خذ صفيفين من الوزن والربح.
  • اضبط الحد الأقصى لقيمة الكيس على W.
  • تحديد الكثافة عن طريق أخذ نسبة كلا المعلمتين.
  • فرز العناصر بترتيب تنازلي من حيث الكثافة.
  • أضف القيم حتى تصبح <=W.

المنهج الجشع لحل مشكلة الحقيبة الكسرية

يهدف النهج الجشع إلى اتخاذ خيارات مثالية في كل خطوة، مما يؤدي إلى الحل المثالي في النهاية. فهو يحل المشكلات خطوة بخطوة مما يؤدي إلى الاستنتاجات بدلاً من التوصل إلى النتائج في النهاية فقط. هذا هو الكود المصدري لتنفيذ حل لمشكلة الحقيبة الكسرية في لغة C++:



#تتضمن

استخدام مساحة الاسم الأمراض المنقولة جنسيا ;

البنية هدف {

كثافة العمليات قيمة الوزن ;


هدف ( كثافة العمليات قيمة، كثافة العمليات وزن )
: قيمة ( قيمة ) ، وزن ( وزن )
{
}


} ;

منطقي cmp ( البنية الكائن س, البنية كائن ذ )

{

مزدوج أ1 = ( مزدوج ) س. قيمة / س. وزن ;

مزدوج A2 = ( مزدوج ) و. قيمة / و. وزن ;

يعود أ1 > A2 ;

}

مزدوج FractionalKnapsack ( البنية كائن آر [ ] ,
كثافة العمليات في، كثافة العمليات مقاس )
{

نوع ( آر، آر + الحجم، سم ) ;


كثافة العمليات com.curWeight = 0 ;

مزدوج القيمة النهائية = 0.0 ;


ل ( كثافة العمليات أنا = 0 ; أنا < مقاس ; أنا ++ ) {

لو ( com.curWeight + وصول [ أنا ] . وزن <= في ) {
com.curWeight + = وصول [ أنا ] . وزن ;
القيمة النهائية + = وصول [ أنا ] . قيمة ;
}


آخر {
كثافة العمليات يبقى = في - com.curWeight ;
القيمة النهائية + = وصول [ أنا ] . قيمة
* ( ( مزدوج ) يبقى
/ وصول [ أنا ] . وزن ) ;

استراحة ;
}
}

يعود القيمة النهائية ;


}

كثافة العمليات في = 60 ;


كائن آر [ ] = { { 100 , عشرين } ,
{ 380 , 40 } ,
{ 140 , 10 } ,
{ 180 , 30 } } ;

كثافة العمليات مقاس = حجم ( وصول ) / حجم ( وصول [ 0 ] ) ;


cout << 'الحد الأقصى للربح ='

<< FractionalKnapsack ( آر، الخامس، الحجم ) ;

يعود 0 ;

}

في هذا الكود، يتم تعريف هيكل الكائن الذي يحتوي على قيم الوزن والربح المخزنة فيه. يتم استخدام bool cmp() لإجراء مقارنة بين كائنين على أساس نسبة وزن وقيمة كائنين. يتم ترتيب المصفوفة تنازليًا وتستمر القيمة في الإضافة حتى تصل إلى الحد الأقصى. فإذا كانت القيمة الحالية مسموحة وفي حدود الحد تضاف، وإلا تضاف نسبتها المخفضة إلى الكيس. يتم إدخال حجم الوزن والقيمة في الكود الرئيسي ويتم طباعة الحد الأقصى للربح على الإخراج.





الحد الأقصى للربح الذي تم تخزينه في الوجبة الخفيفة هو 580.



خاتمة

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