في الحقيقة، جميع هياكل البيانات هي عبارة عن خوارزميّات، لكنّ العكس غير صحيح، فليست كلّ خوارزميّة عبارة عن هيكل بيانات.
وحتى نكون أكثر دقّة، فإنّ جميع مجالات الحاسب لا تستغني عن الخوارزميّات لتحديد طريقة عملها، ونحن مع هذا لا نسمّي مجال "الشبكات" - مثلًا - خوارزميّات.
وحتى نكون أكثر دقّة، فإنّ جميع مجالات الحاسب لا تستغني عن الخوارزميّات لتحديد طريقة عملها، ونحن مع هذا لا نسمّي مجال "الشبكات" - مثلًا - خوارزميّات.
فالخوارزميّات لا تخدم الشبكات فقط، بالإضافة إلى أنّ نوع الخدمة التي تقدّمها تهتمّ بتحديد طريقة العمل فقط وليس النتيجة المطلوبة (يتحدد هذا بحسب كل مجال)، ولذلك صحَّ لنا أن نعزل الخوارزميّات كحقل مستقلّ يحدّد آلية عمل المجالات الأخرى دون أن يتدخّل في خصائصها وغاياتها.
بعبارة أخرى، نستطيع القول أنّ الخوارزميّات تتداخل مع غيرها من المجالات بما يكفي للإجابة عن سؤال "ما هي آليّة تحقيق هذا المجال أو ذاك لأهدافه؟"، لكن لا شأن للخوارزميّات بالإجابة عن سؤال "ما هدف هذا المجال أو ذاك؟".. لنأخذ المثال التالي حتى نستوضح الأمر أكثر..
تخيّل أنّ مجموعة من السيّاح يزورون مدينتك -التي تعرفها جيّدًا- للمرّة الأولى، فيسألك أحدهم عن طريقة الوصول إلى منتزهٍ معروف في مكانٍ ما من المدينة، فترشده إلى ذلك، ثم يسألك آخر عن طريقة الوصول إلى حيٍّ أثري، فترشده إلى ذلك، وهلمّ جرًّا..
ما فعلتَه مع السيّاح في المثال أعلاه، هو تقديم الطريقة المناسبة (خوارزميّة) لكل سائح للوصول إلى وجهته (هدفه) الذي يريده هو، لا أنت.
فالسائح هو المعني بالإجابة عن سؤال: "ما المكان الذي أريد أن أزوره؟"، لكنّه سيحتاج إلى مساعدتك لتجيب عن سؤاله التالي: "كيف أصل إلى ذلك المكان؟".
فالسائح هو المعني بالإجابة عن سؤال: "ما المكان الذي أريد أن أزوره؟"، لكنّه سيحتاج إلى مساعدتك لتجيب عن سؤاله التالي: "كيف أصل إلى ذلك المكان؟".
فأنت تجسّد الخوارزميّات، وكلّ سائح من السيّاح الذين سألوك عن طريقة الوصول إلى وجهاتهم المختلفة يجسّد مجالًا من مجالات الحاسب الأخرى (شبكات، قواعد بيانات، برمجة، ذكاء اصطناعي...إلخ).
عندما نعود إلى تعريف الخوارزميّة، سنجد أنّه:
مجموعة من الخطوات المتَّبَعة لتحقيق نتيجة مرغوبة.
فالنتيجة هنا محددة سلفًا بما أنها مرغوبة أو متوقَّعة من الخوارزميّة، فلا يمكن إنشاء خوارزميّة دون هدف مسبق، وبحسب النتيجة المرغوبة من الخوارزميّة، سيظهر لنا فرع أو مجال مختلف، فمثلًا..
مجموعة من الخطوات المتَّبَعة لتحقيق نتيجة مرغوبة.
فالنتيجة هنا محددة سلفًا بما أنها مرغوبة أو متوقَّعة من الخوارزميّة، فلا يمكن إنشاء خوارزميّة دون هدف مسبق، وبحسب النتيجة المرغوبة من الخوارزميّة، سيظهر لنا فرع أو مجال مختلف، فمثلًا..
لو استبدلنا عبارة "نتيجة مرغوبة" بـ :
- إدارة عناصر البيانات => فنحن نتحدّث عن هياكل البيانات.
- التواصل بين الأجهزة => فنحن نتحدّث عن الشبكات.
... وهكذا.
وفي هذا الاستبدال شيء من التبسيط بغرض توضيح الفكرة، وإلّا فالأمر أكثر تشعّبًا وعمقًا من هذا.
- إدارة عناصر البيانات => فنحن نتحدّث عن هياكل البيانات.
- التواصل بين الأجهزة => فنحن نتحدّث عن الشبكات.
... وهكذا.
وفي هذا الاستبدال شيء من التبسيط بغرض توضيح الفكرة، وإلّا فالأمر أكثر تشعّبًا وعمقًا من هذا.
أمّا عن سبب اقتران الخوارزميّات (algorithms) بهياكل البيانات (data structures) تحديدًا، فبالإضافة إلى ما سقناه آنفًا، فإنّ هناك مجموعة من الخوارزميّات الخاصّة بالتعامل مع عناصر البيانات (data elements) من حيث الترتيب (sorting) والبحث (searching) وغير ذلك.
لكنّ هذه الخوارزميات غير قابلة للإدراج ضمن هياكل البيانات، لأنّها لا تدخل في اختصاصها، فهياكل البيانات تهتم بتنظيم وإدارة عناصر البيانات دون عناية بترتيب تلك العناصر أو البحث عنها، وبما أنّ عناصر البيانات تشكّل نقطة تقاطع بين هذه الخوارزميّات تحديدًا وبين هياكل البيانات..
كان الأنسب أن نجمعها تحت مسمّى: "خوارزميات وهياكل بيانات" (algorithms and data structures).
انتهى.
انتهى.
جاري تحميل الاقتراحات...