لتحديد الحل الأمثل عند التنفيذتحتاج مهام البرمجة أحيانا إلى الذهاب من خلال عدد كبير من مجموعات البيانات، الذي يحمل ذاكرة الكمبيوتر الشخصي. وتشمل هذه الطرق، على سبيل المثال، "تقسيم وقهر" طريقة البرمجة. في هذه الحالة، توفر الخوارزمية لفصل المهمة في المهام الفرعية الصغيرة الفردية. يتم استخدام هذه الطريقة فقط في الحالات التي تكون فيها المهام الفرعية الصغيرة مستقلة عن بعضها البعض. من أجل تجنب القيام بعمل غير ضروري في حالة أن المهام الفرعية مترابطة، يتم استخدام طريقة البرمجة الديناميكية التي اقترحها الأمريكي R. بلمان في 1950s.
جوهر الأسلوب
وتتكون البرمجة الديناميكية من تحديد الحل الأمثل لمشكلة n-ديمنزيونال، وتقسيمها إلى n خطوات منفصلة. كل واحد منهم هو مهمة فرعية فيما يتعلق متغير واحد.
والميزة الرئيسية لهذا النهج هيللنظر في أن المطورين يشاركون في مهام التحسين أحادية البعد من المهام الفرعية بدلا من المشكلة ن الأبعاد، ويتم جمع حل المهمة الرئيسية "من أسفل إلى أعلى".
فمن المناسب لاستخدام ديناميكيةالبرمجة في الحالات التي تكون فيها المهام الفرعية مترابطة، أي. لديها وحدات مشتركة. توفر الخوارزمية حلا لكل مهمة من المهام الفرعية مرة واحدة، ويتم حفظ الردود في جدول خاص. هذا يجعل من الممكن عدم حساب الجواب مرة أخرى عند مواجهة مهمة فرعية مماثلة.
مهمة البرمجة الديناميكية يحلمسألة الأمثل. وقد وضعت صاحب هذا الأسلوب من قبل R. المنادي مبدأ المثالية: ما هو الحالة الأولية من كل خطوة من الخطوات والحل هو محدد في هذه الخطوة، كل من التالية لاختيار الأمثل بالنسبة للدولة التي تتلقى النظام في نهاية الخطوة.
الأسلوب يحسن أداء المهام التي يتم حلها من خلال البحث المتغيرات أو العودية.
بناء خوارزمية المشكلة
تفترض البرمجة الديناميكيةبناء خوارزمية للمشاكل التي يتم تقسيم المهمة إلى اثنين أو أكثر من المهام الفرعية بحيث يمكن تشكيل حلها من الحل الأمثل لجميع المهام الفرعية المدرجة فيه. وعلاوة على ذلك، يصبح من الضروري كتابة علاقة تكرار وحساب القيمة المثلى للمعلمة للمشكلة ككل.
في بعض الأحيان، في الخطوة الثالثة، تحتاج إلى تذكر بالإضافة إلى ذلك بعض المعلومات المساعدة حول التقدم المحرز في كل مهمة فرعية. وهذا ما يسمى العكس.
تطبيق الطريقة
يتم استخدام البرمجة الديناميكية عندما يكون هناك سمتان مميزتان:
حل مشكلة التحسين بواسطة الطريقةالبرمجة الديناميكية، تحتاج أولا لوصف هيكل الحل. المشكلة هي الأمثل إذا كان حل المشكلة يتكون من الحلول المثلى من المهام الفرعية لها. في هذه الحالة، فمن المستحسن استخدام البرمجة الديناميكية.
الخاصية الثانية من المشكلة، ضرورية ل معينةطريقة، عدد صغير من المهام الفرعية. الحل المتكرر للمشكلة يستخدم نفس المهام الفرعية المتداخلة، وعدد منها يعتمد على حجم المعلومات الأصلية. يتم تخزين الإجابة في جدول خاص، البرنامج يوفر الوقت، وذلك باستخدام هذه البيانات.
استخدام الديناميكيةعندما تكون هناك حاجة إلى اتخاذ القرارات على مراحل، بناء على مزايا المشكلة. على سبيل المثال، النظر في مثال بسيط على مهمة استبدال وإصلاح المعدات. لنفترض، على مسبك مصنع لتصنيع الإطارات، ويتم الإطارات في وقت واحد في شكلين مختلفين. في حالة فشل أحد النماذج، عليك تفكيك الجهاز. ومن الواضح أنه في بعض الأحيان يكون من المفيد استبدال النموذج الثاني من أجل عدم تفكيك الجهاز في حالة، وهذا النموذج سيكون غير فعال في المرحلة التالية. وعلاوة على ذلك، من الأسهل الاستعاضة عن نموذجي العمل قبل البدء في الفشل. طريقة البرمجة الديناميكية تحدد أفضل استراتيجية في مسألة استبدال مثل هذه النماذج، مع الأخذ بعين الاعتبار جميع العوامل: الاستفادة من استمرار تشغيل النماذج، والخسارة من الآلات الخاملة، وتكلفة الإطارات المرفوضة، وأكثر من ذلك.
</ p>