لننطلق معاً إلى عالم الخوارزميات الممتع

هنا توجد كل المواضيع المتعلقة بالخوارزميات الرياضية و الحاسوبية

المشرف: Mu_Nizar

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Ammar_N » الجمعة أكتوبر 10, 2008 9:13 am

طبعاً كل الإجابات على السؤال الأول كانت صحيحة تقريباً وبدي أشكر كل من شارك :ism:

وإن شاء الله تكونوا عم تستفيدوا

السؤال الثاني:

لتكن لدينا المسألة التالية:

لنفرض أن لدينا مجموعة من الأرقام كلها أصغر من 100 مثلاُ: 4 - 44 - 35- 85 - 32- 93 - 1

نريد إيجاد رقمين من هذه الأرقام بحيث يكون مجموعهما رقماً معيناً مثلاً لو كان المطلوب إيجاد رقمين مجموعهما 67 من مجموعة الأرقام السابقة سيكون الجواب هو 32 و 35

السؤال:

هل يوجد أكثر من خوارزمية لحل المسألة السابقة؟ أوجد أفضل خوارزمية لحلها في حال الإجابة بنعم وأوجد الخوارزمية الوحيدة في حال الإجابة بلا.

ولنشوف إبداعاتكم :cool: :iok:
اعمل لدنياك كأنك تعيش أبدا، واعمل لآخرتك كأنك تموت غدا
Ammar_N
عضو جديد
عضو جديد
 
مشاركات: 220
اشترك في: الجمعة مايو 09, 2008 5:41 pm
مكان: سوريا - دمشق
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: معيد
الاختصاص: ذكاء صنعي

مشاركة غير مقروءةبواسطة Rmis » الجمعة أكتوبر 10, 2008 12:54 pm

يمكن في أكتر من خوارزمية و أنا فكرت بطريقتين
الأولى أنو جرب مجموع كل رقمين بين الأرقام و اختبار الناتج بس هي الطريقة طويلة و فيها هدر.. أما الطريقة التانية فممكن تكون أنو إذا كانت هي الأرقام موجودة عندي بمصفوفة مثلاً أنا بمشي على الأرقام بالمصفوفة، و لما أوصل لرقم أصغر من المجموع يللي عندي بطرحه من المجموع و بشوف الناتج يللي طلع معي إذا موجود بالمصفوفة ولا لأ، و هون في شغلة مهمة أنو أنا قبل ما أبدأ بهي العمليات كلها ، الأحسن أنو نرتب المصفوفة مشان أختصر وقت بعمليات البحث
صورة العضو الشخصية
Rmis
عضو جديد
عضو جديد
 
مشاركات: 149
اشترك في: الأحد سبتمبر 28, 2008 4:49 pm
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: هندسة برمجيات

مشاركة غير مقروءةبواسطة shashi » الجمعة أكتوبر 10, 2008 1:13 pm

متل ما ذكرت Rmis بس سبقتني :smile:
المسألة الها أكتر من طريقة لحلها
الأولى تجريب كل الحالات الممكنة Brute-Force Algorithm
التانية انو نطرح"في حال كان أكبر " الرقم المطلوب إيجاد مكوناته من كل الأعداد الموجودة معنا والبحث عن النتيجة في كل مرة ضمن باقي الأرقام الموجودة.
وممكن يكون في طريقة تالتة .. التفكير جاري
صورة العضو الشخصية
shashi
عضو فعال
عضو فعال
 
مشاركات: 361
اشترك في: السبت يناير 19, 2008 3:46 pm
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: هندسة برمجيات

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Golden man » الجمعة أكتوبر 10, 2008 4:17 pm

أنا حللت المسألة بهالشكل :iok: :
بما أنو أكبر رقم عندنا هوة 99 فممكن نحصر الثنائيات المكونة للرقم المطلوب, مثلا خلينا ناخد أكبر رقم و يلي هوة 99 فعدد احتمالات الثنائيات المكونة اله هوة 25 احتمال يعني عدد الأرقام يلي ممكن ينتج عنها المطلوب هوة 50 رقم و هيي كالتالي:

CODE: تحديد الكل
                  
99   =   9   9   +   0   0
99   =   8   9   +   1   0
99   =   7   9   +   2   0
99   =   6   9   +   3   0
99   =   5   9   +   4   0
99   =   9   8   +   0   1
99   =   8   8   +   1   1
99   =   7   8   +   2   1
99   =   6   8   +   3   1
99   =   5   8   +   4   1
99   =   9   7   +   0   2
99   =   8   7   +   1   2
99   =   7   7   +   2   2
99   =   6   7   +   3   2
99   =   5   7   +   4   2
99   =   9   6   +   0   3
99   =   8   6   +   1   3
99   =   7   6   +   2   3
99   =   6   6   +   3   3
99   =   5   6   +   4   3
99   =   9   5   +   0   4
99   =   8   5   +   1   4
99   =   7   5   +   2   4
99   =   6   5   +   3   4
99   =   5   5   +   4   4


و بعد ما نولد هالجدول منشوف الأرقام يلي بالمجموعة المعطاة و منحصر الأرقام يلي مشتركة بين الجدول و المجموعة المعطاة و هيك منكون قدرنا نحصل على جميع الحلول الممكنة يلي ممكن تتولد من المجموعة المعطاة :cool: .

هي الخوارزمية تعقيدها N لأنو من أجل كل رقم بالجدول حنحتاج نمشي على المجموعة بحلقة طولها N لنعرف اذا موجود بمجموعة أو لاء و أكبر عدد من الأرقام يلي ممكن يحويها الجدول هوة 50 اذا كان الرقم المطلوب هوة 99, يعني العدد محدود :???: .
لهيك ما بظن أنو ممكن نلاقي تعقيد أفضل لهيك برشحها لتكون أفضل خوارزمية لإيجاد جميع حلول هالمسألة :smile: .

طبعا ممكن نحلها Brute Force :???: بس هيك بصير تعقيدها N² و من أجل مجموعة أرقام طولها 1000000 عنصر فحلها بياخد زمن ضوئي :eek: , طبعا ممكن نعمل شوية optimization باستثناء الأرقام يلي أكبر من الرقم المطلوب, بس بيبقى التعقيد متل ما هوة و ما منستفاد شي :cry: .

ان شا الله يكون الحل صحيح و مفهوم.
Television is NOT real life. In real life people
actually have to leave the coffee shop and go to jobs
صورة العضو الشخصية
Golden man
عضو فعال
عضو فعال
 
مشاركات: 517
اشترك في: السبت أغسطس 02, 2008 6:28 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: ذكاء صنعي

مشاركة غير مقروءةبواسطة Ammar_N » الجمعة أكتوبر 10, 2008 6:34 pm

صار مذكور لحد الآن 3 طرق وكلها صح بس مو أحسن شي لسا في طرق أحسن

وبالنسبة للطريقة الأخيرة حلوة كتير بس بعتقد لساها N*M حيث M هو 50 في حالتنا يعني ما وصلنا لأفضل شي :wink2:

بانتظار مشاركات جديدة وحلول جديدة
اعمل لدنياك كأنك تعيش أبدا، واعمل لآخرتك كأنك تموت غدا
Ammar_N
عضو جديد
عضو جديد
 
مشاركات: 220
اشترك في: الجمعة مايو 09, 2008 5:41 pm
مكان: سوريا - دمشق
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: معيد
الاختصاص: ذكاء صنعي

مشاركة غير مقروءةبواسطة farah_online » الجمعة أكتوبر 10, 2008 10:05 pm

بعتقد انو الأحسن هية طريقة Rmis ...
و كبنية معطيات مقترحة لهيك خوارزمية بقترح الsingle linked list (مرتبة أصلاً عمد الإدخال )يمكن تكون أفضل من النسق ....
بس طالما لسا في أحسن ... جاري البحث .... :imb:
و استشهد السلام في وطن السلام .. !!
farah_online
عضو نشيط جدا
عضو نشيط جدا
 
مشاركات: 2871
اشترك في: الثلاثاء يناير 29, 2008 9:45 am
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Executioner » الجمعة أكتوبر 10, 2008 10:58 pm

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

بصراحة الموضوع جميل للغاية، والأروع من هذا صاحب الموضوع، على كلٍ طريقة حلي

كانت على الشكل التالي:

1) أن أنشئ مصفوفة بوليانية ثنائية البعد (مؤشرات)، عدد أسطرها يمثل عدد

إحتمالات تكون هذا العدد المعطى، حيث أنه لا أظن أن العدد 50 يكفي لأن العدد

المطلوب البحث عن عددين مجموعهما يساويانه يمكن أن يكون أكبر من 100،

والبعد الآخر هو 2 العددين المشكلين للعدد المعطى.

2) تعبر المصفوفة السابقة عن وجود هذه الأعداد، فعند وجود العدد ننسب true

فقط، والمهم بمكان أن ذلك سيكون بحلقة واحدة، حيث سنقرأ عنصر عنصر ونضع في

المكان المناسب القيمة true على أنه موجود.

3) الفكرة هنا في كيفية تعبئة هذه المصفوفة: ويكون ذلك حسب مايلي:

أ- إذا كان العنصر أصغر من نصف العدد المطلوب، يضع في الطرف الثاني او

العمود الثاني في المصفوفة، وعندها قيمة هذا العنصر هي index.

ب- إذا كان العنصر أكبر من نصف العدد المطلوب، يضع في الطرف الأول أو العمود

الأول في المصفوفة، وعندها قيمة هذا العنصر مطروحا منه نصف قيمة العدد

المطلوب تمثل أو تعبر عن index.

4) الفكرة الأخيرة وهي الأهم أنه عند التعبئة بقيم true لأي عمود كان، نختبر

العمود الآخر إذا كان true من نفس الموقع، ففي حال كان موجوداً عندها نكون قد

علمنا بأن العنصر الحالي الذي لدينا هو حل المسألة المطلوبة كون العنصر

المقابل له موجود.

أظن أن هذه الطريقة في أسوأ حالاتها سيكون تعقيدها n، او إن صح التعبير n *

m حيث m تمثل عدد الإختبارات التي سأقوم بها في كل مرة أي 2، وبالتالي 2n

تساوي تقريبا إلى n.

أرجو أن يكون شرحي مفهوماً وحلي صحيحاً.

آآآآآآآآآه تعبت من الكتابة.
Executioner
عضو جديد
عضو جديد
 
مشاركات: 163
اشترك في: الثلاثاء أغسطس 12, 2008 7:08 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Golden man » الجمعة أكتوبر 10, 2008 10:58 pm

بعتقد انو الأحسن هية طريقة Rmis ...


بس طريقتها brute force كمان, معمللها شوية تحسين يعني تعقيدها لساته من رتبة N².

بس أستاذ عمار شو التعقيد المطلوب؟؟؟ يعني في خوارزمية تعقيدها N بدون أي ثابت؟؟؟؟


سبحان الله كتبت الرد بنفس الوقت انا و السيد Executioner على كل حال هاد بعد التعديل...

استاذ Executioner ما فهمت عليك بفكرة أنو احتمالات توليد الأرقام أكبر من 100.... و ياريت توضحلي بمثال مو موجود بالحالات يلي مذكورة لأنو لقيت أنو الاحتمالات البقية هيي عبارة عن تكرار لهدول الحالات. على كل حال انا بانتظار توضيحك.

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

و شكرا على ابداعك. :smile:
Television is NOT real life. In real life people
actually have to leave the coffee shop and go to jobs
صورة العضو الشخصية
Golden man
عضو فعال
عضو فعال
 
مشاركات: 517
اشترك في: السبت أغسطس 02, 2008 6:28 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Executioner » السبت أكتوبر 11, 2008 7:16 am

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

فكرة حل ثانية :cool: تعتمد على الأولى ألا وهي:

باستخدام نفس المصفوفة البوليانية السابقة، وبعد تعبئة القيم فقط، دون اختبار قيمة العمود الآخر أنها الأخرى أيضاً true.

بعد ذلك كله، ندخل في حلقة ثانية تمر على كل حالة من الحالات التي تشكل العدد المطلوب والممثلة بالمصفوفة البوليانية السابقة، ونقوم باختبار كلا العمودين معاً ففي حال كانا معاً true هذا يعني أنهما الرقمان المنشودان، حيث أن index المستخدم يعبر عن الرقم الأصغر.

وبالتالي يكون التعقيد الجديد هنا هو n + n/2 (بغض النظر عن الواحد) أي n * 1.5 أقل من السابق، وتقريباً n :iok: .

سؤال:

بالنسبة لتعقيد الخوارزمية التي طرحها الأخ Golden man أليس التعقيد هو n * n/2 ???

Golden man بفكر بهاد الشي، إذا بالفعل منفهم.

أما بالنسبة لقصدي: كنت أقصد في حال جاءك رقم وليكن 125، حالات تشكيل هذا الرقم هي 63 وليس 50، حيث في حال كان ضمن مصفوفة الأعداد رقمين على سبيل المثال 90 و 35 لازم يمشي الحال، وبالتالي 50 ليست الحد الأقصى لعدد احتمالات تشكل هذا العدد، لأن العدد المعطى لم يحدد في نص السؤال أن أكبر قيمة له هي 99 أم لا، لذلك علينا الأخذ بالاعتبار أنه قد يكون فوق 100.
Executioner
عضو جديد
عضو جديد
 
مشاركات: 163
اشترك في: الثلاثاء أغسطس 12, 2008 7:08 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Ammar_N » السبت أكتوبر 11, 2008 10:26 am

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

بصراحة الموضوع جميل للغاية، والأروع من هذا صاحب الموضوع، على كلٍ طريقة حلي

كانت على الشكل التالي:

1) أن أنشئ مصفوفة بوليانية ثنائية البعد (مؤشرات)، عدد أسطرها يمثل عدد

إحتمالات تكون هذا العدد المعطى، حيث أنه لا أظن أن العدد 50 يكفي لأن العدد

المطلوب البحث عن عددين مجموعهما يساويانه يمكن أن يكون أكبر من 100،

والبعد الآخر هو 2 العددين المشكلين للعدد المعطى.

2) تعبر المصفوفة السابقة عن وجود هذه الأعداد، فعند وجود العدد ننسب true

فقط، والمهم بمكان أن ذلك سيكون بحلقة واحدة، حيث سنقرأ عنصر عنصر ونضع في

المكان المناسب القيمة true على أنه موجود.

3) الفكرة هنا في كيفية تعبئة هذه المصفوفة: ويكون ذلك حسب مايلي:

أ- إذا كان العنصر أصغر من نصف العدد المطلوب، يضع في الطرف الثاني او

العمود الثاني في المصفوفة، وعندها قيمة هذا العنصر هي index.

ب- إذا كان العنصر أكبر من نصف العدد المطلوب، يضع في الطرف الأول أو العمود

الأول في المصفوفة، وعندها قيمة هذا العنصر مطروحا منه نصف قيمة العدد

المطلوب تمثل أو تعبر عن index.

4) الفكرة الأخيرة وهي الأهم أنه عند التعبئة بقيم true لأي عمود كان، نختبر

العمود الآخر إذا كان true من نفس الموقع، ففي حال كان موجوداً عندها نكون قد

علمنا بأن العنصر الحالي الذي لدينا هو حل المسألة المطلوبة كون العنصر

المقابل له موجود.

أظن أن هذه الطريقة في أسوأ حالاتها سيكون تعقيدها n، او إن صح التعبير n *

m حيث m تمثل عدد الإختبارات التي سأقوم بها في كل مرة أي 2، وبالتالي 2n

تساوي تقريبا إلى n.

أرجو أن يكون شرحي مفهوماً وحلي :iok: :iok: صحيحاً.

آآآآآآآآآه تعبت من الكتابة.


هذه الطريقة صحيحة وهي الأسرع :iok: :iok: ولكن ليست الطريقة الوحيدة الأسرع , ما زال هناك طريقة أبسط شوي بس نفس السرعة.

بالنسبة لطريقة golden man لا هي مو n * n/2 هي n * m لأنو n هو عدد الأعداد و m هو أكبر عدد والاثنين مختلفين عن بعض

سينتهي وقت الإجابة على السؤال الحالي اليوم مساءً لإتاحة الفرصة لمشاركات أخرى ومن ثم ننتقل للسؤال التالي.

بانتظاركم
اعمل لدنياك كأنك تعيش أبدا، واعمل لآخرتك كأنك تموت غدا
Ammar_N
عضو جديد
عضو جديد
 
مشاركات: 220
اشترك في: الجمعة مايو 09, 2008 5:41 pm
مكان: سوريا - دمشق
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: معيد
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة shashi » السبت أكتوبر 11, 2008 1:28 pm

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

بصراحة الموضوع جميل للغاية، والأروع من هذا صاحب الموضوع، على كلٍ طريقة حلي

كانت على الشكل التالي:

1) أن أنشئ مصفوفة بوليانية ثنائية البعد (مؤشرات)، عدد أسطرها يمثل عدد

إحتمالات تكون هذا العدد المعطى، حيث أنه لا أظن أن العدد 50 يكفي لأن العدد

المطلوب البحث عن عددين مجموعهما يساويانه يمكن أن يكون أكبر من 100،

والبعد الآخر هو 2 العددين المشكلين للعدد المعطى.

2) تعبر المصفوفة السابقة عن وجود هذه الأعداد، فعند وجود العدد ننسب true

فقط، والمهم بمكان أن ذلك سيكون بحلقة واحدة، حيث سنقرأ عنصر عنصر ونضع في

المكان المناسب القيمة true على أنه موجود.

3) الفكرة هنا في كيفية تعبئة هذه المصفوفة: ويكون ذلك حسب مايلي:

أ- إذا كان العنصر أصغر من نصف العدد المطلوب، يضع في الطرف الثاني او

العمود الثاني في المصفوفة، وعندها قيمة هذا العنصر هي index.

ب- إذا كان العنصر أكبر من نصف العدد المطلوب، يضع في الطرف الأول أو العمود

الأول في المصفوفة، وعندها قيمة هذا العنصر مطروحا منه نصف قيمة العدد

المطلوب تمثل أو تعبر عن index.

4) الفكرة الأخيرة وهي الأهم أنه عند التعبئة بقيم true لأي عمود كان، نختبر

العمود الآخر إذا كان true من نفس الموقع، ففي حال كان موجوداً عندها نكون قد

علمنا بأن العنصر الحالي الذي لدينا هو حل المسألة المطلوبة كون العنصر

المقابل له موجود.

أظن أن هذه الطريقة في أسوأ حالاتها سيكون تعقيدها n، او إن صح التعبير n *

m حيث m تمثل عدد الإختبارات التي سأقوم بها في كل مرة أي 2، وبالتالي 2n

تساوي تقريبا إلى n.

أرجو أن يكون شرحي مفهوماً وحلي صحيحاً.

آآآآآآآآآه تعبت من الكتابة.


بس عندي كم سؤال على هالطريقة لأنو ما كتير فهمتها :
1-" مصفوفة بوليانية ثنائية البعد (مؤشرات)" شلون مصفوفة ثنائية + مؤشرات؟
2-كيف سيتم حساب احتمالات تكون العدد المعطى؟
أ- إذا كان العنصر أصغر من نصف العدد المطلوب، يضع في الطرف الثاني او

العمود الثاني في المصفوفة، وعندها قيمة هذا العنصر هي index.

بس ما فهمت شلون تمت هذه العملية؟؟؟!!

وسؤال مو على الخوارزمية السابقة نحنا وقت نكتب خوارزمية بيهمنا أكتر أنو نهتم
ببننى المعطيات المستخدمة "الحجم اللي ممكن أنها تحجزه" ولا بعدد العمليات المنفذة؟يعني أي منهما بياخد أهمية أكتر؟
صورة العضو الشخصية
shashi
عضو فعال
عضو فعال
 
مشاركات: 361
اشترك في: السبت يناير 19, 2008 3:46 pm
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: هندسة برمجيات

Re: Re:

مشاركة غير مقروءةبواسطة Mu_Nizar » السبت أكتوبر 11, 2008 2:44 pm

Ammar_N كتب:
Rmis كتب:أنا بتوقع نفس فكرة الطرح بس كما يلي: منضل عم نطرح المقسوم عليه من المقسوم لحتى نوصل لعدد هو أصغر من المقسوم عليه و بالتالي بيكون هادا هو باقي القسمة، و لهون منكون حصلنا على القسم الصحيح من الناتج النهائي.. بعدين منرد منطبق خوارزمية القسمة بالطرح على باقي القسمة بعد ضربه بـ 10 (يعني طريقة القسمة اليدوية يللي منعرفها من زمان) و بفرض الناتج هي القسمة هو x مثلاً ،و رد زاد معنا باقي منضل عم نقسم و نضيف الناتج لـ x بعد ضربه بـ10 ،و بتضل هالعمليات عم تتكرر لحتى نوصل لباقي يكون صفر و بيكون انتهى الجزء يللي بعد الفاصلة بالناتج الكلي.. يعني بتوقع أنو في عودية بالموضوع


طبعاً الخوارزمية صحيحة وهذا أحلى مثال على الخوارزمية حتى الآن :iok:


عذرا و لو أنو تأخرت..... :imb: :imb: :imb: بس ما قدرت مبارح فوت عل النت هي الخوارزمية
$تصفير القيمة الابتدائية للعداد
$طالما كان كان المقسوم أكبر من القاسم كرر
$ | زد العداد واحد
$ | إنقاص مقدار المقسوم عليه من المقسوم
$ (* يدخل إلى هذه الحلقة عندما يكون االمقسوم أكبر مالمقسوم عليه أما الحالة التي سيكون فيها المقومعليه أكبر من القاسم فلن يدخل هذه الحلقة و سينتقل بشكل تلقائي إلى احلقة التالية.....و ستكون قيمة العدادا عند النهاية تساوي إلى القسم الصحيح من الجواب*)
$إذا كانت قيمة المقسوم أصبحت(أي الجواب سيكون فقط عدد صحيح بدون فواصل) أو كانت بالأصل تساوي إلى الصفر إخراج قيمة العداد (عدد الدورات أو الصفر)
$وإلا الخرج يساوي قيمة العداد + "."



#تهيئة العداد
#طالما كان كان المقسوم لا يساوي الصفر (لم نصل لنهاية القسمة)و لم يتجاوز التكرار ثمان مرات (على اساس أننا عم نشتغل على 8 مراتب) كرر
# | المقسوم+ القيمة المطلقة للمقسوم (لانو من الحلقة السابقة ثد يخرج المقسوم و قيمته سالبة )مضروبا بعشرة (لإزاحة الفاصلة مرتبة)
# | الاحتافظ بنسخة من قيمة المقسوم (لانه و على الرغم من أننا ضربنا المقسوم بعشرة و تم إزاحة الفاصلة مرتبة لليمين فقد لا يمكن أن تتم الخطوة التالية فلا نضيع قيمة المقسوم ((حيث هنا نضيف مرتبة تساوي الصفر للناتج))
# |تهيئة عداد
# |طالما كان كان المقسوم أكبر من القاسم كرر
# || زد العداد واحد
# || إنقاص مقدار المقسوم عليه من المقسوم
# |إذا لم يدخل للحلقة السابقة
# |||أضف منزلة تساوي الصفر للجواب
# |||ارجع القيمة التي كنا قد نسخنا فيها قيمة المقسوم إلى المقسوم

النتيجة النهائية = تركيب نتيجة $ القسم الصحيح و # القسم التالي للفاصلة

=================
حتى تتضح الخوارزمية حبذا تطبيق مثال و متابعته مع الخوارزمية بالورقة و القلم


تابع القسمة مرمز بلغة الدلفي:


CODE: تحديد الكل
[Left]Function Divi(dividend,divisor:real;var ability:boolean):string;
 var i,j:integer;    axu:real;
    Begin
       if divisor=0 then
         ability:=false
       else
         begin
           i:=0;   result:='';
           ability:=true;
           while (dividend>=divisor) do
              begin
                  dividend:=dividend-divisor;
                i:=i+1;
             end;
           
           if (dividend=0)then
             begin    (* this is becouse i begins from zero *)
               result:='';
               result:=inttostr(i);
             end
           else
              result:=inttostr(i)+'.';     
           i:=0;
            while(dividend<>0)and(i<=8){eight digits}do
             begin
              j:=0;  i:=i+1;
              dividend:=(abs(dividend))*10;
              axu:=abs(dividend); 
              while(dividend>=divisor)do
                begin
                  j:=j+1;
                  dividend:=dividend-divisor;
                end;
              if(j=0)then
                begin
                   result:=result+'0';
                   dividend:=axu;
                end
              else
                result:=result+inttostr(j);
             end;
           end;
    End;[/Left]


الحالة السالبة تم معالجتها ضمن جسم البرنامج


sorry إذا كنت هيك خبصت ترتيب الأسئلة بس لانو من مبارح كتبتا بس ما قدرت فوت عل النت ......
سؤال بين قوسين للمهندس عما ما بعرف إذا بوافقني الرأي بأنو كتابة الخوارزمية عل الورقة بس غير كافي لتكون صحيحية و لا يتحقق ذلك إلا عندما تتحول إلى كود و تنفذ على الحاسب ............
أنا عم قول هيك لانو بعمري ما كتبت خوارزمية (غلا طبعا الشغلات البسيطة :wink2: )إلا و لما بنقلا للحاسب بيطلع فيا مشاكل ......و بعديــــــــــن بتم تلافي الأخطاء.............لإشو رأيك أخ عمار .........
و شكرا...........
و لح شوف هلأ السؤال يلي طرحتو ...لانو ما قرأتو لسا .....
{لا تحزن إن الله معنا}

يالمحاسن التقدير الإلهي :mrgreen: :ism: عم قول لحالي ليش حارتنا منورة
و إن شاء الله دوما بتبقى منورة :ism:
صورة العضو الشخصية
Mu_Nizar
مشرف منتدى الخوارزميات العام
مشرف منتدى الخوارزميات العام
 
مشاركات: 2465
اشترك في: الاثنين مارس 10, 2008 2:49 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: هندسة برمجيات

مشاركة غير مقروءةبواسطة abd alrahman » السبت أكتوبر 11, 2008 4:34 pm

يالله كل هااااااد راح عليي :evil: :sad:

ححاول إقرأ الموضوع بأسرع وقت مشان كمل معكم :ith:
صورة العضو الشخصية
abd alrahman
عضو جديد
عضو جديد
 
مشاركات: 1
اشترك في: السبت أكتوبر 11, 2008 4:11 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: الإفتراضية السورية
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الثانية

مشاركة غير مقروءةبواسطة انستاسيا » السبت أكتوبر 11, 2008 4:54 pm

:cry: :cry: :cry: على فكرة انا تعقدت ومابتصور ممكن تخطر على بالي هل الطرق لانو اصلا ماقدرت استوعب خوارزمياتكن :cry: :cry:
وبنتمنى من اصحاب هل الافكار الرائعة يوضحولنا قصددهن بمثال :imb:
{**ولسوف يعطيك ربك فترضى **}
صورة العضو الشخصية
انستاسيا
عضو نشيط جدا
عضو نشيط جدا
 
مشاركات: 1847
اشترك في: الأربعاء يناير 30, 2008 10:52 pm
مكان: هونولولو
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: شبكات و نظم

مشاركة غير مقروءةبواسطة Golden man » السبت أكتوبر 11, 2008 7:19 pm

طريقة جديدة:

الدخل:
1- المصفوفة يلي بتحوي الأرقام و خلينا نسميها A.
2- الرقم المطلوب ايجاد رقمين مجموعهما يساويه و خلينا نسميه S.
الخرج:
أول رقمين بحققوا المطلوبN1,N2.

بنية المعطيات:
بفرض عندنا مصفوفة أرقام صحيحة اسمها L طولها الكلي هوة 99 لأنو أكبر رقم عندنا هوة 99 و الـ Index تعبها حنسنتعمله ليدل على الرقم الحالي "A[i]" و القيمة المقابلة لكل Index هي رقم ناتج عن المعادلة التالية:
CODE: تحديد الكل
L[A[i]] = S – A[i]


يعني كل عنصر بهالائحة هوة عبارة عن ناتج طرح الرقم الحالي بالمصفوفة من الرقم المطلوب.

طريقة الحل:
حلقة تمر على جميع عناصر المصفوفة, و بتطرحها من ,S و مناخد الناتج و منستعمله كـ Index و منشوف اذا في رقم مقابله أو لاء فإذا كان فاضي منكتب الناتج عند هالـ Index , و اذا كان مو فاضي "يعني في رقم " فبكون الـ Index المقابل لهالرقم هوة المطلوب و بكونوا هالرقمين هنن الرقمين المطلوبين.

الرقمين هنن :
الأول: هوة الرقم يلي نتج عن الطرح بالدورة الحالية.
الثاني: الـ Index المقابل لهالرقم يلي ناتج طرح الرقم المطلوب = ناتج طرح الرقم الأول من الرقم المطلوب.


مثال عملي:
CODE: تحديد الكل
Arr = {4 - 44 - 35- 85 - 32- 93 – 1}
S = 67

بأول دورة حيكون عندنا الرقم هوة 1 و ناتج طرحه من S هوة 66
فمنكتب بالمصفوفة عند الـ Index 1 :
A[1] = 66
ويتاني دورة حيكون الرقم الحالي 93 و ناتح طرحه من S رقم سالب فمنرفض هالرقم و منتابع الدرة التالية.
الدورة التالتة بكون الرقم الحالي 32 و ناتج طرحه من S هوة 35 فنشوف العنصر يلي Index تبعه 35 اذا كان فيه رقم أو لاء و هوة حاليا ما في شي فمنكتب بمحله الرقم يلي نتبج يعني :
A[32] = 35
و بالدورة التالية بكون الرقم يلي عندنا 85 و بما أنو ناتج طرحه سالب منتجاهله.
و بالدورة يلي بعدها بكون الرقم يلي معنا هوة 35 و ناتج طرحه من S هوة 32 فمنشوف اذا في رقم بالـعنصر يلي Index تبعه 32 فمنلاقي أنو في الرقم 35 و هوة الرقم يلي معنا حاليا و بالتالي هدول الرقمين هنن يلي بشكلوا الرقم المطلوب ...... 35 + 32 = 67


انا عدت قراءة حل Executioner و حسيت أنو في نقاط تقارب بحلي و حله بس لسة في شوية غموض فأرجو منك يا أستاذنا أنو تفصل شوي بحلك ولو بمثال.

فكرة حلي بظن قائمة على شي اسمه "Count Sort" بس مالي متأكد اذا كان هيك اسمه اولاء فبتمنى من الأستاذ عمار توضيح هالشي.

يا ترى هي هيي الطريقة يلي قصدتها أستاذ عمار؟؟؟
آخر تعديل بواسطة Golden man في السبت أكتوبر 11, 2008 7:31 pm، عدل 2 مرات
Television is NOT real life. In real life people
actually have to leave the coffee shop and go to jobs
صورة العضو الشخصية
Golden man
عضو فعال
عضو فعال
 
مشاركات: 517
اشترك في: السبت أغسطس 02, 2008 6:28 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: ذكاء صنعي

Re: لننطلق معاً إلى عالم الخوارزميات الممتع

مشاركة غير مقروءةبواسطة Executioner » السبت أكتوبر 11, 2008 8:34 pm

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

على ما يبدو بأن شرحي يخلو من الأمثلة لذلك ربما لم يفهم، على كل حال سأعيد الشرح بشكل آخر.

الدخل:
1) مصفوفة تمثل سلسلة الأعداد السابقة وليكن اسمها a.
2) الرقم المطلوب إيجاد عددين مجموعهما يساويانه وليكن اسمه s.

الخرج:
أول عددين يحققان المطلوب.

بنية المعطيات:
مصفوفة بوليانية ثنائية البعد وليكن اسمها M، ولكون حجمها غير ثابت سأستخدم المؤشرات لأعبر عنها (لأني استخدم لغة ++C)، ستحتوي هذه

المصفوفة على قيم بوليانية تعبر عن وجود أعداد معينة ضمن السلسة، وهذه الأعداد المعينة ستكون إحتمالات تكون العدد s، مثال:

ولتكن سلسلة الأعداد هي كما يلي:

CODE: تحديد الكل
a= {4,2,8,10,15,7,3,25};


والعدد s قيمته هي 17.

المصفوفة لن أعبئها باحتمالات تكون العدد السابق s، وإنما سنقرأها على أنها كذلك، مثال:
CODE: تحديد الكل
[][] // 17 + 0
[][] // 16 + 1
[][] // 15 + 2
[][] // 14 + 3
...
..
etc.

هي مصفوفة ثنائية عدد أسطرها هو عدد إحتمالات تكون العدد s أي يساوي s/2+1 (وفي مثالنا هنا سيكون 9) وبالتالي البعد متغير لذلك

سأضطر إلى إستخدام المؤشرات، لأن بعدها متغير، أما البعد الثاني وهو عدد الأعمدة هو ثابت قيمته 2، أي أن الخانة الأولى تدل على وجود

العدد الأول والخانة الثانية تدل على وجود العدد الثاني.

CODE: تحديد الكل
[f][f] // 17 + 0
[f][f] // 16 + 1
[true][true] // 15 + 2
[f][true] // 14 + 3
[f][true] // 13 + 4
[f][f] // 12 + 5
[f][f] // 11 + 6
[true][true] // 10 + 7
[f][true] // 9 + 8

سندخل ضمن حلقة تعبئ القيم السابقة كالتالي:

إذا كان العنصر أصغر من نصف s عندها نضعه في العمود الثاني، وإذا كان أكبر من نصف s و أصغر من s سيضع في العمود الأول، وإلا إذا كان

أكبر من s فهو مرفوض، وإلا فهو يساويه (ونحل هذه الحالة الخاصة باستخدام متحول بولياني، ولكن للتبسيط سأختصر).

CODE: تحديد الكل
if a[i] < s/2 then
   M[a[i]][0]= true;
else if a[i] > s/2 and a[i] < s then
   M[s- a[i]][1]= true;

للتفصيل:

CODE: تحديد الكل
4 < s/2: M[4][0]= true;
2 < s/2: M[2][0]= true;
8 < s/2: M[8][0]= true;
10 > s/2: M[17-10][1]= true;
15 > s/2: M[17-15][1]= true;
7 < s/2: M[7][0]= true;
3 < s/2: M[3][0]= true;
25 > s/2: ignore.

الآن إنتهينا من خطوة مهمة:

1) بحسب طريقتي الأولى سيكون الكود السابق كالتالي:

CODE: تحديد الكل
if a[i] < s/2 then
begin
   M[a[i]][0]= true;
   if M[s - a[i]][1] = true then
      exit;
end
else if a[i] > s/2 and a[i] < s then
begin
   M[s- a[i]][1]= true;
   if M[a[i]][0] = true then
      exit;
end;

أقصد انه هنا أوجد الحل المنشود وفي حالتنا هذه سيتوقف عند العدد 15 لأنه عندها سيختبر وجود العدد المقابل له وسيجده موجوداً.

2) بحسب الطريقة الأخرى لن أعدل على الكود ما قبل السابق، وإنما سأدخل بحلقة أخرى، سأختبر فيها أن كلا القيمتين true:

CODE: تحديد الكل
if M[i][0] = true and M[i][1] = true then
   This Is The Solution.

سيعطي النتيجة نفسها.

أخ shashi:

إن شاء الله بهذا الشرح أكون قد استطعت توضيح خوارزميتي.

1) بلغة ++C سأحجز عندها مؤشر إلى مؤشر أو بدل ذلك يمكن أن أحجز مصفوفة مؤشرات إلى قيم بوليانية على الشكل التالي:

CODE: تحديد الكل
bool** M;
or
bool* M[2];

2) سيتم حسابه كما سلف أن شرحت.

والسلام عليكم.
Executioner
عضو جديد
عضو جديد
 
مشاركات: 163
اشترك في: الثلاثاء أغسطس 12, 2008 7:08 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الرابعة
الاختصاص: ذكاء صنعي

مشاركة غير مقروءةبواسطة Ammar_N » السبت أكتوبر 11, 2008 9:31 pm

بصراحة أنا فخور جداً بكل من شارك بحلوله ولسانا بالسؤال الثاني وهيك شلون بس لننطلق عن جد :iok: :iok:
بس هذا الشيء يدل على همة عالية عند الشباب هون والله يعطيكم العافية

مثل ما لاحظتوا أنو المسألة المطروحة في إلها كتير حلول وفي بعضها أصلاً ما كان خاطر على بالي بس في طريقة يمكن ما حدا ذكرها بشكل مباشر وهي كالتالي:

نحنا من أحل كل رقم من الأرقام في رقم ثاني لو عرفنا أنو موجود كان طلعوا هنن الحل: مثلاُ لو كان المجموع المطلوب هو 15 وكان في رقم 7 لو كان في طريقة نعرف فوراً أنو في رقم 8 كمان كانوا طلعوا 7 و 8 هنن الحل

وأنا قرأت بأحد الحلول أنو بنرتب الأرقام من شان نلاقي الرقم الثاني بأسرع ما يمكن وكانت هي فكرة كتير حلوة
بس نحنا ببساطة لأنو بنعرف أنو الأرقام أصغر من 100 ففينا نستخدم مصفوفة بوليانية من 100 عنصر مندور على كل الأرقام أول مرة وبنحط قيمة true بعنصر المصفوفة الموافق لكل رقم هلاً صار فينا نعرف إذا الرقم موجود ولا لااء بعملية وحدة بس وهي أنو نروح على عنصر المصفوفة الموافق لهلرقم

بنرجع بندور على الأرقام مرة ثانية ومن أجل كل رقم بنشوف إذا الرقم المكمل إلو موجود عن طريق المصفوفة يلي عبيناها بالمرة الأولى

وهيك بنكون عملنا 2*n عملية بس وبعتقد أنو أسرع شي مو؟

السؤال الثالث:
شفتوا أنو الطرق السابقة بتفرق عن بعضها البعض بعدد العمليات طيب السؤال:
ماذا يعني مصطلح تعقيد الخوارزمية؟ أعط مثالاُ على خوارزمية مع حساب تعقيدها...


بانتظار حلولكم :ism: :ism:
اعمل لدنياك كأنك تعيش أبدا، واعمل لآخرتك كأنك تموت غدا
Ammar_N
عضو جديد
عضو جديد
 
مشاركات: 220
اشترك في: الجمعة مايو 09, 2008 5:41 pm
مكان: سوريا - دمشق
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: معيد
الاختصاص: ذكاء صنعي

مشاركة غير مقروءةبواسطة Ammar_N » الاثنين أكتوبر 13, 2008 5:07 pm

شو باين ما حدا بدو يشارك؟

يعني فكرة التعلم الجماعي مو مناسبة؟ :???: :???:

ولا السؤال صعب؟ :imb: :imb:
اعمل لدنياك كأنك تعيش أبدا، واعمل لآخرتك كأنك تموت غدا
Ammar_N
عضو جديد
عضو جديد
 
مشاركات: 220
اشترك في: الجمعة مايو 09, 2008 5:41 pm
مكان: سوريا - دمشق
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: معيد
الاختصاص: ذكاء صنعي

Re:

مشاركة غير مقروءةبواسطة Mu_Nizar » الاثنين أكتوبر 13, 2008 6:28 pm

يمكن
Ammar_N كتب:شو باين ما حدا بدو يشارك؟

يعني فكرة التعلم الجماعي مو مناسبة؟ :???: :???:

ولا السؤال صعب؟ :imb: :imb:

لح نصب نفسي و حاوب عن الشباب ....................
هنن حابين يشتغلو بمجال حل المسائل................بس لما كان المسؤال مو مسألة .....................و إنما أمر الغالبة بيعرفو أنو اسبوعين زمان و منحكي عنو فما حدا حب يجاوب.........
يمكن بفضلو انو نبقى عم نتناقش بفكرة حل شي مسألة :ism: :ism: يمكن ...............
{لا تحزن إن الله معنا}

يالمحاسن التقدير الإلهي :mrgreen: :ism: عم قول لحالي ليش حارتنا منورة
و إن شاء الله دوما بتبقى منورة :ism:
صورة العضو الشخصية
Mu_Nizar
مشرف منتدى الخوارزميات العام
مشرف منتدى الخوارزميات العام
 
مشاركات: 2465
اشترك في: الاثنين مارس 10, 2008 2:49 pm
الجتس: ذكر
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: هندسة برمجيات

مشاركة غير مقروءةبواسطة N.S » الاثنين أكتوبر 13, 2008 6:53 pm

سلاماً

انا رح جاوب بس جوابي مالي متاكدة منو ........ :imb:

هلا تعقيد الخوارزمية هو عدد العمليات اللي بدو يقوم فيها الحاسب لينفذ مهمة معينة (و بيقلولها الكلفة يمكن) و يرمز الها O او big O

مثلا عملية مسح نسق او شعاع (المسح يعني فحص كل خانة ) اذا كان طول النسق n فالكمبيوتر رح يقوم ب n عملية فحص

طيب مثلا عنا عملية مسح مصفوفة مربعة بعدها n*n اذا بدنا نمسحها عنصر عنصر بالطرق العادية فرح نحط 2 loop كل loop رح تقوم ب n عملية مقارنة بيبقى ناتج المعلية n^2 عملية

او مثلا مثال ابسط عنا اذا الكمبيوتر بدو يقوم بعملية اسناد عادية لمتحول ما a:=1 مثلا هاد يعني انو الكمبيوتر قام بعملية واحدة يعني اصدي انا اي عملية ممكن يقوم فيها الحاسب عمليات رياضية او اسناد او مقارنة

بصراحة انا ما بعرف اذا اجوبتي دقيقة علميا بس هاد المفهوم العام للتعقيد للي انا فهمتو و في تفصيل اكتر من اسوا حالة و افضل حالة و الحالة average بس ما بعرف اذا مطلوب نجاوب على هاد التفصيل و لا لأ.؟؟
Think before you speak , and Read before you think
N.S
عضو فعال
عضو فعال
 
مشاركات: 721
اشترك في: الخميس يونيو 05, 2008 6:27 pm
الجتس: أنثى
الشهادة الثانوية: سورية
الجامعة: جامعة دمشق
الكلية: الهندسة المعلوماتية
المرحلة الدراسية: السنة الخامسة
الاختصاص: ذكاء صنعي

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

العودة إلى منتدى الخوارزميات العام

الموجودون الآن

المستخدمون المتصفحون لهذا المنتدى: لا يوجد أعضاء مسجلين متصلين و 2 زائر/زوار

cron