تمارين خوارزميات و هياكل البيانات

مفهوم الخوارزميات و هياكل البيانات

في البداية, ركز قليلاً حتى تفهم الفرق بين الخوارزميات (Algorithms) و هياكل البيانات (Data Structure) من حيث الطريقة التي يتم إعطاؤهما في الجامعات و المعاهد.

الخوارزميات تتعلم منها كيف تفكر و تحلل أثناء كتابة الكود حتى تصل إلى النتيحة التي تريد الحصول عليها لهذا تعتبر مدخل البرمجة.
هياكل البيانات بشكل عام هي كيف تدمج بين الخوارزميات و مفاهيم برمجة الكائنات (OOP) مثل الكلاس (Class) , الكائن (Object) , الوراثة (Inheritance) الخ..

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

هل أنا جاهز لهذه الدورة؟

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


كيف أتعلم الخوارزميات و مبادئ برمجة الكائنات؟

بالنسبة للخوارزميات, لا تقلق أبداً لأننا أعددنا دورة شاملة لتعلمها.
بالنسبة لمفاهيم برمجة الكائنات (OOP), فأيضاً لا تقلق أبداً لأنك ستتعملها بكل سهولة أثناء دراسة أي لغة برمجة من موقعنا مثل جافا, بايثون.
لذا, لتكون مستعد لهذه الدورة يجب أن تكون قد درست مادة الخوارزميات و أي لغة برمجة تريد و لا حاجة لمعرفة أكثر من لغة برمجة واحدة.

إذاً تستطيع تعلم الخوارزميات و أي لغة برمجة تريد مثل جافا أو بايثون من الصفر معنا حتى تصبح مستعد لهذه الدورة و هذه روابط مباشرة للدورات:

تعلم الخوارزميات » تعلم جافا » تعلم بايثون »

ما هي أهمية الخوارزميات و هياكل البيانات؟

الهدف الأساسي من هذه المادة هي تطوير نفسك في التحليل البرمجي لأقصى حدود ممكنة.
لهذا السبب, تعتبر هذه المادة من أهم و أصعب المواد التي يتعلمها الطلاب في المعاهد و الجامعات.

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

لمن تم إعداد هذا المرجع؟

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

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

الطريقة الصحيحة لتعلم الخوارزميات و هياكل البيانات

فكر بنفسك قبل النظر إلى الحل

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

أيضاً, لا تحاول أن تحل أي تمرين قبل قراءة المطلوب فيه بهدوء تام لأنك إن لم تفهم المطلوب منك ستقوم بالتفكير بشكل خاطئ من الأساس.


متى أنظر للحل الموضوع تحت السؤال؟

في حال حاولت كثيراً و لم تصل للحل بنفسك, هنا يجب عندها أن تشاهد الحل الموضوع في الموقع, ثم تقوم بتجربته بنفسك, في الأخير يجب أن تدرسه لتفهم سبب كتابة كل حرف فيه.


إذا استطعت حل السؤال بنفسي, هل يجب أن أشاهد الحل الذي وضعتموه أنتم؟

نعم ننصح بذلك لأن مشاهدة أكثر من حل و تعلم أكثر من أسلوب في الحل أمر مفيد جداً لك لأنه سيزيد قدراتك بشكل كبير في التحليل و حل المشاكل البرمجية.
من ناحية أخرى, أحياناً تقوم بحل السؤال و لكنك لا تلاحظ وجود مشاكل منطقية في الكود.

تجربة إيجاد الحل بأكثر من لغة

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


لما وضعتم حلول التمارين بأكثر من لغة؟

هناك عدة أسباب لذلك, منها:

  • منها لتتأكد بنفسك أن المنطق البرمجي يطبق على جميع اللغات بكل سهولة.

  • حتى لا نجبرك على التعلم بلغة محددة. اللغة التي تعرفها طبّق عليها.

  • تحويل الكود من لغة لأخرى أمر سهل جداُ علينا حيث أننا نقوم أولاً بحل السؤال بلغة واحدة ثم نقوم بكتابة الحل المرادف له في اللغات الأخرى.

نظرة على أقسام و دروس الدورة

بعد تجربة كبيرة في شرح مادة الخوارزميات و هياكل البيانات لطلاب المعاهد و الجامعات وجدنا أن أفضل طريقة لتقسيم دروس الدورة هي التالية:

  • قسم خاص للتمارين التي يطلب فيها من الطالب رسم أشكال هندسية.

  • قسم خاص للتمارين التي يطلب فيها من الطالب التعامل مع الأرقام و النصوص.

  • قسم خاص للتمارين التي يطلب فيها من الطالب إجراء عمليات حسابية.

  • قسم خاص للتمارين التي يطلب فيها من الطالب تقسيم كلاسات المشروع.

  • قسم خاص للخوارزميات المعروفة عالمياً و التي يطلب فيها من الطالب إجراء بحوث عنها.

  • قسم خاص ستتعلم فيه كيف تقيس أداء الخوارزميات.

إذاً في كل قسم ستركز على نوع محدد من التمارين و لكنك في النهاية ستتعلم كل شيء إن شاء الله.

هل سيتم شرح الكود الموضوع في الحل

على الأغلب كلا, لن نقوم بشرح الكود المكتوب لأننا سبق و علمناك بتفصيل ممل كيف تقوم بتحليل أي كود جاهز في دورة الخوارزميات.
من ناحية أخرى, إذا كنت قد درست أي لغة برمجة مثل جافا أو بايثون من موقعنا فكن على يقين أن كل دالة مستخدمة في الكود قد قمنا بشرحها بتفصيل شامل من قبل.

أيضاً, سنحاول دائماً وضع أسهل الحلول التي يمكن أن يفهمها الجميع و قد نضع أكثر من حل للتمرين الواحد إذا وجدنا أن ذلك سيكون مفيداً لكم.

في الدرس التالي ستبدأ بالتحدي الأول.