الخوارزميات: رياضيات، المنطق: رياضيات، التسويق والتجارة: رياضيات، الاحصاء: رياضيات، الموسيقا: رياضيات… يمكن وضع صيغة رياضية لأي قضية أو مشكلة وإيجاد حلول لها…
المعلومات الأساسية في الرياضيات
يُعد التمثيل الثنائي جوهرَ عمل الحاسوب؛ لذا من الأهمية بمكان أن يكون لديك خبرة في العمليات الحسابية البسيطة على الأعداد الثنائية وقراءتها. وفهم أنظمة العد المختلفة والعمليات عليها وكيفية التحويل فيما بينها.
وإن أردت أن تكون أكثر احترافية برمجياً تحتاج إلى الإلمام بالمواضيع التالية: الجبر الخطي، وعلم الإحصاء والاحتمال (مهم جداً) ، وحساب التفاضل والتكامل، وغيرها من العمليات الحسابية والمنطقية، توجد العديد من المفاهيم الرياضية التي يجب معرفتها أثناء العمل مع الحاسوب، لكن ذلك يتبع إلى المنهجية والتقنيات التي يتم العمل بها. ولتوضيح الفكرة ببساطة سنأخذ المثال الآتي من موقع HackerRank:
النص:
بافتراض وجود كنغرين على مستقيم الأعداد، يستعدون للقفز في الاتجاه الموجب (مثلاً نحو اللانهاية الموجبة). ينطلق الكنغر الأول من الموضع x1 ويتحرك بمعدل سرعة v1 متر للقفزة الواحدة. بينما الكنغر الثاني ينطلق من الموضع x2 ويتحرك بمعدل سرعة v2 متر للقفزة الواحدة.
وفقاً للمعطيات الابتدائية لمواضع وحركة كل من الكنغرين، هل يمكنك تحديد فيما إذا كان بينهما نقطة التقاء، ويصلان إليها في الوقت ذاته، بعد عدد معين للقفزات مشترك لكل منها؟
صيغة الدخل:
خط مفرد مكوّن من أربعة أعداد صحيحة بينها مسافة فاصلة، تشير إليها قيم المتحولات x1, v1,x2,v2
0 <= x1 <x2 <10000
1 <= v1<=10000
1 <= v2<=10000
صيغة الخرج:
طباعة “Yes” إذا تحقق الشرط، وإلا طباعة “No” إذا لم يتحقق الشرط.
مثال للتوضيح:
الدخل: 0 3 4 2
الخرج: “Yes”
السبب: قام كل من الكنغرين بالقفز حسب سلسلتي المواضع الآتيتين:
الكنغر الأول: 0 ثم 3 ثم 6 ثم 9 ثم 12
الكنغر الثاني: 4 ثم 8 ثم 10 ثم 12
وهكذا يكون التقاء الكنغرين بعد أربع قفزات لكل منهما، لتكون النتيجة طباعة ” Yes”.
للوهلة الأولى ستعتقدون أن هذا التمرين سهل للغاية، وكمقاربة أولى للتفكير في حلّ منطقي: لمعرفة فيما إذا كان الكنغران سيصلان سيلتقيان في نفس الموضع يجب نقلهما إلى موضع واحد!
فلنقم بتصميم حلقة تنقل الكنغرين وتتحقّق من إمكانية وجودهما في الموضع نفسه. القطعة البرمجية التي تحقق ذلك كما يلي:
شرح الكود البرمجي:
يقفز الكنغر الأول من الموضع x1 بسرعة v1، و يقفز الكنغر الثاني من الموضع x2 بسرعة v2، ثم تكرار ذلك إلى أن تصبح وجهة كل من الكنغرين هي ذاتها. ومن ثم طباعة “Yes” والخروج من الحلقة.
لكن نلاحظ أن هذه الطريقة غير ناجعة في تحقيق المطلوب؛ إذ كيف يمكن معرفة الموضع الجديد لكل منهما؟ بتأمل مستقيم الأعداد والتنبؤ مثلاً؟
بالطبع لا، نحتاج إلى صيغة رياضية تساعد في تحديد الموضع الجديد، والتحقق من التقائهما بعد عدد معين من القفزات. معادلة التحقّق ممّا إذا كان الكنغران سيلتقيان في نفس الموضع بعد n عدد من القفزات هي:
x1 + (v1 * n) = x2 + (v2 * n)
نعزل n في طرف وبقية المتحولات في الطرف الآخر، ينتج:
(v1 * n) - (v2 * n) = x2-x1
n(v1 - v2) = x2-x1
n = (x2 - x1) / (v1 - v2)
مع العلم أنّ القيمة التي يحملها المتحوّل n يجب أن تكون عدداً صحيحاً، لذا سنقوم باستبدال عملية القسمة بالقسمة المعيارية، ونتحقق ما إذا كان باقي عملية القسمة هو الصفر أم لا.
(x2 -x1) % (v1 - v2) == 0
وهذا يعني بأنّه من أجل مجموعة من المواضع الابتدائية وعدد معين من الأمتار للقفزة، نستطيع أن نستنتج بأنّ الكنغرين سيحطان في الموضع نفسه في الوقت نفسه إذا كان الباقي مساوياً للصفر.
القطعة البرمجية التي تحقق ذلك كما يلي:
نجد أنّه خلصنا إلى نتيجة صحيحة فقط بعد الاستعانة بالرياضيات! ستسمع من بعض المطوِّرين أن “الرياضيات ليست بتلك الأهمية” أو مثلاً “المبرمج الجيّد سيئ في الرياضيات” مثال بسيط لغاية يثبت العكس، فلا تصدق هذا الكلام، الرياضيات تساعدنا في نمذجة وحلّ جميع المشاكل بكفاءة.
فلتعلم، دائمًا يوجد الكثير لنتعلمه، لا تيئَس عندما تواجهك مشكلة، إنها فرصة للتطوّر وتعلّم المزيد!
- ترجمة: يارا بوسعد.
- مراجعة: نور عبدو.