تعلّم هياكل البيانات والخوارزميات مهم لأنه يعلّمك كيف تختار الطريقة الصحيحة لتنظيم البيانات ومعالجتها، فيصبح برنامجك أسرع وأقل استهلاكًا للموارد. وهو أيضًا ما تختبره كثير من الشركات في مقابلات التوظيف، لأنه يكشف طريقة تفكيرك أكثر مما تكشفه معرفتك بلغة أو إطار عمل معيّن.
ربما تسأل: لماذا أدرس المصفوفة (Array) والقائمة المرتبطة (Linked List) والفرز (Sorting) والشجرة (Tree) والرسم البياني (Graph)، وأنا لن أكتبها بنفسي غالبًا؟ لنبدأ بمثال بسيط قبل أي تعريف.
مثال سريع: كيف تجد رقمك بين 20000 صفحة؟
تخيّل أن أمامك ملف PDF من 20000 صفحة، فيه أرقام الطلاب الجامعية مرتبة تصاعديًا، وعليك أن تجد رقمك.
لو بحثت صفحة بعد صفحة، فقد تحتاج إلى تصفّح آلاف الصفحات. لكن جرّب هذه الطريقة:
- افتح الصفحة 10000. رقمك ليس فيها، وكل الأرقام فيها أصغر منه، إذن رقمك في النصف الثاني.
- افتح الصفحة 15000. رقمك ليس فيها، وكل الأرقام أكبر منه، إذن هو بين 10000 و15000.
- افتح الصفحة 12500، وكرّر الفكرة نفسها: كل مرة تستبعد نصف الصفحات المتبقية.
بهذه الطريقة لن تحتاج إلى أكثر من 15 محاولة تقريبًا لتصل إلى الصفحة الصحيحة. لقد استخدمت للتو خوارزمية البحث الثنائي (Binary Search) دون أن تقصد.

وهذا هو البحث الثنائي مكتوبًا بلغة بايثون:
def binary_search(items, target):
low, high = 0, len(items) - 1
while low <= high:
mid = (low + high) // 2
if items[mid] == target:
return mid
elif items[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
student_ids = list(range(1000, 21000, 3))
print(binary_search(student_ids, 4006)) # 1002
لاحظ أن الشرط الأساسي هنا أن تكون البيانات مرتبة. هذه هي العلاقة بين الهيكل والخوارزمية: طريقة تنظيم البيانات تحدد أي خوارزمية تستطيع استخدامها.
ما هياكل البيانات والخوارزميات أصلًا؟
هياكل البيانات (Data Structures) هي الطرق التي ننظّم بها المعلومات داخل الحاسوب: قائمة، أو جدول، أو شجرة، أو شبكة من العلاقات. أما الخوارزميات (Algorithms) فهي الخطوات المحددة التي نعالج بها هذه البيانات: نبحث فيها، أو نرتبها، أو نجد أقصر طريق بينها.
فكّر في ميكانيكي السيارات: لا يكفي أن يعرف أن هناك مشكلة، بل يحتاج إلى الأداة المناسبة لإصلاحها. والمبرمج كذلك، يحتاج إلى الهيكل والخوارزمية المناسبين ليعمل برنامجه بشكل صحيح وبكفاءة.
أمثلة من حياتك اليومية
أنت تستخدم هذه الأفكار كل يوم دون أن تسمّيها:
- غرفتك المرتبة: عندما تضع كل شيء في مكانه، تجده بسرعة. هذا جوهر تنظيم البيانات.
- المكتبة: لتجد كتابًا في نظرية المجموعات (Set Theory) تذهب إلى قسم الرياضيات ثم إلى الرف المخصص. لو كانت الكتب مبعثرة عشوائيًا لاستغرق الأمر ساعات.
- كومة الأطباق أو البطاقات: تضع الجديد فوق القديم وتأخذ من الأعلى. هذا هو المكدّس (Stack).
- القاموس الورقي: لا تقلّب الصفحات واحدة واحدة، بل تفتح في المنتصف تقريبًا وتتقدم أو تتراجع حسب ترتيب الحروف. هذا بحث ثنائي مرة أخرى.

والتطبيقات التي تستخدمها يوميًا مبنية على الأفكار نفسها:
| هيكل البيانات | فكرته | أين تراه |
|---|---|---|
| المصفوفة (Array) | عناصر متتالية يمكن الوصول لأي منها برقمه | قائمة الصور في معرض هاتفك |
| المكدّس (Stack) | آخر عنصر يدخل هو أول عنصر يخرج | زر التراجع (Undo) في محرر النصوص |
| الطابور (Queue) | أول عنصر يدخل هو أول عنصر يخرج | طلبات الطباعة المنتظرة |
| جدول التجزئة (Hash Table) | وصول سريع جدًا للقيمة عبر مفتاح | البحث عن جهة اتصال بالاسم |
| الشجرة (Tree) | عناصر مرتبة في مستويات أب وأبناء | المجلدات والملفات في حاسوبك |
| الرسم البياني (Graph) | عُقد تربط بينها علاقات | تطبيقات الخرائط واقتراح الأصدقاء |
الفرق الحقيقي يظهر مع البيانات الكبيرة
مع 10 عناصر لن تلاحظ فرقًا بين حل جيد وحل سيئ. لكن البرامج الحقيقية تتعامل مع ملايين السجلات، وهنا يصبح الاختيار مسألة ثوانٍ مقابل أيام.
نقيس ذلك بما يسمى التعقيد الزمني (Time Complexity)، ويُكتب بترميز Big O. خذ مثالًا: ترتيب قائمة من 100 مليون مستخدم.
- خوارزمية ترتيب بتعقيد
O(n²)تحتاج إلى قرابة 1016 عملية، أي 10 ملايين مليار عملية. - خوارزمية بتعقيد
O(n log n)تحتاج إلى قرابة 2.7 مليار عملية فقط.
الفرق هنا بالملايين من المرات. وبالنسبة لشركة تخدم أعدادًا ضخمة من المستخدمين، هذا يعني فرقًا مباشرًا في تكلفة الخوادم (Servers) وسرعة استجابة التطبيق.

لماذا تركّز مقابلات التوظيف عليها؟
يسأل كثير من الطلاب: لماذا تسألني الشركات عن الأشجار والرسوم البيانية بدلًا من أسئلة عن React أو Django؟ السبب أن اللغات والأطر تتغير كل بضع سنوات، أما القدرة على تحليل مشكلة واختيار حل مناسب لها فتبقى.
في المقابلة لا يبحث المحاور عن إجابة محفوظة، بل عن شخص يستطيع أن يقول: «اخترت جدول تجزئة هنا لأن البحث فيه أسرع من القائمة في هذه الحالة، رغم أنه يستهلك ذاكرة أكثر، وهذا مقبول لأن…». هذا النوع من التفكير القائم على الموازنة بين الخيارات هو ما يجعل المطوّر يوفّر على فريقه الوقت والمال.
وقبل أن تقترح أي حل، فكّر في الصورة الكاملة: حجم البيانات المتوقع، والحالات الطرفية، والذاكرة المتاحة. القرار الذي يبدو صغيرًا قد يكلّف كثيرًا عندما يكبر المنتج.
هل ما زالت مهمة مع أدوات البرمجة الذكية؟
نعم، وربما أكثر من قبل. مساعدات البرمجة اليوم تكتب لك دالة ترتيب أو بحث في ثوانٍ، لكنها لا تضمن أن الحل المقترح هو الأنسب لحجم بياناتك أو لقيود مشروعك.
من يفهم هياكل البيانات يستطيع أن يقرأ الكود المقترح ويسأل الأسئلة الصحيحة: هل هذه الحلقة المتداخلة ستنهار مع مليون عنصر؟ هل كان جدول التجزئة أفضل هنا من البحث في قائمة؟ بهذا تتحول من شخص ينسخ الكود إلى شخص يراجعه ويحكم عليه.

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



