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

49 lines
2.4 KiB
Markdown

---
title: Dynamic Programming
localeTitle: برمجة ديناميكية
---
## برمجة ديناميكية
البرمجة الديناميكية (DP) هي تقنية برمجة لحل المشاكل حيث تتداخل حسابات مشاكلها الفرعية: تكتب برنامجك بطريقة تتجنب إعادة معالجة المشاكل التي تم حلها بالفعل. هذه التقنية ، عادة ما يتم تطبيقها بالاقتران مع المذكرات وهي تقنية التحسين حيث تقوم بتخزين النتائج المحسوبة مسبقًا ، وترجع النتيجة المخزنة مؤقتًا عند الحاجة إلى نفس الحساب مرة أخرى.
مثال على سلسلة فيبوناتشي التي تم تعريفها على النحو التالي:
`F(N) = F(N-1) + F(N-2)`
هذه هي الشجرة للعثور على F (5):
![شجرة فيبوناتشي سيري](https://cdn-media-1.freecodecamp.org/imgr/59Rpw.png)
لحساب 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](https://stackoverflow.com/questions/1065433/what-is-dynamic-programming) [الفرق بين memoization و DP على StackOverflow](https://stackoverflow.com/questions/6184869/what-is-the-difference-between-memoization-and-dynamic-programming)