تحديات برمجيةطريقة عرض المدة التي يستغرقها تنفيذ الكود
- الطريقة الصحيحة لقياس المدة التي يستغرقها تنفيذ الكود
- طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة بايثون
- طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة جافا
- طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C
- طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C#
- طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C++
الطريقة الصحيحة لقياس المدة التي يستغرقها تنفيذ الكود
في البداية, مهما كانت لغة البرمجة التي تستخدمها يجب أن تفكر كالتالي عندما تقوم بقياس المدة التي يستغرقها تنفيذ الكود:
قم بتجربة الكود على كمية ضخمة من البيانات, فمثلاً إذا أردت معرفة كم سيستغرق تنفيذ حلقة تكرر الموضوع فيها من 1
إلى n
فيجب أن تدخل قيمة كبيرة للمتغير n
وقت التشغيل مثل 10000
- 50000
- 100000
أو قيم أكبر.
لا تقم بالتجربة على قيم صغيرة مثل 50
و 100
لأن المهمات الصغيرة قد ينجزها حاسوبك بلمح البصر و بالتالي فإن وقت تنفيذها قد يظهر لك 0
و بالتالي فإن هذا لن يفيدك إطلاقاً. تذكر دائماً أنه كلما كان عدد التكرار أكبر كلما ظهر لك الفرق الذي تحتاج معرفته أكثر, بالإضافة إلى أنك يجب دائماً أن تتوقع العمل بأعداد كبيرة في المشاريع التي تفعلها.
عند حساب الوقت الذي يستغرقه الكود حتى يتنفذ لا تتوقع أن تحصل على وقت ثابت في كل مرة تقوم فيها بتشغيل البرنامج و السبب في ذلك أن حاسوبك الذي تجرب عليه البرنامج يقوم بتشغيل العديد من البرامج و الخدمات في وقت واحد في الخلفية و كل واحد منهم ينفذ أوامر كثيرة تماماً كالأوامر التي تحاول تجربة تنفيذها.
لهذا السبب ننصحك دائماً بتجربة الكود عدة مرات, و لنفترض مثلاً 5 أو 10 مرات, و في كل مرة تقوم فيها بتشغيل الكود قم بحفظ الوقت الذي استغرقه للتدوين في ملف نصي أو دونه على ورقة أو إحفظه بشكل مؤقت بأي طريقة ترتاح بها.
بهذه الطريقة إذا توصلت لأكثر من طريقة لكتابة نفس الكود, تستطيع تجربة تشغيل كل طريقة منهم و تدوين الوقت الذي تحتاجه كل طريقة منهم. من خلال مقارنة الوقت الذي تحتاجه كل طريقة منهم ستعرف أي كود هو الأفضل بينهم.
معلومة
في البرامج الكبيرة و المواقع نقوم في العادة بوضع كل مهمة خاصة في المشروع بداخل دالة.
هكذا يصبح تطوير المشروع أمر سهل لأن الكود مرتب للغاية و أي مهمة نحتاج تعديلها نتوجه للدالة التي وضعنا كيف تتنفذ بداخلها.
من أهم الأشياء التي تحصل عليها حين ترتب الكود بشكل صحيح هي إمكانية معرفة المدة التي يستغرقها تنفيذ أي مهمة بكل السهولة.
بكل بساطة تستطيع تسجيل الوقت الذي بدأت فيه الدالة بالتنفيذ و تسجيل الوقت الذي إنتهت به. بعدها تقوم بطرح وقت الإنتهاء من وقت البداية لتحصل على المدة تنفيذ الكود من البداية إلى النهاية.
طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة بايثون
لعرض الوقت الذي استغرقه تنفيذ الكود بلغة بايثون, يمكنك تضمن الموديول time
و استخدام الدالة time()
كالتالي.
في المثال التالي قمنا بحساب الوقت الذي يستغرقه الحاسوب لطباعة ناتج جمع جميع الأرقام الموجودة من 1
إلى n
.
يمكنك كتابة الكود التالي بطرق أخرى طبعاً و لكننا تعمدنا كتابته بهذا الشكل حتى يكون سهل الفهم.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل حيث أن قيمة s
ستكون هي نفسها دائماً.
أما وقت التنفيذ فسيتغير حتماً بمقدار بسيط جداً في كل مرة يتم فيها تشغيل البرنامج.
s = 250000500000 Execution Time in Seconds: 0.08177542686462402
طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة جافا
لعرض الوقت الذي استغرقه تنفيذ الكود بلغة جافا, يمكنك استخدام الدالة nanoTime()
كالتالي.
ملاحظة: قسمنا الجواب النهائي على مليار للتحويل من nano seconds إلى seconds, أي حتى نعرض الوقت المستغرق بالثواني.
في المثال التالي قمنا بحساب الوقت الذي يستغرقه الحاسوب لطباعة ناتج جمع جميع الأرقام الموجودة من 1
إلى n
.
يمكنك كتابة الكود التالي بطرق أخرى طبعاً و لكننا تعمدنا كتابته بهذا الشكل حتى يكون سهل الفهم.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل حيث أن قيمة s
ستكون هي نفسها دائماً.
أما وقت التنفيذ فسيتغير حتماً بمقدار بسيط جداً في كل مرة يتم فيها تشغيل البرنامج.
s = 250000500000 Execution Time in Seconds: 0.0025516
طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C
لعرض الوقت الذي استغرقه تنفيذ الكود بلغة C, يمكنك تضمين المكتبة time
التي تحتوي على الدالة Clock()
التي ترجع الوقت الحالي و النوع clock_t
الذي سنستخدمه لتخزين الوقت الحالي الذي ترجعه الدالة.
ملاحظة: قسمنا الجواب النهائي على الثابت CLOCKS_PER_SEC
حتى نعرض الوقت المستغرق بالثواني.
في المثال التالي قمنا بحساب الوقت الذي يستغرقه الحاسوب لطباعة ناتج جمع جميع الأرقام الموجودة من 1
إلى n
.
يمكنك كتابة الكود التالي بطرق أخرى طبعاً و لكننا تعمدنا كتابته بهذا الشكل حتى يكون سهل الفهم.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل حيث أن قيمة s
ستكون هي نفسها دائماً.
أما وقت التنفيذ فسيتغير حتماً بمقدار بسيط جداً في كل مرة يتم فيها تشغيل البرنامج.
s = 500000500000.000000 Execution Time in Seconds: 0.003000
طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C#
لعرض الوقت الذي استغرقه تنفيذ الكود بلغة C#, يمكنك استخدام دوال الكلاس Stopwatch
كالتالي.
ملاحظة: قسمنا الجواب النهائي على 1000
للتحويل من milliseconds إلى seconds, أي حتى نعرض الوقت المستغرق بالثواني.
في المثال التالي قمنا بحساب الوقت الذي يستغرقه الحاسوب لطباعة ناتج جمع جميع الأرقام الموجودة من 1
إلى n
.
يمكنك كتابة الكود التالي بطرق أخرى طبعاً و لكننا تعمدنا كتابته بهذا الشكل حتى يكون سهل الفهم.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل حيث أن قيمة s
ستكون هي نفسها دائماً.
أما وقت التنفيذ فسيتغير حتماً بمقدار بسيط جداً في كل مرة يتم فيها تشغيل البرنامج.
s = 500000500000 Execution Time in Seconds: 0.002
طريقة عرض الوقت الذي استغرقه تنفيذ الكود بلغة C++
لعرض الوقت الذي استغرقه تنفيذ الكود بلغة C++, يمكنك تضمين المكتبة time
التي تحتوي على الدالة Clock()
التي ترجع الوقت الحالي و النوع clock_t
الذي سنستخدمه لتخزين الوقت الحالي الذي ترجعه الدالة.
ملاحظة: قسمنا الجواب النهائي على الثابت CLOCKS_PER_SEC
حتى نعرض الوقت المستغرق بالثواني.
في المثال التالي قمنا بحساب الوقت الذي يستغرقه الحاسوب لطباعة ناتج جمع جميع الأرقام الموجودة من 1
إلى n
.
يمكنك كتابة الكود التالي بطرق أخرى طبعاً و لكننا تعمدنا كتابته بهذا الشكل حتى يكون سهل الفهم.
مثال
سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل حيث أن قيمة s
ستكون هي نفسها دائماً.
أما وقت التنفيذ فسيتغير حتماً بمقدار بسيط جداً في كل مرة يتم فيها تشغيل البرنامج.
s = 5e+011 Execution Time in Seconds: 0.003