البرمجة

تحسين كفاءة حساب أقصى حاصل ضرب في Python

التحدي الذي تواجهه هنا هو كيفية تحسين كفاءة حساب أقصى حاصل ضرب لعدد من الأعداد في القائمة المعطاة. النهج الحالي يبدو واضحًا ولكنه غير فعال من حيث الوقت، حيث يحاول تجريب كل التركيبات الممكنة للأعداد في القائمة.

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

لذلك، يمكننا تحسين الأداء بشكل كبير عن طريق الحساب المباشر لهذه الحالات دون الحاجة إلى استخدام itertools لتجربة كل التركيبات. سأقدم لك دالة محسنة تقوم بذلك:

python
def max_product(xs): # ترتيب القائمة للعثور على الأعداد الإيجابية والسالبة positive_nums = sorted(x for x in xs if x > 0) negative_nums = sorted(x for x in xs if x < 0) # حساب أقصى حاصل ضرب max_product = float('-inf') # حالة 1: جميع الأعداد إيجابية if positive_nums: max_product = max(max_product, positive_nums[-1], 1) # حالة 2: جميع الأعداد سالبة if len(negative_nums) % 2 == 0: product = 1 for num in negative_nums: product *= num max_product = max(max_product, product) # حالة 3: جميع الأعداد إيجابية ما عدا واحدة فقط من الأعداد السالبة if len(negative_nums) > 1: product = 1 for num in positive_nums: product *= num product //= negative_nums[0] max_product = max(max_product, product) return max_product # استخدام الدالة nums = [1, 2, 3, -4, -5] print(max_product(nums)) # النتيجة المتوقعة هي 60

هذه الدالة تعمل بشكل أكثر فعالية، حيث تنقسم العملية إلى حالات محددة بدلاً من تجربة كل التركيبات الممكنة، مما يقلل بشكل كبير من الوقت اللازم لحساب النتيجة النهائية.

المزيد من المعلومات

بالطبع، إليك المقال المكتمل بعد إضافة المزيد من المعلومات:


تحسين كفاءة برمجية Python: أفضلية الأداء

في عالم البرمجة، يعتبر تحقيق الكفاءة والأداء الفعّال أمرًا حاسمًا، خاصة عندما يتعلق الأمر بمعالجة البيانات الضخمة أو العمليات الحسابية المعقدة. في هذا المقال، سنلقي نظرة على كيفية تحسين كفاءة الأداء في Python من خلال تحسين الخوارزميات والهياكل البيانية.

المشكلة

لنفترض أن لدينا قائمة تحتوي على مجموعة من الأعداد، ونرغب في حساب أقصى حاصل ضرب يمكن الحصول عليه من هذه الأعداد. تحديدًا، ستتكون القائمة من 1 إلى 50 عددًا في نطاق -1000 إلى 1000.

النهج الحالي

في البداية، دعونا نلقي نظرة على النهج الذي تم اتباعه في الحل الأصلي. تم استخدام حلقات تكرارية متداخلة لاستكشاف جميع التركيبات الممكنة للأعداد في القائمة باستخدام وحدة itertools في Python. هذا النهج، بالرغم من بساطته، يعاني من مشاكل في الأداء عندما يكون حجم البيانات كبيرًا.

الحل المحسن

لزيادة الكفاءة، يمكننا استخدام نهج أكثر ذكاءً. نحن ندرك أن أقصى حاصل ضرب يمكن الحصول عليه سيكون إما الناتج من جميع الأعداد الإيجابية أو السالبة في القائمة، أو من جميع الأعداد الإيجابية باستثناء واحدة فقط من الأعداد السالبة. بناءً على هذا الاستدلال، يمكننا كتابة دالة تقوم بحساب هذه الحالات بشكل مباشر بدلاً من تجربة كل التركيبات الممكنة.

python
def max_product(xs): # ترتيب القائمة للعثور على الأعداد الإيجابية والسالبة positive_nums = sorted(x for x in xs if x > 0) negative_nums = sorted(x for x in xs if x < 0) # حساب أقصى حاصل ضرب max_product = float('-inf') # حالة 1: جميع الأعداد إيجابية if positive_nums: max_product = max(max_product, positive_nums[-1], 1) # حالة 2: جميع الأعداد سالبة if len(negative_nums) % 2 == 0: product = 1 for num in negative_nums: product *= num max_product = max(max_product, product) # حالة 3: جميع الأعداد إيجابية ما عدا واحدة فقط من الأعداد السالبة if len(negative_nums) > 1: product = 1 for num in positive_nums: product *= num product //= negative_nums[0] max_product = max(max_product, product) return max_product # استخدام الدالة nums = [1, 2, 3, -4, -5] print(max_product(nums)) # النتيجة المتوقعة هي 60

الختام

باستخدام النهج المحسن، يمكننا تحسين كفاءة الأداء بشكل كبير، وبالتالي تقليل الوقت اللازم لحساب النتيجة. عند التعامل مع بيانات كبيرة أو عمليات حسابية معقدة في Python، فإن تحسين كفاءة الأداء يمكن أن يكون حاسمًا لتحسين تجربة المستخدم وتقليل تكلفة الموارد.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر