مثال إعادة كتابة الكود
يوضح هذا المثال كيفية تحليل وتحسين الكود باستخدام DeepSeek، بما في ذلك معالجة الأخطاء والتعليقات وتحسينات الأداء.
المهمة
تحليل وتحسين الكود التالي الذي يتسم بعدم الكفاءة ويفتقر إلى معالجة الحالات الحدية:
def fib(n):
if n <= 2:
return n
return fib(n-1) + fib(n-2)
السؤال
الكود أعلاه غير فعال ولا يعالج الحالات الحدية. يرجى شرح المشاكل والحلول، ثم تحسين الكود.
الإجابة
تحليل المشكلة
هذا التنفيذ لدالة فيبوناتشي fib(n)
يستخدم العودية. الكود بسيط لكنه يعاني من المشاكل التالية:
-
العمليات الحسابية المتكررة: تؤدي الاستدعاءات العودية إلى تكرار العديد من العمليات الحسابية. على سبيل المثال، عند حساب
fib(5)
، يتم حساب قيمfib(3)
وfib(2)
عدة مرات، مما يقلل من الكفاءة. -
معالجة غير كافية للحالات الحدية: في حين تتم معالجة الحالة
n <= 2
، لا يتم اعتبار الحالةn < 0
. تقوم الدالة بإرجاع نتائج غير صحيحة للمدخلات السالبة. -
حد عمق العودية: للقيم الكبيرة لـ
n
، قد يتجاوز عمق العودية الحد الافتراضي لبايثون ويسببRecursionError
.
الحلول
-
استخدام التخزين المؤقت: تخزين قيم فيبوناتشي المحسوبة في الذاكرة المؤقتة لتجنب العمليات الحسابية المتكررة وتحسين الكفاءة.
-
معالجة الحالات الحدية: إضافة فحص لـ
n < 0
وإرجاع رسالة خطأ مناسبة أو قيمة افتراضية. -
استخدام التكرار بدلاً من العودية: العودية أنيقة لكنها غير فعالة لمجموعات البيانات الكبيرة. استخدام حلقة لحساب أرقام فيبوناتشي وتجنب حد عمق العودية.
الكود المحسن
الطريقة 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
الشرح
-
العودية مع التخزين المؤقت:
- يستخدم قاموس
memo
لتخزين قيم فيبوناتشي المحسوبة - يتحقق من
memo
قبل كل استدعاء عودي ويرجع النتيجة مباشرة إذا كانت متوفرة - يرفع
ValueError
للمدخلات السالبة
- يستخدم قاموس
-
التكرار:
- يستخدم المتغيرات
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)