ما أهمية الرياضيات في البرمجة؟

الخوارزميات: رياضيات، المنطق: رياضيات، التسويق والتجارة: رياضيات، الاحصاء: رياضيات، الموسيقى رياضيات… يمكن وضع صيغة رياضية لأي قضية أو مشكلة وإيجاد حلول لها…

المعلومات الأساسية في الرياضيات

التمثيل الثنائي يعتبر جوهر عمل الحاسوب، لذا من الأهمية بمكان أن يكون لديك خبرة في العمليات الحسابية البسيطة على الأعداد الثنائية وقراءتها. وفهم أنظمة العد المختلفة والعمليات عليها وكيفية التحويل فيما بينها.

سلسلة علوم الحاسوب (4) كيف يتحول الصفر والواحد إلى صور؟

وإن أردت أن تكون أكثر احترافية برمجياً تحتاج إلى الإلمام بالمواضيع التالية: الجبر الخطي، وعلم الإحصاء والاحتمال (مهم جداً) ، وحساب التفاضل والتكامل، وغيرها من العمليات الحسابية والمنطقية، توجد العديد من المفاهيم الرياضية التي يجب معرفتها أثناء العمل مع الحاسوب، لكن ذلك يتبع إلى المنهجية والتقنيات التي يتم العمل بها. ولتوضيح الفكرة ببساطة سنأخذ المثال التالي من موقع هاكر رانك 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”.

للوهلة الأولى ستعتقدون أن هذا التمرين سهل للغاية، وكمقاربة أولى للتفكير في حلّ منطقي: لمعرفة فيما إذا كان الكنغران سيصلان سيلتقيان في نفس الموضع يجب نقلهما إلى موضع واحد!

فلنقم بتصميم حلقة تنقل الكنغرين وتتحقّق من إمكانية وجودهما في الموضع نفسه. القطعة البرمجية التي تحقق ذلك كالتالي:

[js]

for i:=0 ; i&lt;10000; i++ {

kOnePosition = moveKangoro(x1, v1)

kTwoPosition = moveKangoro(x2, v2)

if kOnePosition == kTwoPosition {

fmt.Println(“YES”)

break;

}

}
[/js]

شرح الكود البرمجي:

يقفز الكنغر الأول من الموضع 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

وهذا يعني بأنّه من أجل مجموعة من المواضع الابتدائية وعدد معين من الأمتار للقفزة، نستطيع أن نستنتج بأنّ الكنغرين سيحطان في الموضع نفسه في الوقت نفسه إذا كان الباقي مساوياً للصفر.

القطعة البرمجية التي تحقق ذلك كالتالي:

[js]

if x1 == x2 && v1 == v2 {
fmt.Println("YES")
} else if x1 == x2 && v1 != v2{
fmt.Println("NO")
} else {
if v1 > v2 && ((x2-x1)%(v1-v2)) == 0 {
fmt.Println("YES")
} else {
fmt.Println("NO")
}
}
[/js]

نجد أنّه خلصنا إلى نتيجة صحيحة فقط بعد الاستعانة بالرياضيات! ستسمع من بعض المطوِّرين أن “الرياضيات ليست بتلك الأهمية” أو مثلاً “المبرمج الجيّد سيء في الرياضيات” مثال بسيط لغاية يثبت العكس، فلا تصدق هذا الكلام، الرياضيات تساعدنا في نمذجة وحلّ جميع المشاكل بكفاءة.

فلتعلم، دائماً يوجد الكثير لنتعلمه، لا تيأس عندما تواجهك مشكلة، إنها فرصة للتطوّر وتعلّم المزيد!

 

مشروعنا غير ربحي، ومُموّل ذاتيًا، نحن لا نتلقى أي أموال حكومية أو من أي جهة كانت سياسية أو غيرها، كما أنّنا لا نلتمس ذلك. و بالإضافة للتمويل الذاتي، الذي يبلغ حاليا 99٪ من مجمل التمويل، نحن نعتمد على المساهمة الطوعية لمؤسسات خاصة وأفراد مثلك لتطوير المشروع وتحقيق أهدافه.لدعمنا إضغط هنا

  • ترجمة: يارا بوسعد
  • مراجعة: نور عبدو
مصدر dev
تعليقات
Loading...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. AcceptRead More