اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

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

إن ال (Dynamic Programming) البرمجة الديناميكية  هي تقنية في البرمجة وليست خوارزمية بنفهسا . ولكننا نستخدمها في الخوارزميات لحل المشاكل المعقدة عن طريق تقسيمها إلى مشاكل فرعية أبسط وحل كل مشكلة فرعية مرة واحدة وتخزين الحلول في جدول لتجنب الحسابات المتكررة.وبالتالي يمكن استخدامها لاحقا بدون الحاجة لإعادة حسابها. وهذا يؤدي إلى تقليل التعقيد الزمني بشكل كبير.

وإليك المقال التالي من موسوعة حسوب لشرح وتقاصيل أكثر :

  • 0
نشر

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

البرمجة الديناميكية (Dynamic Programming) هي في الواقع منهجية أو تقنية لحل المشاكل البرمجية، وليست خوارزمية محددة. يمكن اعتبارها مفهوم برمجي أو أسلوب في حل المشكلات. والفكرة الأساسية للبرمجة الديناميكية تقوم على

  • تقسيم المشكلة الكبيرة إلى مشاكل فرعية أصغر
  • حل المشاكل الفرعية مرة واحدة وتخزين نتائجها
  • استخدام هذه النتائج المخزنة لحل المشاكل الأكبر

https://wiki.hsoub.com/Algorithms/Dynamic_Programming

 

  • 0
نشر

ذلك هو مفهوم برمجي لتصميم تصميم خوارزميات بمعنى  Programming Concept/Algorithmic Paradigm وليس خوارزمية محددة بذاتها

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

وهناك طريقتان لتطبيق ذلك المفهوم الأولى Memoization (Top-Down)، عن طريق حل المشكلة بشكل تعاودي (Recursion) + حفظ النتائج في Cache، كحساب Fibonacci(n) مع تخزين القيم 

memo = {}
def fib(n):
    if n <= 1:
        return n
    if n not in memo:
        memo[n] = fib(n-1) + fib(n-2)
    return memo[n]

الثانية Tabulation (Bottom-Up) عن طريق حل المسائل الفرعية من الأصغر إلى الأكبر باستخدام Iteration + جدول، مثل ملء جدول Fibonacci[0..n] بشكل تسلسلي.

def fib(n):
    if n <= 1:
        return n
    table = [0] * (n+1)
    table[0], table[1] = 0, 1
    for i in range(2, n+1):
        table[i] = table[i-1] + table[i-2]
    return table[n]
  • 0
نشر
بتاريخ 6 ساعة قال Mustafa Suleiman:

ذلك هو مفهوم برمجي لتصميم تصميم خوارزميات بمعنى  Programming Concept/Algorithmic Paradigm وليس خوارزمية محددة بذاتها

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

وهناك طريقتان لتطبيق ذلك المفهوم الأولى Memoization (Top-Down)، عن طريق حل المشكلة بشكل تعاودي (Recursion) + حفظ النتائج في Cache، كحساب Fibonacci(n) مع تخزين القيم 

memo = {}
def fib(n):
    if n <= 1:
        return n
    if n not in memo:
        memo[n] = fib(n-1) + fib(n-2)
    return memo[n]

الثانية Tabulation (Bottom-Up) عن طريق حل المسائل الفرعية من الأصغر إلى الأكبر باستخدام Iteration + جدول، مثل ملء جدول Fibonacci[0..n] بشكل تسلسلي.

def fib(n):
    if n <= 1:
        return n
    table = [0] * (n+1)
    table[0], table[1] = 0, 1
    for i in range(2, n+1):
        table[i] = table[i-1] + table[i-2]
    return table[n]

الف شكراا جدا لحضرتك

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...