لماذا من المهم تعلم هياكل البيانات والخوارزميات؟
هل لديك أسئلة حول لماذا يجب أن أدرس المصفوفة (Array)، القائمة المرتبطة (Linked List)، الفرز (Sorting) الشجرة (Tree)، الرسم البياني (Graph) كل هذه الأشياء المعقدة؟ لماذا تطرح الشركات أسئلة تتعلق بهياكل البيانات والخوارزميات؟
يتجنب الكثير من المبتدئين والمبرمجين ذوي الخبرة تعلم هياكل البيانات والخوارزميات لأنها معقدة ويعتقدون أنه لا يوجد استخدام لجميع الأشياء المذكورة في الأعلى في الحياة الواقعية. لذا قبل أن نناقش الموضوع سنطرح عليك مشكلة بسيطة وتحتاج إلى إيجاد حل لذلك
إذا كنت بحاجة إلى البحث عن رقمك الجامعي في 20000 صفحة من مستند PDF (تم ترتيب الأرقام الجامعية بترتيب متزايد) كيف يمكنك القيام بذلك؟
- إذا كنت ستحاول البحث فيه عشوائيًا أو بطريقة متسلسلة، في سيستغرق الأمر الكثير من الوقت. قد تشعر بالإحباط بعد بعض الوقت.
- يمكنك تجربة حل آخر موضح أدناه
- اذهب إلى الصفحة رقم 10000
- إذا كان رقمك الجامعي ليس هناك، ولكن كل الارقام الاخرى في تلك الصفحة أقل من رقمك الجامعي
- اذهب إلى الصفحة رقم 15000
- ما يزال رقمك الجامعي ليس هناك. ولكن هذه المرة كل الأرقام الجامعية الأخرى هي أكبر من رقمك الجامعي.
- اذهب إلى الصفحة رقم 12500
أكمل نفس العملية وفي غضون 30-40 ثانية ستجد الرقم الجامعي الخاص بك. تهانينا… لقد استخدمت للتو خوارزمية البحث الثنائي (Binary Search algorithm) عن غير قصد.
كان هذا مجرد مثال بسيط يوضح لماذا تحتاج إلى تعلم هياكل البيانات والخوارزميات وأهميتها في الحياة الواقعية. هناك الكثير من الأمثلة من الحياة العملية اليومية. لذلك إذا كنت تعتقد أن هذه المهارة مهمة فقط حتى تجتاز مقابلات الشركات العالمية، فأنت مخطئ تمامًا.
اجتياز مقابلات أفضل الشركات العالمية
تلعب هياكل البيانات والخوارزميات دورًا رئيسيًا في برمجة التطبيقات وفي عملية التوظيف أيضًا. الكثير من الطلاب والمهندسين لديهم سؤال حول سبب تركيز مقابلات هذه الشركات على (data structures and algorithms) DSA بدلاً من أسئلة اللغة (language) / الأطر (frameworks) /الأدوات (tools ) المحددة؟ دعونا نشرح لماذا يحدث ذلك…
عندما تطلب من شخص ما اتخاذ قرارًا، سيتمكن الشخص الجيد من إخبارك “اخترت القيام بـ X لأنه أفضل من A و B بهذه الطرق. كان بإمكاني الذهاب مع C، لكنني شعرت أن هذا الخيار كان الأفضل لهذه الأسباب.”
في حياتنا اليومية، تعتمد على الشخص الذي يمكنه إنجاز المهمات في فترة زمنية قصيرة بكفاءة واستخدام موارد أقل. نفس الأشياء تحدث مع هذه الشركات. المشكلة التي تواجهها هذه الشركات أصعب بكثير وعلى نطاق أوسع بكثير. يتعين على مطوري البرامج أيضًا اتخاذ القرارات الصحيحة عندما يتعلق الأمر بحل مشاكل هذه الشركات.
تقطع معرفة DS (هياكل البيانات) و Algo (الخوارزميات) مثل Hash Tables و Trees و Graphs والخوارزميات المختلفة شوطًا طويلاً في حل هذه المشكلات بكفاءة ويهتم أصحاب العمل أكثر برؤية كيفية استخدام المرشحين لهذه الأدوات لحل مشكلة ما. تمامًا مثل ميكانيكي السيارة الذي يحتاج إلى الأداة المناسبة لإصلاح السيارة وجعلها تعمل بشكل صحيح، يحتاج المبرمج إلى الأداة المناسبة (الخوارزمية وهياكل البيانات) لجعل البرنامج يعمل بشكل صحيح. لذلك يريد المحاور العثور على مرشح يمكنه تطبيق المجموعة الصحيحة من الادوات لحل المشكلة المعينة. إذا كنت تعرف خصائص هياكل بيانات جيدًا ستتمكن من اتخاذ القرار الصحيح في اختيار بنية البيانات الصحيحة لحل مشكلة ما.
المهندسون العاملون في جوجل ومايكروسوفت وفيسبوك وامازون مثل هذه الشركات مختلفة عن غيرها وتدفع أجورًا أعلى مقارنة بالشركات الأخرى… ولكن لماذا؟ في هذه الشركات، الترميز (Coding)هو مجرد التنفيذ ويستغرق ما يقرب من 20-30٪ من الوقت المخصص للمشروع. يذهب معظم الوقت إلى تصميم الأشياء بأفضل الخوارزميات لتوفير موارد الشركة من الخوادم (Servers) وقوة الحساب (computation power) وما إلى ذلك. هذا هو السبب الرئيسي الذي يجعل المقابلات في هذه الشركات تركز على الخوارزميات لأنها تريد من الأشخاص الذين يمكنهم التفكير خارج الصندوق تصميم خوارزميات يمكنها توفير آلاف الدولارات للشركة. يوجد في يوتيوب وفيسبوك وتويتر و انستجرام وخرائط جوجل أكبر عدد من المستخدمين في العالم. للتعامل مع المزيد من المستخدمين على هذه المواقع، يتطلب الأمر المزيد من التحسين وهذا هو السبب في أن الشركات القائمة على المنتجات توظف فقط المرشحين الذين يمكنهم تحسين برامجهم وفقًا لطلب المستخدم.
مثال: افترض أنك تعمل في شركة ميتا. لقد توصلت إلى حل أمثل لمشكلة مثل فرز (Sort) قائمة مستخدمين من مصر) مع تعقيد زمني لـ O (nLogn) بدلاً من O (n ^ 2) وتفترض أن n للمشكلة هنا بالنسبة للشركة في الحياة الواقعية السيناريو 100 مليون (افتراض دقيق للغاية بالنظر إلى أن عدد المستخدمين المسجلين على Facebook يتجاوز المليار). nLogn يصبح 800 مليون ، بينما n ^ 2 سيكون 10 ^ 7 مليار. من حيث التكلفة، يمكنك أن ترى أن الكفاءة قد تم تحسينها أكثر من 10 ^ 7 مرات، مما قد يوفر توفيرًا كبيرًا من حيث تكلفة الخادم (ٍServer) والوقت.
الآن ربما تكون قد استوعبت على رغبة الشركات في توظيف مطور ذكي يمكنه اتخاذ القرار الصحيح وتوفير موارد الشركة والوقت والمال. لذا قبل إعطاء الحل لاستخدام جدول تجزئة (Hash Table)بدلاً من القائمة (List) لحل مشكلة معينة، فكر في الصورة الكلية وجميع سيناريوهات الحالة بعناية. يمكن أن تولد إيرادات للشركة أو يمكن أن تخسر الشركة مبلغًا ضخمًا من المال.
حل بعض المشاكل المعقدة في العالم الحقيقي
هل سبق لك أن تم توبيخه من قبل والديك عندما لم تتمكن من العثور على كتابك أو ملابسك في غرفتك؟ بالتأكيد نعم… والديك على حق عندما يقدمان النصيحة للحفاظ على كل شيء في المكان المناسب حتى تتمكن في المرة القادمة من الحصول على أغراضك بسهولة. تحتاج هنا إلى ترتيب كل شيء (البيانات) والاحتفاظ به في مثل هذا الهيكل الذي كلما احتجت إلى البحث عن شيء تحصل عليه بهذه السهولة وفي أقرب وقت ممكن. يعطي هذا المثال فكرة واضحة عن مدى أهمية ترتيب وهيكلة البيانات في الحياة الواقعية.
الآن خذ مثال المكتبة. إذا كنت بحاجة إلى العثور على كتاب عن Set Theory من مكتبة، فستذهب إلى قسم الرياضيات أولاً، ثم قسم Set Theory. إذا لم يتم تنظيم هذه الكتب بهذه الطريقة وتوزيعها بشكل عشوائي، فسيكون من الصعب العثور على كتاب معين. لذا فإن هياكل البيانات تشير إلى الطريقة التي تنظم بها المعلومات على أجهزة الكمبيوتر لدينا. يعالج علماء الكمبيوتر ويبحثون عن أفضل طريقة يمكننا من خلالها تنظيم البيانات التي لدينا، بحيث يمكن معالجتها بشكل أفضل بناءً على المدخلات المقدمة.
لدى الكثير من المبرمجين المبتدئين هذا السؤال حول المكان الذي تستخدم فيه كل مواد بنية البيانات والخوارزميات في حياتنا اليومية وكيف أنها مفيدة في حل المشكلة المعقدة في العالم الحقيقي. نحتاج أن نذكر أنه سواء كنت مهتمًا بالدخول إلى أفضل شركات التكنولوجيا العملاقة أم لا، فإن مفاهيم DSA لا تزال تساعد كثيرًا في حياتك اليومية. ألا تصدقنا… دعونا نفكر في بعض الأمثلة…
– إذا كنت بحاجة إلى الاحتفاظ بمجموعة من البطاقات وترتيبها بشكل صحيح، فكيف ستفعل ذلك؟ سترميها بشكل عشوائي أو سترتب البطاقات واحدة على الأخرى ثم يمكنك استخدام Stack هنا لعمل ترتيب مناسب للبطاقات واحدة على الأخرى.
– إذا كنت بحاجة إلى البحث عن كلمة في القاموس، فما هو نهجك؟ هل تذهب صفحة صفحة أو هل تفتح صفحة ما وإذا لم يتم العثور على الكلمة، يمكنك فتح صفحة قبل/لاحقًا إلى واحدة مفتوحة اعتمادًا على ترتيب الكلمات للصفحة الحالية (Binary Search)..
كان الأول مثالًا جيدًا لاختيار هيكل البيانات الصحيحة لمشكلة في العالم الحقيقي والثاني هو مثال جيد لاختيار الخوارزمية الصحيحة لحل مشكلة معينة في وقت أقل.
تمنحك جميع الأمثلة المذكورة أعلاه فهمًا واضحًا أن تنظيم البيانات مهم حقًا في حياتنا اليومية. يعد ترتيب البيانات في هيكل معين مفيدًا حقًا في توفير الكثير من الوقت. الشيء نفسه ينطبق على الخوارزمية… نريد جميعًا توفير وقتنا وطاقتنا ومواردنا. نريد جميعًا اختيار أفضل نهج لحل المشكلات في حياتنا اليومية. توجد الكثير من المشاكل في العالم والتي قد تستغرق ساعات أو أيامًا لحلها بالحل التقليدي، وقد يستغرق الأمر أيضًا سنوات! هل يمكنك أن تتخيل!
نحن محاطون بالكثير من المشاكل المعقدة في العالم الحقيقي التي لا أحد لديه الحل لها. راقب المشاكل بعمق ويمكنك مساعدة هذا العالم بإعطاء الحل الذي لم يقدمه أحد من قبل.
هياكل البيانات والخوارزميات هي اساس اي برنامج(ٍSoftware) فا مثلا ميكانيكي السيارة الذي يحتاج إلى الأداة المناسبة لإصلاح السيارة وجعلها تعمل بشكل صحيح، يحتاج المبرمج إلى الأداة المناسبة (الخوارزمية وهياكل البيانات) لجعل البرنامج يعمل بشكل صحيح