الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن خوارزمية تبحث عن أفضل combination من بين العديد من الإختيارات

بدأه عمر علي مختار في 10 ديسمبر 2011 · 6 رد · 918 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته ..

في إحدى البرامج واجهتني مشكلة يمكن تبسيطها في الآتي ..

لدينا عدد N من المجموعات .. كل مجموعة بها عدد M من العناصر .. كل عنصر له 3 أرقام a و b و c .. المطلوب هو أن أختار عنصر واحد من كل مجموعة بحيث يكون مجموع الرقم a لكل العناصر المختارة أقل من X و مجموع b لكل العناصر المختارة أقل من Y و مجموع c لكل العناصر المختارة أقل من Z .. بالطبع سيكون لدينا الكثير من الإحتمالات و التوافيق التي توافق هذا الشرط .. و التوفيق الأفضل هو الذي إذا قمنا بالتعويض في F(A,B,C) و التي هي هذه المعادلة : h*A+i*B+ j*C نحصل على أقل قيمة .. حيث أن A هي مجموع الـ a لكل العناصر و هكذا B و C ..

مثال :

المجموعة الأولى :

عنصر 1 :

a = 7 , b = 5 , c = 11

عنصر 2 :

a = 2 , b = 8 , c = 12

المجموعة الثانية :

عنصر 1 :

a = 3 , b = 5 , c = 22

عنصر 2 :

a = 9 , b = 1 , c = 44

و بقية المدخلات :

X = 15

Y = 14

Z = 50

h = 0.4

i = 0.3

j = 0.3

هنا كل التوافيق ستكون :

عنصر 1 من مجموعة 1 مع عنصر 1 من مجموعة 2:

مجموع الـ A سيكون 10 .. مجموع الـ B سيكون 10 و مجموع الـ C سيكون 33

و الحل مقبول حيث أن A أقل من X و B أقل من Y و C أقل من Z ..

F(A,B,C) = 10*0.4 + 10*0.3 + 33*0.3 = 16.9

عنصر 2 من مجموعة 1 مع عنصر 1 من مجموعة 2

مجموع الـ A سيكون 5 .. مجموع الـ B سيكون 13 و مجموع الـ C سيكون 34

و الحل مقبول أيضاً ..

F(A,B,C) = 5*0.4 + 13*0.3 + 34*0.3 = 11.55

و هنا هذا الحل أفضل من الحل السابق لأن قيمة الـ F أقل

عنصر 1 من مجموعة 1 مع عنصر 2 من مجموعة 2

مجموع الـ A سيكون 16 .. مجموع الـ B سيكون 6 و مجموع الـ C سيكون 55

و هنا الحل غير مقبول حيث أن C أكبر من Z و A أكبر من X ..

عنصر 2 من مجموعة 1 مع عنصر 2 من مجموعة 2

مجموع الـ A سيكون 11 .. مجموع الـ B سيكون 9 و مجموع الـ C سيكون 56

و هذا الحل غير مقبول أيضاً بسبب قيمة الـ C ..

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

قمت بحل هذه المسألة بطريقة أشبه إلى حدٍ ما بالـ Brute Force .. تصل في أسوأ الحالات إلى O(M^N) .. هل لديكم من أفكار أخرى لحل هذه المشكلة ؟؟

و جزاكم الله خيراً ..

تم تعديل هذه المشاركة بواسطة عمر علي مختار في 10 ديسمبر 2011 في 22:16

#2

ﻷكون متأكد فقط هل تقصد أن وقت التشغيل هو M مرفوعة ﻷس N؟ أم M مضروبة فى N؟

#3

أقصد M أس N .. بالطبع ستكون M*N هي الحالة المثالية التي أتمنى أن أصل إليها أو أقترب منها ..

#4

بصراحة لا توجد فى رأسى حالياً أفكار جديدة عدا بعض التحسينات الممكنة مثل:

1. ترتب كل من مكونات العناصر (a, b, c) تنازليا أو تصاعديا ((3N O(MLogM), و كل مكون يجب أن يرفق معه مؤشر ليدل على العنصر الذى ينتمى إليه. أو تقوم بترتيب كل المجموعات مرة بناءاً على a و مرة أخرى بناءاً على b و أخرى بناءاً على c.

2. إذا كان أى عنصر به a أو b أو c أكبر من X أو Y أو Z, بالترتيب, إستبعده من البحث نهائيا هو و كل العناصر التى تليه (بإفتراض أن اﻷرقام كلها موجبة أو تساوى صفر).

3. فى اللوب الخاص بالتجميع إذا تعدى أى من A أو B أو C كلاً من X أو Y أو Z ,بالترتيب , يمكن أن تخرج من اللوب ولا تجرب العناصر التالية (لأن العناصر مرتبة).

#5
Blueteeth كتب:

بصراحة لا توجد فى رأسى حالياً أفكار جديدة عدا بعض التحسينات الممكنة مثل:

1. ترتب كل من مكونات العناصر (a, b, c) تنازليا أو تصاعديا ((3N O(MLogM), و كل مكون يجب أن يرفق معه مؤشر ليدل على العنصر الذى ينتمى إليه. أو تقوم بترتيب كل المجموعات مرة بناءاً على a و مرة أخرى بناءاً على b و أخرى بناءاً على c.

2. إذا كان أى عنصر به a أو b أو c أكبر من X أو Y أو Z, بالترتيب, إستبعده من البحث نهائيا هو و كل العناصر التى تليه (بإفتراض أن اﻷرقام كلها موجبة أو تساوى صفر).

3. فى اللوب الخاص بالتجميع إذا تعدى أى من A أو B أو C كلاً من X أو Y أو Z ,بالترتيب , يمكن أن تخرج من اللوب ولا تجرب العناصر التالية (لأن العناصر مرتبة).

جزاك الله خيراً ..

حل جيد .. يقلل من عدد الإحتمالات التي نمر عليها في الكثير من الحالات .. لكن في أسوأ الإحتمالات حيث تكون قيمة X و Y و Z كبيرة جداً لا نجد إلا أن نمر على كل الإحتمالات لإستخراج أقل F(A,B,C) ..

#6

السلام عليكم ورحمة الله وبركاته

كان يبدو للوهلة الاولى ان المسألة تحتاج الى المرور على كل العناصر لكل المجموعات ولكن على ما اعتقد انه من الممكن الاستغناء عن ذلك المرور على جميع العناصر

والاستفادة من الشروط التى تم وضعها وذلك كالأتى :-

اولا : بما ان المطلوب هو ايجاد اقل قيمة للدالة المعطاة وذلك من خلال مجاميع a, b, c فيجب اختيار اقل قيم لـ a ثم اختبار الشرط وهو ان يكون محاميع a والذى يساوى A يجب ان يكون اقل من X ان تم التحقق من تلك الشروط فى اولا يتم الانتقال إلى ثانيا وان لم يتم تحقق ذلك الشرط فمعنى ذلك لا يوجد حلول ولا داعى للاستمرار

ثانيا يتم اختيار نفس العناصر التى تم اختيارها فى اولا والتحقق من قيم b بحيث يكون مجاميع قيم b هو B ويجب ان يكون اقل من Y ان تحقق الشرط يتم الانتقال إلى ثالثا وان لم يتحقق يتم الرجوع إلى اولا واستبدال قيم العناصر بقيم اخرى بحيث يكون المجموع مرتب ترتيب تصاعدى ( وذلك من خلال التوافيق)

ثالثا : يتم اختيار نفس العناصر التى تم اختيارها فى ثانيا والتحقق من قيم c بحيث يكون مجاميع قيم c هو C ويجب ان يكون اقل من Z ان تحقق الشرط بذلك يتم الحصول على افضل حل وان لم يتحقق يتم الرجوع إلى اولا واستبدال قيم العناصر بقيم اخرى بحيث يكون المجموع مرتب ترتيب تصاعدى ( وذلك من خلال التوافيق)

اعتقد ان الصورة يمكن ان توضح ذلك

post-108462-8980_thumb.jpg

تم تعديل هذه المشاركة بواسطة fmgret12 في 18 ديسمبر 2011 في 22:18

#7

السلام عليكم ورحمة الله وبركاته

عذرا ما قمت بكتابته ليس صحيح تمام

لذلك لا يمكن اعتبارة خوارزمية صحيحة ولا يمكن التصريح بذلك حتى لا تحدث اخطاء

حيث كنت اتوقع رد يوضح ذلك

وشكرا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…