Files
freeCodeCamp/guide/arabic/computer-science/dynamic-programming/index.md
Ahmad Abdolsaheb 3019f80a14 fix: replace imgur with s3 for arabic guide files with no conflict (#36051)
* fix: replace imgur to s3 for arabic guide files with no conflict

(cherry picked from commit 96a14a1f278c12e0123216813ab27076b1bcdb66)

* fix: remove extra links

Co-Authored-By: Randell Dawson <5313213+RandellDawson@users.noreply.github.com>

* fix: revert changes

* fix: revert changes

* fix: remove an unnecessary url addition.
2019-05-21 01:22:16 +05:30

2.4 KiB

title, localeTitle
title localeTitle
Dynamic Programming برمجة ديناميكية

برمجة ديناميكية

البرمجة الديناميكية (DP) هي تقنية برمجة لحل المشاكل حيث تتداخل حسابات مشاكلها الفرعية: تكتب برنامجك بطريقة تتجنب إعادة معالجة المشاكل التي تم حلها بالفعل. هذه التقنية ، عادة ما يتم تطبيقها بالاقتران مع المذكرات وهي تقنية التحسين حيث تقوم بتخزين النتائج المحسوبة مسبقًا ، وترجع النتيجة المخزنة مؤقتًا عند الحاجة إلى نفس الحساب مرة أخرى.

مثال على سلسلة فيبوناتشي التي تم تعريفها على النحو التالي:

F(N) = F(N-1) + F(N-2)

هذه هي الشجرة للعثور على F (5):

شجرة فيبوناتشي سيري

لحساب F (5) ستحتاج إلى حساب عدة مرات نفس F (i). استخدام العودية:

def fib(n) { if n <= 1: return n return fib(n-1) + fib(n-2); }

وفيما يلي الحل الأمثل (باستخدام DP)

بالنسبة إلى F (5) ، سيؤدي هذا الحل إلى إنشاء المكالمات الواردة في الصورة أعلاه ، والتي تعمل في O (2 ^ N).

هنا هو الحل الأمثل الذي يستخدم DP و memoization:

`lookup = {1 : 1, 2 : 1} # Create a lookup-table (a map) inizialized with the first 2 Fibonacci's numbers

def fib(n) { if n in lookup: # If n is already computed return n # Return the previous computed solution else lookup[n] = fib(n-1) + fib(n-2) # Else, do the recursion. return lookup[n] } `

التخزين المؤقت للحلول المحسوبة في جدول البحث ، والاستعلام عنها قبل الذهاب العودية سيتيح للبرنامج وقت تشغيل O (N).

معلومات اكثر:

ما هي البرمجة الديناميكية على StackOverflow الفرق بين memoization و DP على StackOverflow