طلب إيجاد خوارزمية لمسألتي

  • MouhcineFD

السلام عليكم

واجهتني مشكلة في إيجاد حل لهده المسألة

والله قضيت أكتر من أسبوعين وأن أحاول حلها ولم أفلح في ذالك

المرجو المساعدة جزاكم الله خيرا

المسألة:A جدول مكون من n سطر m عمود

كل سطر وكل عمود يحتوي على x خانة مملوءة

x>=2

خانة مملوءة تمثل 1

خانة فارغة تمثل 0

المطلوب

تغيير قيمة بعض الخانات من الواحد الى الصفر وليس من الصفر الى الواحد لتحقيق الشرط الأول مع تغيير أقل عدد ممكن من الخانات(الشرط الثاني)

الشرط الأول

يجب أن يكون عدد الخانات المملوءة في كل سطر وعمود عددا زوجيا أو بمعنى آخر أن يكون المجموع في كل سطر وعمود قيمة زوجية وممكن أن يكون الصفر

يعني سيصبح x=2k / k>=0

الشرط الثاني

يجب أن تغير أقل عدد ممكن من الخانات أو بمعنى آخر أن تحصل على أكبر مجموع للخانات التي تمثل واحد في الجدول

مثال

لدينا هدا الجدول

نلاحظ أن العمود الثاني والثالث يحتويان على عدد فردي

الحل هو

مجموع الخانات التي تحتوي على القيمة واحد يساوي 10

يمكن أن يكون أكثر من حل

وهدا حل خاطئ لأنه يحقق الشرط الأول فقط يعني تم تغيير عدد من الخانات أكثر من الازم أي مجموع الخانات التي تحتوي على القيمة واحد يساوي 6 و6 ليست أكبر قيمة ممكن أن تحصل عليها (الحل الصحيح هو دو القيمة 10)

ملاحظة

في بعض الحالات يمكن أن يكون الحل الوحيد هو الجدول فارغ


التعليق السابق

ما فهمت من شرحك

هو أنك ستأخد المصفوفة الأصلية

في الأول ستجرب تغيير قيمة خانة واحدة وستجرب جميع الاحتمالات

ادا تم الحل توقف فهذا افضل حل

ادا لم تجد الحل تجرب تغيير خانتان ثم تجرب جميع الاحتمالات

وهكذا ...

سأضيف مرحلتين في تطوير الحل الكلاسيكي

أولا

أقل عدد ممكن أن تغيره من الخانات للتحصل على أفضل حل

هو العدد الأكبر بين(عدد الأسطر التي تحتوي على مجموع فردي و عدد الأعمدة التي تحتوي على مجموع فردي)

مثال

0111001

1000111

0001110

1111110

هنا لدينا سطر واحد يحتوي على مجموع فردي ولدينا ثلات اعمدة تحتوي على مجموع فردي

ادن لا يمكن ايجاد حل بتغيير عدد أقل من ثلات خانات

ومنه فالتطوير هو أن نبدأ بسلسلة تحتوي على ثلات بتات من الأول, فلاداعي لتجريب بت واحد وبتان لأنه لا يوجد حل

التطوير الثاني

كما قلت في الرد السابق

اذا كان أحدهما شاقولي و الثاني عامودي

يكون الحل بتغيير عدد فردي من الخانات

اذا كانا الاثنين أسطر أو اعمدة

يكون الحل بتغيير عدد زوجي من الخانات

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

فالسلسلة الموالية تكون بإضافة 2 بث في كل مرحلة موالية

يعني لو بدأت ب

0000000000000011

وأنهيت جميع الاحتمالات ولم تجد حل

فمباشرة انتقل الى

0000000000001111

ثم الى

0000000000111111

و بالمعدل يكون تم تخفيض حجم العمل بنسبة ***111% عن الحالة الكالسيكية

***صراحة لم أعرف كيف حصلت أنت على تلك النسب ؟؟؟

مرة أخرى سأقول أن هده الطريقة هي أول شيئ فكرة فيه لحل المشكلة بدون مراحل التطوير الذي ذكرت لأنني لم أكن قد استنتجها بعد

المشكلة هي أن متوسط الجداول التي املك تحتوي على 120 خانة

ومتوسط أقل عدد لازم تغييره من الخانات هو 24

لك أن تحسب عدد الاحتمالات أكبر من 25^10

kikoknkn أضف ردا

اسئلة على السريع

هل حجم المصفوفة عندك 4*4 ?

أم هي مثلا 12*12 ؟

هل هي دائما مصفوفة مربعة مثلا 6*8؟

هل دائما ابعاد المصفوفة زوجي أم يمكن أن يكون فردي مثل 7*7 ؟

هل البرنامج الذي ستكتبه سيكون مخصص لحل مصفوفة ثابتة الابعاد أم أنه كل مرة سيتم ادخال أبعاد مختلفة

سأكتب توضيح عن فكرتي برد أخر

كتبت في أول الموضوع

A جدول مكون من n سطر m عمود

n>=1 و m>=1

يمكن أن تكون المصفوفة 4x4 5x3 2x1 15x20

ولدي العديد من الجداول بمثل هده الابعاد 35x16 23x17

هل البرنامج الذي ستكتبه سيكون مخصص لحل مصفوفة ثابتة الابعاد أم أنه كل مرة سيتم ادخال أبعاد مختلفة

لا يهم لأنني لا أريد برنامج أو كود

ما أريده هو فكرة عن طريقة حل المسألة يمكنك اعتبار الأبعاد ثابتة m و n

سأكتب توضيح عن فكرتي برد أخر

إدا كنت تتحدث عن فكرة تمثيل المصفوفة بسلسلة من البتات

فقد فهمت الفكرة وهي صحيحة لكن غير عملية يمكن تطبيقها على المصفوفات الصغيرة فقط

الان وضحت الصورة ....

حجم المصفوفة أكبر من رقعة الشطرنج . مممم

يمكنني ابداء بعض الملاحظات لعلها تساعدك ...

مثلا

يمكن البحث عن الحل بشكل معاكس .... وهو بناء مصفوفة جديدة من الصفر عوضا عن حزف واحدات !!!!


فكرت ايضا كيف تستطيع بناء مصفوفة صحيحة

فوجدت الشروط التالية :

أن المصفوفة تكون صحيحة اذا اضفنا الواحدات بمضاعفات عدد 4 و موزعة بشكل مستطيل " أو مربع "

واذا ظهر صفر في احد الزوايا يتم تعويضه بظهور ثلاث واحدات عندها نستخدم 6 واحدات

في أول مصفوفة محلولة أنت وضعتها ظهر مستطيل كامل و مستطيل بزاوية صفرية و عدد لواحدات


محاولة لترتيب الفكرة

مثلا نبدأ بلبحث على اكبر مستطيل يحقق الشرط

حسب مثالك

1010

1111

1111

1100

أكبر مستطيل

x01x

1111

1111

x10x

غير محقق

نبحث عن مستطيل اصغر

x01z

1111

x11x

1100

هنا وجدنا اكبر مسطيل له زاوية صفرية

ثم يتم تثبيت الواحدات " سوف اكتبها كرقم 2

2020

1122

2112

1100

نتابع البحث

2020

xx22

2112

xx00

وجدنا مستطيل تم التثبيت ....

حتى لم يعد بالامكان العثور على مستطيلات

مبروك

طبعا تحتاج لدراسة مقدار التثقيل مثلا اخذ مساحة المستطيل و ربما وجود زوايا صفرية تعدل بقيمة المستطيل " تخفيض أو زيادة " فيما لو ظهر احتمالان بنفس المساحة


أنا فقط حاولت توليد بعض الافكار ... ويسعدني معرفت حلك النهائي