نفس الكود، ولكن 7 مستويات! و7 طرق للتفكير🧠
Summary
TLDRالفيديوهات التعليمية حول البرمجة تعتبر مفيدة بشكل خاص، فهي توفر للمتعلمين فرصة لفهم المفاهيم والتقنيات بطريقة مرنة. في هذا النص من السكريبت، يُقدم مقدمة لسلسلة فيديوهات تشرح سبعة مستويات من تطوير الكود لحل مشكلة معينة، وهو تحديد الأعداد الزوجية ضمن نطاق محدد. يبدأ الدرس بطريقة بسيطة ويُطور إلى طرق أكثر تعقيدًا وكفاءة. يُظهر المثال المقدم كيف يمكن استخدام تقنيات مختلفة مثل التحليل الثنائي، استبدال حلقات بالقوائم، استخدام فلتر، الاستخدام الفعال للمكتبات، التكرار الركود، وتكتيكات المعالجة المصفوفية لتحسين الأداء. يُشير إلى أهمية التفكير الإبداعي والتحليلي في تطوير حلول برمجية فعالة، ويُشير أيضًا إلى أهمية الاستخدام الصحيح للمكتبات والتقنيات الحديثة. يُختتم النص بدعوة للتعليق والتفاعل، مما يُشير إلى أهمية المجتمع والمساهمة في تطوير المحتوى العربي.
Takeaways
- 📌 الكود الأول يبحث عن الأعداد الزوجية ضمن نطاق محدد ويُرجع قائمة بالأرقام الزوجية.
- ⏱️ ي耗費 3.22 ثانية لتنفيذ الكود الأول، مما يُشير إلى حاجة لتحسين الأداء.
- 🔢 باستخدام مقاربة ثنائية، يمكن التحقق من الأعداد الزوجية بطريقة أسرع، ويُ耗費 2.82 ثانية.
- 🚀 استبدال حلقة بـ list comprehension يُحدِّث الأداء ويُ耗費 2.48 ثانية.
- 🔍 باستخدام منطق الفلتر في Python يُعد الكود أكثر فعالية، ويُ耗費 1.59 ميكروثانية.
- ❌ الكود الذي يستخدم recursion لإيجاد الأعداد الزوجية غير فعال ويُ耗費 أكثر من ساعتين.
- 🧮 الاستخدام من NumPy و функции filter يُظهر قيمة المكتبات البرمجية القوية في التحسين الأداء، ويُ耗費 366 ميلي ثانية.
- 🔁 التكرار البرمجي بسيط يُعد فعالاً ويُعد الكود الأكثر فعالية في المثال، ويُ耗費 38 ميلي ثانية.
- 💡 التفكير البرمجي الجيد يُركز على تبسيط العمليات وإيجاد الحلول البسيطة والفعالة.
- ✅ الكود النهائي يُستخدم لإنشاء قائمة من الأعداد الزوجية بطريقة فعالة، مبنية على التكرار البرمجي.
- 🌟 تشير التجربة إلى أن التحسينات البرمجية يمكن أن تكون resultado de التكرار البرمجي بسيط، وليس دائماً resultado de التقنيات المتقدمة.
Q & A
ما هي الطريقة المستخدمة في المستوى الأول للتحقق من الأعداد الزوجية؟
-في المستوى الأول، يتم استخدام عملية القسمة. يتم تقسيم الأعداد على اثنين وإذا كان الباقي صفر، فهذا يعني أن العدد زوجي.
ما الفرق الرئيسي بين المستوى الثاني والمستوى الأول في الكود؟
-المستوى الثاني يستخدم المقاربة الثنائية لتحديد الأعداد الزوجية، بدلاً من استخدام باقي القسمة. يتم استخدام معامل المقارنة الثنائية (AND) مع واحد لتحديد إذا كان العدد زوجي.
كيف يعمل الاختصار في المستوى الثالث وما أثره على أداء الكود؟
-في المستوى الثالث، يتم استخدام استيعاب القوائم لتبسيط الكود بحيث يمكن تقليل عدد الأسطر المكتوبة. هذا يؤدي إلى تحسن طفيف في الأداء، لكن لا يعتبر تحسنًا كبيرًا.
ما الدور الذي تلعبه دالة الفلتر في المستوى الرابع وكيف تحسنت النتائج؟
-دالة الفلتر في المستوى الرابع تستخدم لتنقية القائمة من الأعداد غير الزوجية. هذه الدالة تعمل بكفاءة أعلى لأنها تستخدم جنريتور، ما يقلل استهلاك الذاكرة ويزيد السرعة مقارنة بالمستويات السابقة.
لماذا كان أداء الكود في المستوى الخامس غير فعال؟
-في المستوى الخامس، تم استخدام الاجترار الريكورسي لتحديد إذا كان العدد زوجي، وهذا يعتبر غير فعال زمنياً خاصة للأعداد الكبيرة، حيث يمكن أن يستغرق أكثر من ساعتين للتنفيذ ولم ينتهي الكود بعد.
ما الفائدة من استخدام مكتبات NumPy في المستوى السادس؟
-استخدام NumPy في المستوى السادس يوفر طريقة أسرع وأكثر كفاءة لمعالجة الأعداد الكبيرة، حيث تسمح مصفوفات NumPy بالتعامل مع البيانات بشكل أكثر فعالية وسرعة مقارنة بالطرق التقليدية.
Outlines
😀 الكود البسيط لإيجاد الأرقام الزوجية
يبدأ النص بوصف كود بسيط يستخدم لبحث عن الأرقام الزوجية ضمن نطاق محدد. يستخدم الكود تقنية التقسيم على اثنان لمعرفة ما إذا كانت الأرقام زوجية أم لا. ثم يضيف الأرقام الزوجية إلى قائمة. يُظهر الكود الأداء بعد إضافة تايمتر ل측 его، مع ملاحظة أن الكود يستغرق 3.22 ثانية للتنفيذ. تتم مقارنته بطرق أخرى لتحسين الأداء.
😉 استعمال مقاربة ثنائية للتحسين
ينتقل النص إلى استخدام تقنية التمثيل الثنائي لتحسين الكود. يشير إلى أن الأرقام الزوجية ستنتهي دائمًا بصفر على اليمين، وبالتالي يمكن استخدام معامل المقارنة الثنائية لتحسين الأداء. بعد التحسين، يظهر الكود ي耗 2.82 ثانية، مما يجعله أسرع قليلاً من الكود المطلوب قبل التحسين.
🤔 استبدال الحلقات بالقوائم المجمعة
يتحدث النص عن استبدال حلقة التكرار في الكود بقوائم مجمعة لتحسين الأداء. يشير إلى أن مبرمجو بايثون يحبون اشتمال القوائم. بعد التحسين، ي耗 الكود 2.48 ثانية، مما يمثل تحسينًا طفيفًا.
😎 استخدام فلتر لتحسين الأداء
يتم التركيز في هذا القسم على استخدام ميزة فلتر في لغات البرمجة لتحسين الأداء. يستخدم الفلتر لإزالة الأرقام غير الزوجية من القائمة. بعد تطبيق الفلتر، يظهر الكود ي執行 في 1.59 ميكرو ثانية، مما يجعله أسرع بكثير من الكود السابق.
🤓 استخدام التكرار الذاتي (Recursion) لحل المشكلات
يتم استخدام طريقة التكرار الذاتي (Recursion) في هذا القسم لتحسين الكود. يستخدم التكرار الذاتي لتكرار عملية التحقق إذا كانت الأرقام زوجية أم لا. ومع ذلك، يظهر أن التكرار الذاتي ي執行 لأكثر من ساعتين ولم ينتهي، مما يشير إلى أنه ليس الطريقة المثلى لحل هذه المشكلة.
🧐 استخدام المكتبات القوية (NumPy) لتحسين الأداء
يتم التركيز في هذا القسم على استخدام مكتبات بايثون مثل NumPy لتحسين الأداء. يستخدم NumPy لتحسين الكود بكثير، مع استخدام نم باي ارينج (NumPy arange) وفلتر NumPy (NumPy filter). ي執行 الكود بعد التحسين في 366 ميلي ثانية، مما يجعله أسرع من الكود السابق بكثير.
😲 التفكير الموجه بالحلول: التكرار الذاتي في حل المشكلات
يتم التركيز في هذا القسم على أهمية التفكير الموجه بالحلول في البرمجة. يستخدم التكرار الذاتي مرة أخرى، ولكن بهذه الطريقة البسيطة، لتكرار عملية التحقق إذا كانت الأرقام زوجية أم لا. يظهر الكود بعد التحسين ي執行 في 38 ميلي ثانية، مما يجعله أسرع بكثير من الكود السابق.
🙌 التفكير الموجه بالحلول: التكرار الذاتي في حل المشكلات
يتم التركيز في هذا القسم على أهمية التفكير الموجه بالحلول في البرمجة. يستخدم التكرار الذاتي مرة أخرى، ولكن بهذه الطريقة البسيطة، لتكرار عملية التحقق إذا كانت الأرقام زوجية أم لا. يظهر الكود بعد التحسين ي執行 في 38 ميلي ثانية، مما يجعله أسرع بكثير من الكود السابق.
Mindmap
Keywords
💡كود بسيط
💡نطاق أو رنج
💡العدد الزوجي
💡الpostcode المنطقي
💡الpostcode القصير
💡المثيل ال二进制
💡الpostcode الفلتر
💡الpostcode الジェネレーター
💡الpostcode الрекурсية
💡الpostcode الnumpy
💡التفكير البرمجي
Highlights
العمليه الأساسية هي البحث عن الأرقام الزوجية ضمن نطاق محدد و把她们都添加到一个逻辑数组或列表中
الكود الأول يستخدم تقنية التقسيم لإيجاد الأرقام الزوجية ويستغرق 3.22 ثانية في التنفيذ
المستوى الثاني يستخدم مقاربة ثنائي لتحسين الأداء، ويستغرق 2.82 ثانية
في المستوى الثالث، استبدال الحلقات بـ list comprehension يؤدي إلى تحسين في الأداء، ويستغرق 2.48 ثانية
المستوى الرابع يستخدم filter() لتحسين الأداء بشكل كبير، ويستغرق 1.59 ميكرو ثانية
المستوى الخامس يستخدم التكرار الذاتي (recursion) لحل المشكلة، ولكن يفشل بسبب مدة التنفيذ الطويلة
المستوى السادس يستخدم NumPy لتحسين الأداء، ويستغرق 366 ميلي ثانية
المستوى السابع يعتمد على التفكير البرمجي لتحسين الأداء، ويستغرق 38 ميلي ثانية
الكود النهائي يستخدم NumPy وfilter() لحل المشكلة بشكل فعال وسريع
القارن بين الأداء المختلف للكود في السبعة مستويات يظهر الأهمية التفكير البرمجي في حل المشكلات
الكود البسيط والفعال هو الأفضل في ال实践中، وليس فقط الكود ال_COMPLEX
ال高处不胜寒، الكود الفعال هو الذي يمكن أن يكتبه أي مبتدئ في البرمجة
ال高处不胜寒، التفكير البرمجي هو القوة الأساسية وراء حل المشكلات
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
ال高处不胜寒، الكود النهائي يظهر الأهمية التفكير البرمجي في التحسين الأداء
Transcripts
نفس الكود ولكن سبع مستويات وسبع طرق
للتفكير المستوى الاول حسنا سنعمل مع كود
بسيط جدا حتى يفهم الجميع المساله هي
كالتالي اكتب كودا يقوم بالبحث عن الاعداد
الزوجيه ضمن نطاق او رنج محدد النتيجه يجب
ان تكون قائمه ليست او مصفوفه منطقيا
لمعرفه عدد ما اذا كان زوجيا ام لا فكل ما
عليك القيام به هو قسمته على اثنان واذا
كان باقي القسمه صفر فهو عدد زوجي هذه
العمليه يطلق عليها الموديل نعود الى
المساله الخاصه بنا سنقوم بانشاء داله
تاخذ متغيرين ستارت
واند ننشئ قائمه
فارغه ثم ننشئ هذه الحلقه التي لا هدف لها
في الحياه سوى الدوران على الاعداد
الموجوده في النطاق بين اند وستارت تحاول
قسمه كل عدد على اثنين اذا كان باقي
القسمه صفر تقوم باضافته الى القائمه ايفن
نمبرز اخيرا الداله تعيد تلك القائمه هذا
كان كل شيء دعنا نجرب النطاق من 99 الى 10
ملايين يؤدي الغرض المطلوب لكن دعنا نقيس
اداء هذا الكود عبر اضافه تايمت اعلاه
وتنفيذه ننتظر قليلا
النتيجه هي ان هذا الكود يستغرق
3.22 ثانيه للتنفيذ في المستويات القادمه
لن اتعمق كثيرا في الشرح لكن سنرى طرقا
مختلفه للتفكير المستوى الثاني دعنا
نستخدم مقاربه مختلفه في النظام الثنائي
باينري سيستم تبدو الارقام بالشكل التالي
كما تلاحظ فان كل الارقام الزوجيه تنتهي
بصفر على اليمين اذا بدل استخدام باقي
القسمه سنستخدم معامل المقارنه الثنائيه
اند مع واحد وهكذا اذا كان البيت الايمن
من العدد المدخل في صفر فان نتيجه العمليه
اند ستكون صفر ايضا بالتالي فالعدد الزوجي
دعنا نقوم بقياس اداء
الكود استغرق
2.82 ثانيه وهو اسرع بقليل من كود المستوى
الاول هذه المقاربه افضل ولكنها لم تقدم
اي تحسن كبير دعنا نجرب جعل الكود
المستوى الثالث اذا كان هناك شيء يجب ان
تعرفه عن مبرمج بايثون فهو انهم يحبون
اشتمال القوائم ليس كومبنشن وما سنفعله
الان هو استبدال الحلقه الموجوده في
الداله باجمال
القائمه وهكذا اختصرنا خمس اسطر في سطر
واحد ولم يتبقى لنا الا تجربته ام النتيجه
هي
2.48 ثانيه مره اخرى تحسن طفيف ومتواضع
جدا العبره في هذا المستوى هو الطرق
الانيقه والاكواد القصيره لا تقدم اداء
قويا بالضروره اذا لقد حان الوقت لتغيير
طريقه تفكيرنا من جديد المستوى الرابع
لماذا لا نستخدم فلتر فهي ميزه موجوده في
كل لغات البرمجه وقد سبق و شرحناها هي
وماب فيلتر واضحه من اسمها انها تقوم
بفلتر القوائم والسلاسل اولا يجب ان نكتب
داله تتعامل مع عنصر واحد وترجع ترو اذا
كان زوجيا والا ففول واضح الان سنكتب داله
تطبق فلتر وت رع لنا نتيجتها حان وقت
التجربه الان دعنا نقيس اداء هذا
الكود رائع تنفيذ هذا الكود استغرق
1.59 ميكرو ثانيه انتبهوا الميكرو ثانيه
وهي جزء من المليون من الثانيه اذا فهذا
الكود اسرع من الكود السابق باكثر من
مليون ونصف مره واو في نظركم ما سبب سرعه
هذا الكود السبب هو ان فيلتر ترجع كائن
جنريتور وليس كائن الليست المولدات
جنريتورز هي نوع من الكائنات الاداء سريعه
وكسوله ولا تستهلك الكثير من الذاكره لكن
كان المطلوب منا في التمرين ارجاع قائمه
او مصفوفه وبالتالي سنضطر لاضافه محول
ليست لنختبر اداء الكود
الان اربع ثواني ونصف سحقا اصبح الاداء
اسوا حتى من المستويات السابقه وهذا يثبت
لنا ان سر قوه فلتر هي المولدات يجب ان
نفكر في طريقه اخرى اكثر ابداعا المستوى
الخامس في المستويات السابقه استخ
استخدمنا باقي القسمه واستخدمنا المقارنه
الثنائيه الان سنستخدم طريقه مختلفه وهي
مقاربه يتبجح بها المحترفون عاده مقاربه
قويه تستخدم لحل الكثير من المشاكل الا
وهي الاجترار ريكور جن حسنا فكره الاجترار
لمعرفه اذا كان العدد زوجيا تعمل بالطريقه
التاليه ناخذ اي عدد ونستمر بطرح اثنان
منه اذا وصل الى صفر نتوقف فهو زوجي
الاعداد الفرديه بهذه الطريقه لا تصل
الصفر ابدا واخر عدد موجب تصل اليه هو
واحد نعدل الداله از ابن ونجعلها ترجع ترو
اذا كان المتغير نمبر صفر وفولس اذا كان
المتغير واحد والا فانه مطلوب منها ان
تنادي نفسها مع نمبر ناقص اين وهكذا
ستستمر بازرار نفسها حتى تصل الى ترو او
فولس لست متفائلا بهذا الكود لكن دعنا
نجرب الكود استغرق اكثر من ساعتين ولم
ينتهي بعد قطعا هذه المقارنه غير صالحه هي
مقاربه قويه في حل الكثير من المشاكل ولكن
ليس هنا لن اكذب كنت اعرف النتيجه مسبقا
لان التعقيد الزمني لهذا الكود هو او ان
كي ولكن اردت فقط ان اثبت لكم ان الاساليب
المتقدمه ليست فعاله دائما في حل المشاكل
المستوى السادس في هذا المستوى سنبدا
بتجربه الطرق القويه التي نستخدمها في
العالم الحقيقي سنستخدم المصفوفات مع نام
باي في الداله سنستخدم نم باي ارينج لانها
اسرع من
رينج وبعدها سنستخدم الفلتر الخاص
بالمصفوفات نام باي وكما ترى هو انيق
وبسيط كل ما عليك فعله هو فتح القوسين
المربعين بعد اسم المصفوفه وتحديد الشرط
الذي تريد ان يتوفر في القيم التي تريد
ابقائها طبعا هذه المقارنه الثنائيه سبق
وشرحنا لنقوم الان بقياس اداء
الكود انه سريع جدا استغرق 366 ميلي ثانيه
وهو اسرع من كود المستوى الاول بتسع مرات
تقريبا هذا فرق جيد فعلا الان هل عرفت
لماذا الجميع يحبون نام باي ولماذا تجدها
في الكثير من المشاريع الضخمه المكتبات
تقدم حلولا انيقه وقويه استخدم المكتبات
المستوى السابع وصلنا الى المستوى الاخير
في هذا المستوى ستعرف ان البرمجه ليست
مجرد اكواد بل طريقه تفكير اكثر مهاره
ستحتاجها هي القدره على تبسيط العمليات في
هذا المستوى سنعتمد على مقاربه في غايه
البساطه وهي كالتالي اذا بدانا من عدد
زوجي واضفنا اليه اثنين كل مره سنحصل على
سلسله لانهائيه من الاعداد الزوجيه اذا
يمكننا فقط استخدام داله رانج وجعلها تقفز
بخطوتين كل مره لماذا لم نفكر في هذا من
الاول ببساطه لانه لدينا مشكله واحده وهي
ان المستخدم قد يحدد رقم بدايه فردي في
ستارت وستنتج الرانج اعدادا فرديه وهي
نتيجه لا نريدها اطلاقا هناك حل بسيط هو
ان نتحقق اذا كان المستخدم ادخل عدد بدايه
فردي اذا كان كذلك سنقوم باضافه واحد
للعدد المدخل وهكذا سيصبح عددا زوجيا ثم
نبدا الرنج منه اذا كان العدد المدخل
زوجيا
فسنبقى الاعداد من ستارت حتى اند مع القفز
خطوتين كل مره والا فسنعيد نطاق الاعداد
من ارت زائد واحد حتى ان طبعا مع القفز
خطوتين كل مره دعنا نجرب
الكود الان دع نقيس
اداءه رائع جدا هذ هذه المقاربه استغرقت
38 ملي ثانيه وهذا اسرع من الكود في
المستوى الاول ب 84 مره فرق كبير وملحوظ
كان هناك اكواد معقده وصعبه واكواد يمكن
استخدام تقنيات الحوسبه المتوازيه ودعم
الجي بي يو فيها ولكن ادائها لم يكن رائعا
هذا الكود البسيط الذي يمكن ان يكتبه اي
شخص مبتدئ في البرمجه هو الكود الاكثر
فعاليه تذكر جيدا ان اقوى مهارات البرمجه
تتلخص في التفكير الموجه بالحلول لا في
قدرتك على كتابه الاكواد او حفظها كانت
هذه سبع مستويات من الكود ادناها المقاربه
السادش واعلاها المقاربه الابسط ويظهر على
الشاشه الان مقارنه لاداء الاكواد يمكننا
عمل حلقات مشابهه ولكن مع مسائل اكثر
صعوبه او مشاكل رياضيه في العالم الحقيقي
اخبروني في التعليقات اذا احببتم هذا
النوع من الفيديوهات
وسنكرس والاشتراك لعل هذه المواد تصل الى
المزيد من الاشخاص تعليقاتكم واعجابات
تشجعنا على الاستمرار وتقديم الافضل شكرا
جزيلا على المتاب وجزيل الشكر موصول لرع
تنا على بيتريون المجال مفتوح لاي شخص
يريد التطوع معنا لاثراء المحتوى العربي
الى اللقاء في الحلقه القادمه والسلام
عليكم ورحمه الله وبركاته
5.0 / 5 (0 votes)