تعريف Data Structure and Algorithms

-

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


ما هي البيانات DATA:

البيانات عبارة عن مجموعة من الأرقام والرموز والحروف الهجائية المختلفة لتمثيل المعلومات.

اناع data structure:

  • بنية البيانات الخطية Linear Data Structure
  • بنية البيانات غير الخطية Non-Linear Data Structure.

ما هي Linear Data Structure

في هياكل البيانات الخطية، يتم ترتيب العناصر في تسلسل واحد تلو الآخر. نظرًا لأن العناصر مرتبة بترتيب معين، فهي سهلة التنفيذ.

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

من الأمثلة الشائعة لهذا النوع.

Array Data Structure 

في المصفوفة، يتم ترتيب العناصر الموجودة في الذاكرة في ذاكرة مستمرة. جميع عناصر المصفوفة من نفس النوع. ونوع العناصر التي يمكن تخزينها في شكل مصفوفات تحدده لغة البرمجة.


Stack Data Structure

في بنية بيانات المكدس Stack، يتم تخزين العناصر في مبدأ LIFO (Last In First Out). أي أن العنصر الأخير المخزن في المكدس Stack  ستتم إزالته أولاً.


Queue Data Structure

على عكس المكدس Stack، تعمل بنية بيانات قائمة الانتظار وفقًا لمبدأ FIFO(First In First Out) حيث ستتم إزالة العنصر الأول المخزن في قائمة الانتظار أولاً.


Linked List Data Structure

في هذا النوع ترتبط عناصر البيانات من خلال سلسلة من العقد nodes. وتحتوي كل عقدة node على عناصر البيانات وعنوان العقدة التالية.


ما هي Non-Linear Data Structure

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

يتم تقسيم هياكل البيانات غير الخطية أيضًا إلى هياكل بيانات قائمة على الرسم البياني والشجرة tree

من الأمثلة الشائعة لهذا النوع.

Graph Data Structure

في هذا النوع تسمى كل عقدة node قمة الرأس(vertex) ويتم توصيل كل رأس (vertex) برؤوس أخرى من خلال الحواف.


Trees Data Structure

على غرار الرسم البياني، فإن الشجرة(tree) هي أيضًا مجموعة من الرؤوس(vertices) والحواف(edges). ومع ذلك، في بنية بيانات الشجرة، يمكن أن يكون هناك حافة edge واحدة فقط بين رأسين vertices.


الجدول التالي يوضح الفرق بين النوعين 


لماذا تستخدم Data Structure and Algorithms

تعلم وتطبيق Data Structure and Algorithms في التطبيقات امر مهم جدا، والسبب في ذلك ان التطبيقات مع الوقت تنمو وتكبر بحيث تصبح أكثر تعقيدا وأكبر حجما. لذا لا بد من وجود طريقة لمعالجة هذه الأمور. هنا يأتي دور Data Structure and Algorithms

تُستخدم Data structures في مجالات مختلفة مثل:
  • انظمة التشغيل Operating system
  • الرسومات Graphics
  • تصميم الكمبيوتر Computer Design
  • علم الوراثة Genetics
  • معالجة الصورة Image Processing
  • محاكاة Simulation 
وغيرها الكثير.

عند الحديث عن تعقيدات التطبيقات مع مرور الوقت نتحدث عن مجموعة شائعة من المشاكل وهي: 

  • البحث في البيانات Data Search: من الطبيعي مع التقدم في استخدام التطبيقات زيادة حجم البيانات، وبالتالي عند البحث مثلا في 1000 منتج يكون مختلف تماما عن البحث في 1 مليون منتج. وبناء عليه كل ما كان حجم البيانات اكبر يكون البحث ابطأ
  • سرعة المعالج Processor speed: حتى مع وجود معالجات حديثة وعالية السرعة، إلا أنها  تعتبر محدودة الامكانيات إذا كانت البيانات تحتوي على مليارات السجلات.
  • طلبات متعددة Multiple requests: من الأشياء الطبيعة والافتراضية ان يوجد الاف المستخدمين يبحثون عن البيانات في وقت واحد على server،في مثل هذه الحالة قد يفشل server حتى ولو كان سريع في إتمام عملية البحث المطلوبة.

لمعالجة وتجنب هذه المشاكل يأتي دور Data Structure and Algorithms، حيث تلعب دور مهم في تنظيم البيانات بحيث لا يوجد حاجة في البحث في جميع العناصر والوصول الى البيانات المطلوبة بشكل أسرع. الامر الذي يساعد في تحسين عمليات البحث.

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

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

الفئات categories المهمة للخوارزميات:

  • خوارزميات البحث Search - خوارزمية للبحث عن عنصر في data structure.
  • خوارزميات الترتيب Sort - خوارزمية لترتيب العناصر بترتيب معين.
  • خوارزميات الإضافة Insert - خوارزمية لإضافة عنصر او عناصر في data structure.
  • خوارزميات التحديث Update - خوارزمية لتحديث عنصر موجود في data structure.
  • خوارزميات الحذف Delete - خوارزمية لحذف عنصر موجود في data structure.

تعتبر Data Structure طريقة منهجية systematic لتنظيم البيانات بهدف استخدامها بكفاءة. الشروط التالية هي الشروط الأساسية التي يجب توفرها لاستخدام Data Structure.

  • الواجهة Interface: لا بد من وجود واجهه لكل Data Structure. وتمثل الواجهة مجموعة العمليات التي تدعمها Data Structure. توفر الواجهة فقط قائمة العمليات المدعومة supported operations، ونوع المعلمات parameters التي يمكنهم قبولها وإرجاع نوع هذه العمليات.
  • التنفيذ Implementation: هنا يتم التمثيل الداخلي لهيكل البيانات. يوفر التنفيذ أيضًا تعريف الخوارزميات المستخدمة في عمليات Data Structure.

خصائص Characteristics of a Data Structure

  • التنفيذ الصحيح Correctness: يجب أن يتم تنفيذ Data structure بشكل صحيح.
  • الوقت القليل والغير معقد : يجب أن يكون وقت التشغيل أو وقت تنفيذ عمليات data structure صغيرًا قدر الإمكان.
  • Space Complexity: يجب أن يكون استخدام الذاكرة لعملية data structure أقل ما يمكن.

حالات وقت التنفيذ Execution Time Cases

عادتا يوجد ثلاث حالات تُستخدم لمقارنة وقت تنفيذ data structure المختلفة بطريقة نسبية:

  • أسوأ حالة Worst Case: السيناريو الذي تستغرق فيه عملية data structure أقصى وقت يمكن أن تحتاجه. 
  • الحالة المتوسطة Average Case: السيناريو الذي يصور متوسط وقت تنفيذ عملية data structure. 
  • أفضل حالة Best Case: السيناريو الذي يصور أقل وقت تنفيذ ممكن لعملية data structure. 

فيما يلي قائمة بالمصطلحات الأساسية التي نحتاجها في هذه السلسلة التعليمة
 
  • البيانات Data: البيانات Data عبارة عن قيم أو مجموعة من القيم.
  • عنصر البيانات Data Item: يشير عنصر البيانات إلى وحدة مفردة single unit من القيم.
  • عناصر المجموعة Group Items: تسمى عناصر البيانات المقسمة إلى عناصر فرعية كعناصر المجموعة Group Items.
  • العناصر الأولية Elementary Items: تسمى عناصر البيانات التي لا يمكن تقسيمها ب عناصر أولية Elementary Items.
  • السمة Attribute والكيان Entity: الكيان Entity يحتوي على سمات Attribute أو خصائص معينة ، والتي قد يتم تعيين قيم لها.
  • مجموعة الكيانات Entity Set: تشكل الكيانات ذات السمات attributes المتشابهة مجموعة كيان.
  • الحقل Field: الحقل هو وحدة أولية للمعلومات تمثل سمة من سمات الكيان attribute of an entity.
  • السجل Record: السجل عبارة عن مجموعة من قيم الحقول لكيان معين.
  • الملف File: الملف عبارة عن مجموعة من سجلات الكيانات في مجموعة كيانات معينة.