مثال إعادة كتابة الكود

يوضح هذا المثال كيفية تحليل وتحسين الكود باستخدام DeepSeek، بما في ذلك معالجة الأخطاء والتعليقات وتحسينات الأداء.

المهمة

تحليل وتحسين الكود التالي الذي يتسم بعدم الكفاءة ويفتقر إلى معالجة الحالات الحدية:

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

السؤال

الكود أعلاه غير فعال ولا يعالج الحالات الحدية. يرجى شرح المشاكل والحلول، ثم تحسين الكود.

الإجابة

تحليل المشكلة

هذا التنفيذ لدالة فيبوناتشي fib(n) يستخدم العودية. الكود بسيط لكنه يعاني من المشاكل التالية:

  1. العمليات الحسابية المتكررة: تؤدي الاستدعاءات العودية إلى تكرار العديد من العمليات الحسابية. على سبيل المثال، عند حساب fib(5)، يتم حساب قيم fib(3) و fib(2) عدة مرات، مما يقلل من الكفاءة.

  2. معالجة غير كافية للحالات الحدية: في حين تتم معالجة الحالة n <= 2، لا يتم اعتبار الحالة n < 0. تقوم الدالة بإرجاع نتائج غير صحيحة للمدخلات السالبة.

  3. حد عمق العودية: للقيم الكبيرة لـ n، قد يتجاوز عمق العودية الحد الافتراضي لبايثون ويسبب RecursionError.

الحلول

  1. استخدام التخزين المؤقت: تخزين قيم فيبوناتشي المحسوبة في الذاكرة المؤقتة لتجنب العمليات الحسابية المتكررة وتحسين الكفاءة.

  2. معالجة الحالات الحدية: إضافة فحص لـ n < 0 وإرجاع رسالة خطأ مناسبة أو قيمة افتراضية.

  3. استخدام التكرار بدلاً من العودية: العودية أنيقة لكنها غير فعالة لمجموعات البيانات الكبيرة. استخدام حلقة لحساب أرقام فيبوناتشي وتجنب حد عمق العودية.

الكود المحسن

الطريقة 1: العودية مع التخزين المؤقت

def fib(n, memo={}): if n < 0: raise ValueError("يجب أن يكون الإدخال عددًا صحيحًا غير سالب") if n <= 2: return 1 if n in memo: return memo[n] memo[n] = fib(n-1, memo) + fib(n-2, memo) return memo[n]

الطريقة 2: التكرار

def fib(n): if n < 0: raise ValueError("يجب أن يكون الإدخال عددًا صحيحًا غير سالب") if n <= 2: return 1 a, b = 1, 1 for _ in range(3, n+1): a, b = b, a + b return b

الشرح

  1. العودية مع التخزين المؤقت:

    • يستخدم قاموس memo لتخزين قيم فيبوناتشي المحسوبة
    • يتحقق من memo قبل كل استدعاء عودي ويرجع النتيجة مباشرة إذا كانت متوفرة
    • يرفع ValueError للمدخلات السالبة
  2. التكرار:

    • يستخدم المتغيرات a و b لتخزين آخر رقمين من فيبوناتشي
    • يحسب أرقام فيبوناتشي في حلقة من 3 إلى n
    • يرفع أيضًا ValueError للمدخلات السالبة

الملخص

يحسن الكود المحسن الكفاءة ويعالج الحالات الحدية بشكل صحيح. كل من التخزين المؤقت والطريقة التكرارية هي تقنيات تحسين فعالة، والاختيار بينهما يعتمد على المتطلبات والسيناريوهات المحددة.

كود إنشاء الإجابة

from openai import OpenAI client = OpenAI( base_url="https://api.deepseek.com/", api_key="<YOUR_API_KEY>" ) completion = client.chat.completions.create( model="deepseek-chat", messages=[ { "role": "user", "content": "الكود أعلاه غير فعال ولا يعالج الحالات الحدية. يرجى شرح المشاكل والحلول، ثم تحسين الكود." } ] ) print(completion.choices[0].message.content)