freeCodeCamp/guide/arabic/computer-science/dynamic-programming/index.md

49 lines
2.3 KiB
Markdown
Raw Normal View History

---
title: Dynamic Programming
localeTitle: برمجة ديناميكية
---
## برمجة ديناميكية
البرمجة الديناميكية (DP) هي تقنية برمجة لحل المشاكل حيث تتداخل حسابات مشاكلها الفرعية: تكتب برنامجك بطريقة تتجنب إعادة معالجة المشاكل التي تم حلها بالفعل. هذه التقنية ، عادة ما يتم تطبيقها بالاقتران مع المذكرات وهي تقنية التحسين حيث تقوم بتخزين النتائج المحسوبة مسبقًا ، وترجع النتيجة المخزنة مؤقتًا عند الحاجة إلى نفس الحساب مرة أخرى.
مثال على سلسلة فيبوناتشي التي تم تعريفها على النحو التالي:
`F(N) = F(N-1) + F(N-2)`
هذه هي الشجرة للعثور على F (5):
![شجرة فيبوناتشي سيري](https://i.stack.imgur.com/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)