تعرف على هياكل البيانات Data Structures في علوم الحاسوب

تعرف على هياكل البيانات Data Structures في علوم الحاسوب

شارك هذا المقال:



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

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

تنقسم علوم الحاسوب إلى نوعين، أولهما العلوم النظرية مثل  النظرية الحاسوبية computational Theory وثانيهما هو العلوم التطبيقية مثل تصميم الأجهزة وتطوير البرمجيات software والخوارزميات Algorithms والطريقة التي يتفاعل بها البشر مع التكنولوجيا.  أما عن علماء الحاسوب فهم من يقومون بحل المشكلات، عندما يتلقى عالَم الحاسوب مشكلة ما يقوم العلماء يجمع المعلومات ويتواصلون مع أجهزة الحاسوب باستخدام لغات البرمجة والمنطق ( البرمجة النصية) ثم  ينشؤون  مجموعة من القواعد أو التعليمات للحاسوب لحل المشكلة.

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

لماذا تتعلم مبادئ علوم الحاسوب؟

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

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

فيديو يوضح أكثر من مائة مفهوم في علوم الحاسوب بسهولة وبسرعة

هياكل البيانات - Data Structures

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

 

توضيح لتصنيفات هياكل البيانات

هيكل البيانات الخطية - Linear Data structure: 

هو هيكل البيانات التي يتم فيه ترتيب عناصر البيانات بشكل تسلسلي أو خطي، حيث يتم إرفاق كل عنصر بالعناصر المجاورة السابقة والتالية. ويمكن تصنيف هذا النوع إلى نوعين فرعيين أولهما هيكل البيانات الثابتة - Static data structure، والتي يكون لها حجم ذاكرة ثابت ومن السهل الوصول إلى العناصر الموجودة فيها، والنوع الثاني هو هيكل البيانات الديناميكي - Dynamic data structure حيث يكون حجم الذاكرة غير ثابت ويمكن تحديثه بشكل عشوائي أثناء وقت التشغيل والذي يمكن اعتباره فعالاً فيما يتعلق بتعقيد حجم الذاكرة (المساحة). من الأمثلة على هياكل البيانات الخطية هي Array  وStack و Queue و Linked list.  

هيكل البيانات غير الخطية - Non-Linear Data structure:

 هي هياكل البيانات التي لا توضع فيها عناصر البيانات بشكل تسلسلي أو خطي. في هيكل البيانات غير الخطية لا يمكننا تخطي جميع العناصر في عملية تشغيل واحدة فقط، ومن الأمثلة على هياكل البيانات غير الخطية الأشجار -  Trees حيث تخزن الأشجار مجموعة العناصر والمعروفة بالعقد، وفق طريقةٍ هرمية إضافة لإمكانية وجود قيم فرعية متعددة يطلق عليها أطفال الشجرة، والنوع الآخر هو الرسوم البيانية - Graphs والتي تقوم بتخزين العناصر وفق طريقة غير خطية، حيث تتكون تلك الرسوم من مجموعة محددة من العقد وهي القمم أو الرؤوس والمرتبطة ببعضها عن طريق الحواف أو الخطوط .

الخوارزميات -Algorithms

 

توضيح لوظيفة الخوارزمية

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

ولكن هل كل التعليمات المكتوبة الخاصة بالبرمجة عبارة عن خوارزميات؟  لكي تكون بعض التعليمات خوارزمية، يجب أن تتمتع بعدة خصائص مثل:

  • الوضوح: يجب أن تكون الخوارزمية واضحة ولا لبس فيها وأن تؤدي خطواتها إلى معنى واحد فقط وأن تكون كل خطوة في الخوارزمية فعالة، أي أن كل خطوة يجب أن تؤدي بعض العمل.

  • مُدخلات ومخرجات مُحددة جيدًا: يجب أن تكون مدخلات ومخرجات الخوارزمية محددة جيدً، يجب وضوح الناتج الذي سيتم تحقيقه. كما أنه يجب أن تكون حتمية حيث تعطي نفس المخرجات لنفس حالة الإدخال.

  • محدودة: يجب أن تكون الخوارزمية محدودة، أي يجب أن تنتهي بعد وقت محدد.

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

  • مستقلة عن اللغات البرمجية: يجب أن تكون الخوارزمية المصممة مستقلة عن اللغة، أي يجب أن تكون مجرد تعليمات بسيطة يمكن تنفيذها بأي لغة برمجية، وتكون المخرجات هي نفسها كما هو متوقع.

7  خوارزميات على كل مبرمج تعلمها

أنواع الخوارزميات

هناك عدة أنواع من الخوارزميات المتاحة، إليك نبذة مختصرة عن بعض الخوارزميات المهمة:

1. خوارزمية Brute Force: تعد أبسط الخوارزميات في حل المشاكل، فهي تقنية بديهية ومباشرة لحل المشكلات يتم فيها تعداد جميع الطرق الممكنة أو جميع الحلول الممكنة لمشكلة معينة. على سبيل المثال،  استكشاف جميع المسارات إلى سوق قريب للعثور على الحد الأدنى من أقصر الطرق، ترتيب الكتب في الرف باستخدام جميع الاحتمالات لتحسين مساحات الرف، وما إلى ذلك.

2. خوارزمية Recursive: تعتمد هذه الخوارزمية على التكرار حيث يتم تقسيم المشكلة إلى عدة أجزاء فرعية ويتم تكرار نفس الوظيفة. 

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

4. خوارزمية Searching: هي تلك المستخدمة للبحث عن عناصر أو مجموعات من العناصر في هيكل بيانات معينة. يمكن أن تكون من أنواع مختلفة بناءً على نهجها أو بنية البيانات التي يوجد بها العنصر.

5. خوارزمية Sorting: هو ترتيب مجموعة من البيانات بطريقة معينة وفقًا للمتطلبات. تسمى الخوارزميات التي تساعد في أداء هذه الوظيفة خوارزميات الفرز -Sorting وتستخدم بشكل عام لفرز مجموعات البيانات بطريقة تزايدية أو تناقصية.

6. خوارزمية Hashing: يعمل هذا النوع من الخوارزميات بشكل مشابه لخوارزمية البحث - Searching، و لكنها تحتوي على فهرس بمفاتيح مختلفة حيث يتم تعيين مفتاح لبيانات محددة.

7. خوارزمية Divide and Conquer: تقسم هذه الخوارزمية مشكلة إلى مشاكل فرعية، وتقوم بحل المشكلات الفرعية ثم تدمج الحلول معًا للحصول على الحل النهائي. وتشمل ثلاث مراحل وعم التقسيم، والحل والتجميع.

8. خوارزمية Greedy: في هذا النوع من الخوارزميات، يتم بناء الحل جزء بجزء. حل الجزء التالي مبني على أساس الفائدة الفورية للجزء التالي. سيتم اختيار الحل الوحيد الذي يعطي أكبر فائدة كحل للجزء التالي.

9. خوارزمية Dynamic Programming: تستخدم هذه الخوارزمية حلول موجودة بالفعل لتجنب الحساب المتكرر لنفس الجزء من المشكلة. يقسم المشكلة إلى مشاكل فرعية متداخلة ويحلها.

10. خوارزمية Randomized: نستخدم في هذه الخوارزمية رقمًا عشوائيًا ليعطي فائدة فورية. الرقم العشوائي هنا هو ما يساعد في تحديد النتيجة المتوقعة.

البرمجة كائنية التوجه - Object oriented Programming

البرمجة الكائنية ( Object Oriented Programming ) أو OOP اختصارًا، هو طريقة في كتابة الكود لجعل كتابة الكود أكثر سهولة، وهي ليست خاصة بلغة بعينها وإنما تطبق في باقي لغات البرمجة. البرمجة الكائنية بشكل عام هي عبارة عن تجهيز الشكل الذي سيتم فيه حفظ المعلومات مما يجعل الوصول إليها و التعديل عليها سهل للغاية.  تسمح ال  OOP بالعمل بهياكل بيانات أفضل وقابلية إعادة الاستخدام وبالتالي توفير الجهد والمال على المدى الطويل.

لتوضيح المفهوم أكثر، تخيل أنك تدير متجرًا للحيوانات الأليفة، به الكثير من السلالات المختلفة وعليك حفظ أسمائهم وأعمارهم والأيام التي قضوها في المتجر وتفاصيل أخرى وتريد تتبع هذه المعلومات. كيف يمكنك تصميم برنامج  قابل للتعامل مع كل هذه البيانات؟ تساعدك البرمجة الكائنية على تجهيز القالب العام للمعلومات التي تنوي حفظها عن كل حيوان، بعدها، عندما تريد إدخال معلومات عن أي حيوان جديد إلى البرنامج، تقوم بجعل معلوماته نسخة من الشكل العام لقالب المعلومات عن أي حيوان ثم تقوم بإدخال البيانات. يمكننا تلخيص ما سبق في أن البرمجة كائنية التوجه هو التفكير المسبق في بنية البرنامج المطلوب والتخطيط المسبق له وتقسيمه من خلال استخدام  الأغراض (الكائنات) - objects وهي هياكل بيانات في هذه الحالة، حيث يكون لكل كائن مجموعة من الوظائف والخصائص تمكنك من إدارته واستخدامه مرارًا وتكرارًا في برامج مختلفة.  لكي تستطيع التعامل مع الكائنات يجب أن نعرّف فئة - Class الخاص بكل كائن. 

 اعرف أكثر عن البرمجة كائنية التوجه من المقال التالي من هنا 

وللبرمجة كائنية التوجه أربع مفاهيم هامة يجب علينا معرفتهم وهم:

  1. التغليف (Encapsulation): تسعى الكائنات في كل برنامج للتفاعل والوصول لبعضها البعض، لكن قد يريد المبرمج عزلها عن بعض بغرض نسخها في برامج أخرى دون القلق من تداخلها مع كائنات أخرى. لتحقيق هذا، يُغلف المبرمج كل كائن بفئات خاصة منفردة individual classes وهذا ما يُسمي ب"التغليف"، ومن خلال هذه الميزة لن تستطيع هذه الفئات التفاعل والتعديل في متغيرات وتوابع أي كائن آخر.

  2. تعدد الأشكال (Polymorphism): هي ميزة تسمح للمبرمجين بإعادة تعريف طريقة عمل جزئية معينة ضمن البرنامج بتغيير طريقة تنفيذها أو بتغيير الأجزاء التي تُنّفذ بها.

  3. التجريد (Abstraction): هي ميزة تساعد علي إخفاء خصائص من الكود الخارجي لجعل واجهة الأغراض أبسط.  يستخدم المبرمجون التجريد لأغراض متعددة منها عزل التعديلات التي تتم على الكود بحيث ينحصر التأثير بالمتغيرات الحالية لدى حدوث خطأ ما وضمان عدم انتشار التغيير إلى الكود الخارجي.

  4. الوراثة (Inheritance): تساعد هذه الميزة المبرمجين على تفادي تكرار التعليمات البرمجية المتشابهة. على سبيل المثال، تشترك عناصر كود HTML التالية: مربع نصي (Text Box)، وحقل الاختيار Select) Field)، ومربع الاختيار (Checkbox) بنفس الخصائص، ولتفادي تكرار الخصائص لكل عنصر من HTML ، يمكن تعريفها مرةً واحدةً في غرضٍ عام واحدٍ حيث ترث باقي الأغراض الخصائص والطرق اللازمة منه دون الحاجة لكتابتها عدة مرات وبالتالي يساعد هذا في تقليل حجم الكود البرمجي.

في أقل من ٥ دقائق، يشرح عبدالرحمن جمال مفهوم البرمجة الشيئية (البرمجة كائنية التوجه)



ما رأيك في هذا المقال؟

كيف تقييم نوعية المحتوى في نقرة؟

5 4 3 2 1