مثال إعادة كتابة الكود
يوضح هذا المثال كيفية تحليل وتحسين الكود باستخدام 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)