مصطلحات برمجية: ما هي هيكلة البيانات ؟

مصطلحات برمجية: ما هي هيكلة البيانات ؟

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

اليوم سنشرح لكم واحداً من أكثر المفاهيم البرمجية انتشاراً بين كافة المبرمجين، وهي هيكلة البيانات أو الـ Data Structures التي دائماً ما نسمعها عندما نتحدث عن الخوارزميات عادة أو أثناء بناء البرامج الخاصة بنا، لكن ما الشرح الصحيح لهيكلة البيانات؟ وما استخداماتها؟ وهل أحتاج لتعلمها لأصبح مبرمجاً جيدا؟ 

شرح هيكلة البيانات (Data Structures) بشكل مبسط

هيكلة البيانات، وباللغة الإنجليزية Data Structures، ويُرمز لها في معظم الأحيان بالـ DS، وهي في أبسط مفاهيمها طريقة محددة مُبتكرة لهيكلة وترتيب شيئ ما برمجياً. تهدف الخوارزميات إلى تحديد الطرق الممكنة لحل مشكلة معينة عبر اتباع مجموعة من الخطوات، وتأتي هيكلة البيانات لتضع بين يديك الطريقة الأمثل من بين كل الطرق الممكنة لحل مشاكلك البرمجية. 

مصطلحات برمجية: ما هي هيكلة البيانات ؟

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

هيكلة البيانات أو الـ Data Structures هي عبارة عن طرق وتحسينات تابعة للخوارزميات بشكل أساسي، ففي كل مرة تجد حل لبرمجية معينة، يوجد دائما تطويرات وتحسينات لذلك الحل ليكون فعالاً من كل الجهات ( الحماية، السرعة، الآداء، التنظيف، التعديل ...)، وهذه التحسينات والتعديلات هي هيكلة البيانات بكل بساطة. 

شرح هيكلة البيانات بشكل برمجي أكثر 

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

إن سمعت بالـ Design Pattern ( يمكنك التعرف عليه كاملاً من هنا ) فهو عبارة عن أسلوب محدد لكتابة الكود البرمجية وتنسيق المشاريع البرمجية، الـ Data Structures أشبه بشكل كبير بالـ Design Patterns لكنها مخصصة فقط لتخزين وإدارة البيانات وليس الكود البرمجي. وحين نتحدث عن البيانات فنقصد سواء بيانات في قواعد البيانات، أو بيانات يتم تخزينها في الحاسوب ( كالمتغيرات والمصفوفات ...).

تدخل هيكلة البيانات في علوم الحاسوب، وتزداد علماً حين تبدأ في حساب الـ Complexity ( التعقيد ) الخاص بكل عملية وذلك عبر إيجاد الـ Big O Notation، حتى نشرح لك الـ Big O Notation دون الحاجة للولوج في تعقيداته، فهي ببساطة حساب عدد الخطوات اللازمة لإنجاز مهمة برمجية محددة، يمكنك تقليلها أو تحسينها عبر إيجاد أفضل السيناريوهات المتاحة (Best Case Scenario) لكل عملية برمجية، ويشار إليها بـ Big O، وتكتب غالبا على شكل : O(|K|) ، بحيث يعبر K عن عدد العمليات اللازمة لإنجاز مهمة محددة.

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

لما نحتاج إلى هيكلة البيانات برمجياً؟ 

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

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

تخيل مثلا، أن منصة فيسبوك لديها عدد مستخدمين 2.8 مليار مستخدم وأنت من بينهم، حين تقوم بإدراج بريدك الإلكتروني وكلمة السر ثم زر " دخول " في فيسبوك فإنك تلج لحسابك بشكل آني، مع أن النظام في الحقيقة قام بعملية الدخول (Authentication) من خلال البحث عن بريدك الإلكتروني وكلمة السر من بين 2.8 مستخدم آخر، والأمر كان سريعاً جدا. جرب - بدون هيكلة بيانات - أن تقوم بنفس العملية، سيأخذ الأمر منك على الأقل 10 دقائق حتى يلج لحسابك على فيسبوك، لأنه سيقوم بالبحث سطر بسطر (Row) حتى يجد إسمك وكلمة المستخدم. 

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

أنواع هياكل البيانات 

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

  • الـ Arrays ( مصفوفات ): الكثيرون يتعلمون الـ Arrays في البرمجة لأنها واحدة من أبرز المبادئ البرمجية، لكن لا يعرفون أنها صنف من أصناف هيكلة البيانات، وذلك لأنها تستطيع تخزين البيانات وتوفير Index لكل معلومة مخزنة داخلها، كما يمكنك التلاعب بها كقلب ترتيب الـ Array، البحث عن معلومة داخلها، نقل الـ Array أو حذف بيانات محددة والمزيد، وهي خصائص نحتاجها في هياكل البيانات. 
  • الـ Linked Lists: تعتبر أسهل أنواع هياكل البيانات والتي يجب عليك البدء بتعلمها أولا، الـ Linked List هو تصنيف لهيكلة البيانات يقوم بجعل البيانات مرتبطة ببعضها البعض. تخيلها كخط طويل، يبدأ من الـ Head و ينتهي في الـ Tail، هذا الخط يتكون من بيانات، كل عنصر بيانات يضم خاصيتين: المعلومة و الـ Node، الـ Node أو العقدة هي ما تجلعنا نربط البيانات مع بعضها البعض، والوصل لأي نوع من البيانات عبر اتباع عدد العقد. 
  • الـ Queue: وهو نمط DS يتبع تقنية الـ First In First Out او اختصاراً بـ FIFO ( مفهوم مستخدم بكثرة في مجال الإقتصاد وإدارة المخزون )، ببساطة في هذا النمط بدل جعل القيمة البيانات المضافة حديثات في آخر الصف في الجدول، تضعها في أوله ( أي ان الـ index الخاص بها يكون 0 ) بينما أول قيمة تم إدخالها في الجدول تحمل index الأخير. يساعدك هذا في استخراج المعلومات الحديثة بشكل أسرع لأنها الأكثر استخداما، كما تنقسم لقسمين مثل الـ Enqueue و الـ Dequeue والتي تعكسان المفهوم ( أي المضاف أخيرا يبقى أخيرا ). 
  • الـ Stacks: وهي تجميع كل البيانات والمعلومات في مكان واحد، وإضافة وحذف البيانات عبر أوامر محددة، جيدة من أجل تقليل استهلاك المساحة، لكن عمليات البحث صعبة فيها. الـ Stacks أشبه بالـ Queue من حيث إضافة / حذف البيانات. 
مصطلحات برمجية: ما هي هيكلة البيانات ؟

ويوجد الكثير من التقنيات الأخرى ك الـ Hash Table و الـ Graphs و الـ Trees و الـ Heaps والمزيد، ويمكنك دائما استكشافها أكثر إن توغلت أكثر في مجال هيكلة البيانات بشكل صحيح. 
يجدر بالذكر، أنه يمكنك ممارسة هيكلة البيانات في أي لغة برمجية كالجافا أو Python او C#، ويمكنك تنفيذ كل انواع هياكل البيانات هذه فيها بدون مشاكل سواء من أجل التجربة أو في مشاريع حقيقية. 

مصادر لتعلم هيكلة البيانات 

نتمنى أن تكون قد استوعبت مفهوم هيكلة البيانات والهدف منها وأيضا أنواعها، وإن أردت تعلمها بشكل أفضل، فدعنا نطرع ليك المصادر التالية لتعلم هيكلة البيانات بشكل صحيح: 

  • من Tutorialspoint : دورة كتابية بالكامل لتعلم واحتراف هيكلة البيانات والخوارزميات ( من هنا
  • من Coursera: من جامعة ميشيغان، تعلم هيكلة البيانات باستخدام لغة البرمجة بايثون ( من هنا
  • من Coursera: من جامعة سان دييغو، كورس لتعلم هيكلة البيانات باستخدام لغة البرمجة جافا ( من هنا
  • من Udemy: احترف هيكلة البيانات والخوارزميات باستخدام الجافا سكربت ( من هنا
  • من Skillshare: تعلم هيكلة البيانات والخوارزميات كورس مدته 5 ساعات ( من هنا
  • من يوتيوب: دورة في تعلم بعض أساسيات هيكلة البيانات باللغة العربية ( من هنا )

شاركه على :