المقدمة
قبل بضع سنوات، شاركت حلول مسائل «Sword for Offer» على LeetCode، فحظيت بتشجيع ودعم كثير من القرّاء. وخلال تفاعلي مع القرّاء، كان أكثر سؤال يتكرر هو «كيف أبدأ تعلّم الخوارزميات؟». وشيئاً فشيئاً، نمت لديّ رغبة قوية في هذا السؤال.
يبدو أن الخوض مباشرةً في حل المسائل هو النهج الأكثر شيوعاً؛ فهو بسيط ومباشر وفعّال. غير أن حل المسائل يشبه لعب كاسحة الألغام (Minesweeper): فمن يمتلك قدرة قوية على التعلّم الذاتي يستطيع تعطيل الألغام واحداً تلو الآخر، بينما من لا تكفيه أساساته قد يعاني الإنهاك والإحباط، فيتراجع خطوة بخطوة. وقراءة الكتب المدرسية ممارسة شائعة أيضاً، لكن بالنسبة إلى الباحثين عن عمل، استهلكت أطروحات التخرّج وتقديم السير الذاتية والتحضير للاختبارات التحريرية والمقابلات معظم طاقتهم، مما يجعل إنجاز الكتب الضخمة تحدياً شاقاً.
إن كنت تواجه صعوبات مماثلة، فمن حسن حظك أن هذا الكتاب «وجدك». هذا الكتاب هو إجابتي عن هذا السؤال؛ وحتى إن لم تكن الحل الأمثل، فهي على الأقل محاولة إيجابية. ولن يمنحك هذا الكتاب وحده عرض عمل مباشرةً، لكنه سيرشدك عبر «تضاريس» بنى البيانات والخوارزميات، ويساعدك على فهم أشكال «الألغام» المختلفة وأحجامها وتوزّعاتها، ويمكّنك من إتقان مختلف «طرق إزالة الألغام». وبهذه المهارات، أعتقد أنك ستستطيع التعامل مع المسائل وقراءة الأدبيات التقنية بثقة أكبر، وبناء منظومة معرفية متكاملة تدريجياً.
أوافق بشدة على كلمات البروفيسور فاينمان: «المعرفة ليست مجانية، عليك أن تدفع الانتباه». وبهذا المعنى، ليس هذا الكتاب «مجانياً» تماماً. وحتى أكون أهلاً لـ«الانتباه» الثمين الذي تستثمره في هذا الكتاب، سأبذل قصارى جهدي وأكرّس أكبر «انتباه» لإنجاز هذا العمل.
أدرك إدراكاً عميقاً حدود معرفتي وخبرتي. فرغم أن محتوى هذا الكتاب قد صُقل على مدى فترة من الزمن، فمن المؤكد أنه لا يزال يحوي أخطاء كثيرة، وأرحّب بصدق بنقد الأساتذة والزملاء وتصويباتهم.

مرحباً أيها الخوارزميات!
أحدث ظهور الحواسيب تغييرات هائلة في العالم. وبفضل قدراتها الحسابية الفائقة وقابليتها الممتازة للبرمجة، أصبحت الوسيط الأمثل لتنفيذ الخوارزميات ومعالجة البيانات. وسواء كانت الرسومات الواقعية في ألعاب الفيديو، أو اتخاذ القرارات الذكية في القيادة الذاتية، أو مباريات AlphaGo المبهرة في لعبة Go، أو تفاعلات ChatGPT الطبيعية، فكل هذه التطبيقات عروض مبهرة للخوارزميات وهي تعمل على الحواسيب.
في الواقع، كانت الخوارزميات وبنى البيانات موجودة في كل ركن من أركان العالم حتى قبل ظهور الحواسيب. وكانت الخوارزميات المبكرة بسيطة نسبياً، مثل طرق العدّ القديمة وإجراءات صناعة الأدوات. ومع تقدّم الحضارة، أصبحت الخوارزميات تدريجياً أكثر صقلاً وتعقيداً. ومن البراعة الحرفية لدى الصنّاع المهرة، إلى المنتجات الصناعية التي تحرّر قوى الإنتاج، إلى القوانين العلمية التي تحكم تشغيل الكون، يكمن وراء كل شيء عادي أو مذهل تفكير خوارزمي بارع.
وبالمثل، بنى البيانات موجودة في كل مكان: فمن شبكات التواصل الاجتماعي الواسعة إلى أنظمة المترو الصغيرة، يمكن نمذجة كثير من الأنظمة على أنها «رسوم بيانية»؛ ومن الدولة إلى الأسرة، تُظهر الأشكال التنظيمية الأساسية للمجتمع خصائص «الأشجار»؛ وملابس الشتاء تشبه «المكدس»، حيث يُلبس العنصر الأول أخيراً؛ وأنبوب كرة الريشة يشبه «الطابور»، تُدخل العناصر من طرف وتُسحب من الطرف الآخر؛ والقواميس تشبه «جدول التجزئة»، إذ تتيح البحث السريع عن المدخلات المستهدفة.
يهدف هذا الكتاب إلى مساعدتك على فهم المفاهيم الأساسية للخوارزميات وبنى البيانات من خلال رسوم توضيحية متحركة واضحة وسهلة المنال وأمثلة شيفرة قابلة للتشغيل، وعلى تنفيذها برمجياً. وعلى هذا الأساس، يسعى الكتاب إلى كشف التجليات النابضة للخوارزميات في العالم المعقّد، وإظهار جمال الخوارزميات. آمل أن يكون هذا الكتاب عوناً لك!