المدونة--الفصل الأولالذكاء الاصطناعي 1-1هياكل البيانات في الذكاء الاصطناعي | الوحدة الأولى | الدرس الثاني

هياكل البيانات في الذكاء الاصطناعي | الوحدة الأولى | الدرس الثاني

هياكل البيانات في الذكاء الاصطناعي

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

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

هياكل البيانات في الذكاء الاصطناعي

لذا قم بقراءة أهداف التعلُّم بعناية، ثم أعد قراءتها وتأكَّد من تحصيل كافة محتوياتها بعد انتهائك من دراسة الموضوع.

أهداف التعلُّم

  • تصنيف هياكل البيانات.
  • معرفة أهمية هياكل البيانات في الذكاء الاصطناعي.
  • التمييز بين هياكل البيانات الأوّلية وغير الأوّلية.
  • تحديد الفرق بين هيكل بيانات المُكدِّس وهيكل بيانات الطابور.
  • تحديد الفرق بين هيكل بيانات القائمة وهيكل بيانات القائمة المرتبطة.
  • تطبيق هيكل بيانات المُكدِّس باستخدام لغة برمجة البايثون.
  • تطبيق هيكل بيانات الطابور باستخدام لغة برمجة البايثون.

هيا لنبدأ!

أهمية هياكل البيانات في الذكاء الاصطناعي (The Importance of Data Structure in AI)

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

إذا لم توافر كافة البيانات، سيحدث ما يلي:

  • لن تتعلم خوارزميات الذكاء الاصطناعي الأنماط.
  • لن تقوم بالتنبؤات.
  • لن تتمكن من أداء المهام بفاعلية.

تلعب البيانات دورًا رئيسًا في تشكيل قدرات وإمكانات صُنع القرار لدى أنظمة الذكاء الاصطناعي.

ما هي هياكل البيانات (Data Structure

هياكل البيانات هي تقنية لتخزين وتنظيم البيانات في الذاكرة لاستخدامها بكفاءة.

هياكل البيانات لها أهمية كبيرة في الذكاء الاصطناعي:

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

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

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

يُمكن تصنيف هياكل البيانات على النحو الآتي:

  • هياكل البيانات الأولية.
  • هياكل البيانات غير الأولية.

معلومة

يُطلق على البيانات البسيطة كذلك البيانات الأولية أو الخادم أو الأساسية.

يوضِّح المُخطَّط التالي تصنيف هياكل البيانات.

هياكل البيانات في الذكاء الاصطناعي

لمعرفة المزيد من المعلومات عن هياكل البيانات وأهميتها، ثم بالاطّلاع على الرابط التالي:

هياكل البيانات Data Structures – أكاديمية حسوب

هياكل البيانات الأوليّة (Primitive Data Structures)

يُشار إلى هياكل البيانات الأولية باسم هياكل البيانات الأساسية في لغة بايثون.

يحتوي هذا النوع على من الهياكل على قيم بسيطة للبيانات.

تُخبر أنواع البيانات البسيطة المُترجم بنوع البيانات التي يُخزنها.

هياكل البيانات الأولية في لغة البايثون هي:

معلومة

تُستخدم أنواع مُختلفة من البيانات لتطبيقات الحاسب ومهامه المُختلفة بناء على ما يتطلبه المشروع والقيود المفروضة على الذاكرة.

هياكل البيانات غير الأوليّة (Non-Primitive Data Structures)

هياكل البيانات غير الأولية هي هياكل متخصصة تُخزن مجموعة من القيم، يكتبها المبرمج ولا تُعرف بلغة البايثون مثل هياكل البيانات الأولية.

يُمكن تقسيم هياكل البيانات غير الأولية إلى نوعين:

هياكل البيانات في الذكاء الاصطناعي

هياكل البيانات الخطية Linear Data Structures  

تُخزن هياكل البيانات الخطية عناصر البيانات في تسلسل معين.

يوجد نوعان من هياكل البيانات الأكثر استخدامًا في الحياة اليومية وهما:

  • المُكدّس Stack

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

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

تعريف هام

قاعدة المُضاف آخرًا يَخرُج أولًا (Last In First Out (LIFO) Rule)

آخر عنصر مُضاف يمكِن الوصول إليه أولًا.

معلومة

قد يكون حجم المُكدّس ثابتًا أو مُتغيرًا ديناميكيًا، تُطبق لغة بايثون المُكدّسات باستخدام القوائم.

العمليات في المُكدّس Operation on the stack

هناك عمليتان رئيستان في المُكدّس:

  • إضافة عنصر (Push): تُستخدم لإضافة عنصر في قمة المُكدّس.
  • حذف عنصر (Pop): تُستخدم لإزالة عنصر من قمة المُكدّس.

عملية إضافة عنصر Push Operation

يُطلق على عملية إضافة عنصر جديد إلى المُكدّس اسم إضافة عنصر.(Push)

يستخدم المُكدّس مؤشرًا يُطلق عليه مؤشر الأعلى (Top)، ويشير إلى العنصر الموجود في قمة المُكدّس، وعند إضافة عنصر جديد إلى المُكدّس:

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

هياكل البيانات في الذكاء الاصطناعي

فيض المُكدّس Stack Overflow

يتميز المُكدّس بسعة تخزينية مُحددة تعتمد على ذاكرة الحاسب.

إذا كانت الذاكرة ممتلئة، فإن إضافة عنصر جديد سينتج عنها مشكلة فيض المُكدّس (Stack Overflow). ويقصد بها تجاوز السعة، لذا يجب التحقق من امتلاء ذاكرة المُكدّس قبل إضافة أي عنصر جديد.

عملية حذف عنصر Pop Operation

يُطلق على عملية حذف عنصر من المُكدّس اسم حذف عنصر (Pop).

عند حذف عنصر من المُكدّس:

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

غيض المُكدّس Stack Underflow

إذا كنت ترغب في حذف عنصر من المُكدّس، عليك التحقق أولاً من المُكدّس يحتوي على عنصر واحدة على الأقل، فإذا كان المُكدّس فارغًا، سينتج عن ذلك مشكلة غيض المُكدّس (Stack Underflow) ويُقصد بها الانخفاض عن الحد الأدنى للسعة. 

بإمكانك مراجعة محتوى موضوع “هياكل البيانات في الذكاء الاصطناعي” من بدايته وحتى نهاية هذا القسم، من خلال الرابط التالي:

المُكدّس في لغة البايثون (Stack in Python)

تُمثل المُكدّسات في لغة البايثون باستخدام القوائم التي بدورها تُقدم بعض العمليات التي يُمكن تطبيقها مباشرة على المُكدسات.

هياكل البيانات في الذكاء الاصطناعي

معلومة

تُطبِّق عملية إضافة عنصر للمُكدِّس في لغة البايثون باستخدام دالة append.

ستشاهد مثالاً على تطبيق المُكدّس في لغة بايثون:

  1. أنشئ المُكدّس لتخزين الأرقام (1،21،32،45).
  2. استخدم عملية حذف عنصر (Pop) من المُكدّس مرتين لحفظ العنصرين الأخيرين (32،45) من المُكدّس.
  3. استخدم عملية إضافة عنصر (Push) إلى المُكدّس لإضافة عنصر جديد (78) إلى المُكدّس.

مفكرة جوبيتر (Jupyter Notebook)

في هذه الوحدة سنكتب برنامجًا بلغة بايثون باستخدام مفكرة جوبيتر (Jupyter Notebook).

هي عبارة عن تطبيق الويب المستخدم لإنشاء المستندات الحاسوبية ومشاركتها.

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

ستسخدم الإصدار غير النتصل بالإنترنت (Offline) من مفكرة جوبيتر، وأسهل طريقة لتثبيته محليًا هي من خلال أناكوندا (Anaconda) وهي منصة توزيع مفتوح المصدر للطلبة والهواة، ويمكنك تنزيلا وتثبيتها من الرابط التالي:

https://www.anacoda.com/products/distribution

هياكل البيانات في الذكاء الاصطناعي

وسيتم تثبيت لغة بايثون ومفكرة جوبيتر تلقائيًا.

لفتح مفكرة جوبيتر (Jupyter Notebook):

  1. اضغط على Start (بدء).
  2. ثم اضغط على Anaconda3 (أناكوندا 3).
  3. اختر Jupyter Notebook (مفكرة جوبيتر).

ستظهر الصفحة الرئيسة لمفكرة جوبيتر في المتصفح.

هياكل البيانات في الذكاء الاصطناعي

لإنشاء مُفكرة جوبيتر جديدة:

  1. في الزاوية اليمنى العلوية من شاشتك، اضغط على New (جديد).
  2. حدِّد (ipykernel) Python 3 (بايثون 3).
  3. سيتم فتح المفكرة الخاصة بك في علامة تبويب جديدة في المتصفح الخاص بك.

الآن وبعد أن أصبحت مفكرتك جاهزة، حان الوقت لكتابة برنامجك الأول وتشغيله فيها.

لإنشاء برنامج في مفكرة جوبيتر:

  1. أكتب الأوامر داخل خلية المقطع البرمجي.
  2. اضغط على Run (تشغيل).
  3. سيتم عرض النتيجة تحت الأوامر.

هياكل البيانات في الذكاء الاصطناعي

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

لاحظ أن

يمكِنك تشغيل برنامجك بالضغط على Enter + Shift.

حان الوقت لحفظ مفكرتك.

لحفظ المفكرة الخاص بك:

  1. اضغط على File (ملف).
  2. اختر Save as (حفظ كـ).
  3. اكتب اسمًا لمفكرتك.
  4. اضغط على Save (حفظ).

لتشاهد المثال في الشكل 1.15 في مفكرة جوبيتر:

  1. أنشئ المُكدّس لتخزين مجموعة من الأرقام (1،21،32،45).
  2. استخدم عملية حذف عنصر (Pop) من المُكدّس مرتين لحذف العنصرين الأخيرين منها.
  3. استخدم عملية إضافة عنصر (Push) إلى المُكدّس لإضافة عنصر جديد إليه.

هياكل البيانات في الذكاء الاصطناعي

خطأ الفهرس (IndexError)

ستلاحظ ظهور خطأ عندما كتبتَ أمر حذف عنصر من المُكدّس الفارغ وتسبب هذا في غَيْض المُكدّس (Stack Underflow). عليك دومًا التحقُّق من وجود عناصر في المُكدّس قبل محاولة حذف عنصر منه.

بإمكانك مراجعة محتوى موضوع “هياكل البيانات الذكاء الاصطناعي” بدايةً من عنوان “المُكدّس في لغة البايثون” وحتى هذه النقطة، من خلال الرابط التالي:

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

  • لإضافة عنصر إلى المُكدّس، اضغط على الرقم 1 من قائمة البرنامج.
  • لحذف عنصر من المُكدّس، اضغط على الرقم 2 من قائمة البرنامج.
  • للخروج من البرنامج، اضغط على الرقم 3 من قائمة البرنامج.

هياكل البيانات في الذكاء الاصطناعي

الطابور (Queue)

تصادف عادةً طوابير في حياتك اليومية.

الطابور الأكثر شيوعًا هو طابور انتظار السيارات عند إشارة المرور.

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

الطابور هو هيكل البيانات الذي يُتبع قاعدة بيانات المضاف أولاً يخرج أولاً

(First In First Out – FIFO)، مما يعني أن كل عنصر في الطابور يُقدم بالترتيب نفسه الذي وصل به إلى الطابور.

تعريف هام

قاعدة المُضاف أولًا يَخرُج أول (First In First Out (FIFO) Rule):

العنصر الأول المُضاف إلى القائمة يُعالَج أولًا، والعنصر الأحدث يُعالَج آخرًا.

لمعرفة المزيد من المعلومات عن “الطابور Queue”، قم بالاطّلاع على الرابط التالي:

العمليات في الطابور Operations in the Queue

هناك عمليتان رئيستان في الطابور:

  • إضافة عنصر للطابور (Enqueue): تُستخدم العملية لإضافة عنصر في آخر الطابور.
  • حذف عنصر من الطابور (Dequeue): تُستخدم العملية لحذف عنصر من مقدمة الطابور.

 تعريفات هامة

المؤشر (Pointer)

المؤشر هو متغيّر يُخزِّن أو يُشير إلى عنوان متغيّر آخر. المؤشر يشبه رقم الصفحة في فهرس الكتاب الذي يُسهِّل على القارئ الوصول إلى المحتوى المطلوب.

الفهرس (Index)

الفهرس هو رقم يُحدِّد موضع العنصر في هيكل البيانات.

هياكل البيانات في الذكاء الاصطناعي

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

عملية إضافة عنصر للطابور Enqueue Operation 

يُطلق على عملية إضافة عنصر جديد إلى الطابور اسم إضافة عنصر للطابور

(Enqueue).

لإضافة عنصر جديد إلى الطابور:

  • تتم زيادة قيمة المؤشر الخلفي بقيمة واحد بحيث يٌشير إلى موضع العنصر الجديد الذي سيُضاف.
  • تتم إضافة العنصر.

لاحظ أن

لا يُمكنك إضافة عنصر أو حذفه من وسط الطابور.

هياكل البيانات في الذكاء الاصطناعي

عملية حذف عنصر من الطابور Dequeue Operation

يُطلق على عملية حذف عنصر من الطابور اسم حذف عنصر من الطابور (Dequeue).

لحذف عنصر من الطابور:

  • يُحذف العنصر المشار إليه بالمؤشر الأمامي.
  • تتم زيادة قيمة المؤشر الأمامي بقيمة واحد بحيث يُشير إلى العنصر الجديد في الطابور التالي.

معلومة

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

الطابور في لغة البايثون (Queue in Python)

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

بالإضافة إلى ذلك، يُمكن إضافة عنصر في نهاية القائمة وحذف عنصر من بداية القائمة.

ستتعلّم فيما يلي الصيغ العامة لبعض العمليات التي يُمكن تنفيذها على الطابور:

هياكل البيانات في الذكاء الاصطناعي

تُستخدم طريقة listName.pop() لكل من هياكل البيانات المُكدّس والطابور، فمثلاً:

عندا استخدامها في المُكدّس، لا تتطلب الطريقة أي معامل.

عند استخدامها في الطابور، تتطلب الطريقة إضافة صفر إلى المعامل.

سنستعرض هنا مثالاً على تطبيق الطابور في لغة بايثون:

  1. أنشئ طابور لتخزين مجموعة من الأرقام (1،21،32،45).
  2. استخدم عملية حذف عنصر من الطابور لحذف العنصرين الأوليّن منه.
  3. استخدم عملية إضافة عنصر إلى الطابور لإضافة عنصر جديد إليه.

هياكل البيانات في الذكاء الاصطناعي

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

لكي تشاهد ما قد يحدث عندما تحاول حذف عنصر من طابور فارغ، عليك أولاً أن تُفرغ الطابور من العناصر.

هياكل البيانات في الذكاء الاصطناعي

بإمكانك مراجعة محتوى موضوع “هياكل البيانات في الذكاء الاصطناعي بدايةً من عنوان “عملية إضافة عنصر للطابور” وحتى هذه النقطة، من خلال الرابط التالي:

تطبيقات على الطابور Queue Applications

أحد الأمثلة على تطبيقات الطابور في علوم الحاسب هو طابور الطباعة.

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

المُكدّس والطابور باستخدام وحدة الطابور النمطية (Stack and Queue Using Queue Module)

يمكن اعتبار القائمة في لغة بايثون بمثابة طابور وكذلك مُكدّس.

تقدم لغة البايثون الوحدة النمطية للطابور (Queue Module) وهي طريقة أخرى لتنفيذ هيكلي البيانات الموضحين.  

تتضمن الوحدة النمطية للطابور بعض الدوال الجاهزة للاستخدام التي يمكن تطبيقها على كل من المكدس والطابور.

تُستخدم طرائق الوحدة النمطية للطابور مع كل من المكدس والطابور.

ستستخدم وحدة الطابور النمطية لإنشاء طابور.

في هذا المثال عليك:

  • استيراد الوحدة النمطية للطابور (Queue) لاستخدام طرائق الطابور.
  • إنشاء طابور فارغ باسم myQueue (طابوري).
  • إضافة العناصر a، b، c، d، e إلى الطابور myQueue (طابوري).
  • طباعة عناصر الطابور.

هياكل البيانات في الذكاء الاصطناعي

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

أنشئ برنامجًا للتحقق مما إذا كان الطابور فارغًا أم ممتلئًا.

هياكل البيانات في الذكاء الاصطناعي

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

ستستخدِم وحدة الطابور لإنشاء مُكدّس فارغ.

مثال: الطباعة Print

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

  • افترض أنّ سعة الطابعة هي فقط 7 ملفات، ولكن في الوقت نفسه، تحتاج إلى طباعة 10 ملفات من الملف A إلى الملف J.
  • اكتب برنامجًا يُمثل طابور الطباعة منذ بدء أمر الطباعة الأول A حتى الانتهاء من كل أوامر الطباعة.
  • أضق اللبنة التي تؤكد أنّ طابور أوامر الطباعة فارغ.

يمكِنك استخدام الخوارزمية الآتية:

هياكل البيانات في الذكاء الاصطناعي

هياكل البيانات في الذكاء الاصطناعي

بإمكانك مراجعة محتوى موضوع “هياكل البيانات في الذكاء الاصطناعي” بدايةً من عنوان “تطبيقات على الطابور” وحتى نهاية هذا القسم، من خلال الرابط التالي:

هياكل البيانات الثابتة والمتغيِّرة (Static and Dynamic Data Structures)

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

  • هياكل البيانات الثابتة Static Data Structure

في البيانات الثابتة يكون حجم الهيكل ثابتًا، وتُخزن عناصر البيانات في مواقع الذاكرة المتجاورة.

تُعد المصفوفة Array المثال الأبرز لهياكل البيانات الثابتة.

  • هياكل البيانات المتغيرة Dynamic Data Structure

في هياكل البيانات المتغيرة لا يكون حجم الهيكل ثابتًا ولكن يُمكن تعديله أثناء تنفيذ البرنامج، حسب العمليات المُنفّذة عليه.

تُصمم هياكل البيانات المتغيرة لتسهيل تغيير حجم هياكل البيانات أثناء التشغيل.

تُعد القائمة المترابطة Linked List المثال الأبرز لهياكل البيانات المتغيرة.

هياكل البيانات في الذكاء الاصطناعي

تخصيص الذاكرة (Memory Allocation)

تنتمي القوائم المترابطة Linked List إلى هياكل البيانات المتغيرة، وهذا يعني أنّ عقد القائمة المترابطة لا تُخزّن في مواقع الذاكرة المتجاورة مثل البيانات في المصفوفات، ولهذا السبب تحتاج إلى تخزين المؤشر من عقدة إلى أخرى.

القائمة المترابطة (Linked Lists)

القائمة المترابطة هي نوع من هياكل البيانات الخطية، وهي واحدة من هياكل البيانات الأكثر شهرة في البرمجة.

القائمة المترابطة نشبه سلسلة من العقد.

تحتوي كل عقدة على حقلين:

  • حقل البيانات حيث تُخزن فيه البيانات.
  • حقل يحتوي على المؤشر الذي يُشير إلى العقدة التالية.
  • يٌستثنى من هذا العُقدة الأخيرة التي لا يحمل فيها حقل العنوان أي بيانات.
  • إحدى مزايا القائمة المترابطة هي أن حجما يزداد أو يقل بإضافة أو حذف العقد.

هياكل البيانات في الذكاء الاصطناعي

تعريفات هامة

القائمة المترابطة (Linked List)

القائمة المترابطة هي نوع من هياكل البيانات الخطيَّة التي تشبه سلسلة من العُقد.

العُقدة (Node)

العُقدة هي اللبنة الفردية المُكوَّنة لهيكل البيانات وتحتوي على البيانات ورابط واحد أو أكثر من الروابط التي تربطها بالعُقد الأخرى.

إليك مثالاً على القائمة المترابطة للأعداد الصحيحة.

تتكون القائمة المترابطة من خمس عُقد.

هياكل البيانات في الذكاء الاصطناعي

العقدة في القائمة لا يكون لها اسم، وما تعرفه عنها هو عنوانها (الموقع الذي تُخزن فيه العقدة في الذاكرة).

 للوصول إلى أي عُقدة بالقائمة، تحتاج فقط إلى معرفة عنوان العقدة الأولى، ثم تتبع سلسلة العقدة للوصول إلى العقدة المطلوبة.

معلومة

القيمة الفارغة تعني أنها بلا قيمة، أو غير مُحدّدة، أو فارغة. على الرغم من أنه في بعض الأحيان يُستخدم الرقم 0 للإشارة إلى القيمة الفارغة إلا أنه رقم محدد وقد يُشير إلى قيمة حقيقية.

على سبيل المثال، إن كنت ترغب في الوصول إلى العقدة الثالثة في القائمة لمعالجة البيانات التي تحتوي عليها، عليك البدء من العُقدة الأولى للوصول إلى الثانية، ومن الثانية إلى الثالثة.

  • عنوان العقدة ألولى مخزن في متغير خاص (مُستقل) يُطلق عليه عادةً الرأس

(Head).

  • قيمة مؤشر العقدة الأخيرة في القائمة قيمة فارغة (Null)، ويمثل بالرمز.
  • عندما تكون القيمة فارغة، يشير مؤشر الرأس إلى القيمة الفارغة (Null).

إليك مثالاً توضيحيًا على القائمة المترابطة في الشكل 1.31، كما ذُكر من قبل فإن كل عقدة تتكون من بيانات ومؤشر يشير إلى العقدة التالية، بحيث تُخزن كل عُقدة في الذاكرة في عنوان محدد.

هياكل البيانات في الذكاء الاصطناعي

لمعرفة المزيد من المعلومات عن القوائم المترابطة، قم بالاطّلاع على الرابط التالي:

القائمة المترابطة في لغة البايثون (Linked Lists in Python)

لا توُفر لغة بايثون نوع بيانات مُحدد مُسبقًا للقوائم المُترابطة.

عليك إنشاء نوع البيانات الخاص بك، أو استخدام مكتبات بايثون التي توفر تمثيلاً لهذا النوع من البيانات.

لإنشاء قائمة مترابطة، استخدم فئات البايثون.

في المثال الموضح أدناه، ستُنشئ قائمة مترابطة مكونة من ثلاث عقد، كل واحدة تضم يومًا من أيام الأسبوع.

هياكل البيانات في الذكاء الاصطناعي

الفئة (Class)

الفئة هي هيكل بيانات معرّف بواسطة المُستخدِم، ويحتوي على أعضاء البيانات (السمات Properties)، الطرائق (السلوك behavior) الخاصة بها. وتُستخدَم الفئات كقوالب لإنشاء الكائنات.

ستُنشئ أولاً عقدة باستخدام الفئة.

الخطة التالية هي إنشاء قائمة مترابطة تحتوي على عقدة واحدة، وهذه المرة سنستخدم مؤشر الرأس للإشارة إلى العقدة الأولى.

هياكل البيانات في الذكاء الاصطناعي

أضف الآن المزيد من العقد إلى القائمة المترابطة.

إضافة العقدة إلى القائمة المترابطة Add a Node to a Linked List

لتتمكن من إضافة عقدة جديدة، اتبع الخطوات التالية:

  • يجب أن يشير مؤشر العقدة الأولى إلى عنوان العقدة الجديدة، حتى تصبح العقدة الجديدة هي العقدة الثانية.
  • يجب أن يشير مؤشر العقدة الجديدة (الثانية) إلى العقدة الثالثة، بهذه الطريقة لن تحتاج إلى تغيير العناصر عند إضافة عنصر جديد في المنتصف، تقتصر العملية على تغيير قيم العناوين في العقدة التي تُسرع من عملية الإضافة في حالة القوائم المترابطة، مقارنة بحالة القوائم المتسلسلة.

مثال، لديك قائمة مترابطة من عنصرين 99،12 وتريد إدراج العنصر37 كعنصر ثانٍ بالقائمة، في النهاية سيكون لديك قائمة من ثلاث عناصر: 12،37،99

هياكل البيانات في الذكاء الاصطناعي

حذف العقدة من القائمة المترابطة Delete a Node from a Linked List

لحذف عقدة، عليك تغيير مؤشر العقدة التي تسبق العقدة المراد حذفها إلى مؤشر العقدة المحذوفة.

أصبحت العقدة المحذوفة الثانية عبارة عن بيانات غير مفيدة (Useless Data) وستُخصص مساحة الذاكرة التي تشغلها لاستخدامات أخرى.

مثال/ لديك قائمة مترابطة من ثلاث عناصر 12،37،99 وترغب في حذف العنصر 37 في النهاية سيكون لديك قائمة من عنصرين 12،99.

هياكل البيانات في الذكاء الاصطناعي

بإمكانك مراجعة محتوى موضوع “

هياكل البيانات في الذكاء الاصطناعي” بدايةً من عنوان “هياكل البيانات الثابتة والمتغيرة” وحتى نهاية هذا القسم، قم بالاطّلاع على الرابط التالي:

اختبر تحصيلك لمحتوى الموضوع من خلال الرابط التالي:

الواجب الإلكتروني

إلى هنا يكون قد انتهى موضوع “

هياكل البيانات في الذكاء الاصطناعي”، لا تنسوا مراجعة أهداف التعلُّم أعلى المقال، وانتظرونا في الموضوع القادم!

روابط هامة

مقررات الفصل الدراسي الأول

مشاركة المقال عبر:

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *