هناك علاقة وثيقة بين البرمجة والخوارزميات، فهذه الأخيرة تكتب بلغة برمجة معينة لأداء غرض معين أو التوصل إلى حل مشكلة محددة، وأي لغة برمجة في العالم قائمة على خطوات خوارزمية محددة
م. محمد الحسن
لا يمكن لأي شخص يعمل في مجال البرمجة أو يمتلك المفاهيم الأساسية عنها أن يتجاوز الخوارزميات، أو يتجاهل دورها الجوهري، كما لا يمكن أن يتطور في مسيرته المهنية إلا إذا أتقن كيفية استخدامها، وفهم طبيعتها، لاسيما أنها تعد أمرا أساسيا في علم البرمجة والاستفادة من لغاتها المتداولة في العالم، والمساهم الكبير في التطور الهائل الذي نشهده حاليا في مجال تطبيقات البرمجة في شتى الميادين.
وهذا المفهوم – الذي ربما يبدو غامضا لفئة من الجمهور- لا يعد إحدى لغات البرمجة، بل يمكن شرحه بأنه يمثل طرائق التحليل والتفكير التي يمكن اتباعها حتى يتمكن أي مبرمج من كتابة ما يعرف (بالكود) في علم البرمجة. كما تعرف الخوارزميات – التي تنسب إلى العالم محمد بن موسى الخوارزمي – بأنها سلسلة من الخطوات الرياضية والمنطقية التي تستخدم لحل مشكلة معينة، أو أنها مجموعة من الخطوات المحددة ذات الترتيب المعين التي يسير المبرمج وفقها لحل مشكلة برمجية. ووفقا لذلك، فإنه إذا كان وضع الخوارزمية يحتاج إلى مزيج من المنهجية والعلم والإبداع، فإن تنفيذها لا يترك مجالا للتأويل والحدس.
وهناك علاقة وثيقة بين البرمجة والخوارزميات، فهذه الأخيرة تكتب بلغة برمجة معينة لأداء غرض معين أو التوصل إلى حل مشكلة محددة، وأي لغة برمجة في العالم قائمة على خطوات خوارزمية محددة، ومن ثم فإن أيا من الجانبين (البرمجة والخوارزميات) لا يتم إلا بالآخر، وكل منهما مكمل لدور الآخر.
وبصورة مبسطة، فإنه إذا أراد المبرمج التوصل إلى حل مشكة ما ويريد التعبير عنها بإحدى لغات البرمجة، فإنه سيلجا أولا إلى الخوارزميات؛ أي التفكير المنطقي في خطوات الحل ومراحله، ووضعها في الذهن. ثم يأتي دور البرمجة المتمثل في التعبير عن هذه الخطوات والمراحل عن طريق اللغة التي يختارها المبرمج، وبكلمات واضحة يفهمها أو يمكنه التعبير عنها عن طريق الأشكال المتعارف عليها. وهذا يعني أنه يمكن استخدام الخوارزميات في كل المسائل التي تحتاج إلى التفكير المنطقي في كيفية حلها، ولاسيما العمليات المعقدة التي تحتاج إلى تبسيط شديد واختصار الزمن المناسب لمعالجتها.
تاريخ المصطلح
لا بد من نظرة تاريخية توضح لنا تسلسل استخدام مصطلح الخوارزميات، وهل عَنى به من استخدموه أن يكون منسوبا إلى العالم الخوارزمي، أم أنه كان منحوتا من كلمتين تستخدمان في إحدى لغات العالم.
ويمكن القول – حسب ما تفيد المراجع التاريخية – أن استخدام المصطلح بالمعنى المتعارف عليه حاليا بدأ في أوائل القرن العشرين في مجالي الرياضيات والحوسبة الآلية، لكن جذوره في التاريخ أعمق من ذلك بكثير. فالمَعاجم الإنجليزية القديمة توضح أن المصطلح يشير إلى نظام العد العشري أو العربي الذي أسماه الأوروبيون Algoritmi de Numero. وكان الاعتقاد سائدا أنه جاء من دمج الكلمتَين ( (Algiros أي مؤلم و ((Arithmos أي رقم. لكن عالم الحوسبة الأمريكي دونالد كونوث كان من أوائل من ذكروا أن المصطلح مَنسوبٌ إلى الخوارزمي.
ويرى بعض الباحثين أن الإنسان منذ القدم وضع خوارزميات لرسم الأشكال الهندسية وحساب مساحاتها وحجومها، وجميع الطرائق التي تعلمها البشر لضرب الأعداد وقسمتها هي عبارة عن خوارزميات. وربما كانت أقدم خوارزمية في التاريخ هي خوارزمية إقليدس حول حساب القاسم المشترك الأكبر لعددين صحيحين التي وضعها في القرن الثالث قبل الميلاد. ومن أشهر الخوارزميات أيضا تلك التي ضعها المصريون القدماء لرسم مثلث قائم الزوايا، والتي حوّلها فيثاغورث إلى نظرية شهيرة.
ويعود الاهتمام المعاصر بمصطلح Algorithm إلى الفترة 1960 – 1980 عندما كان المهتمون بعلم الحاسوب والبَرمَجة يحاولون منح هذا الحقل العلمي الجديد صفة أكاديمية مستقلة عن التخصصات المشابهة. وبرز دور كونوث في إسهامين مهمين: الأول ما ذكره في مقدمة موسوعته (فن البرمجة الحاسوبية) أن كلمة “فن” التي جاءت في العنوان مقتبسة من التسمية العربية، للإشارة إلى أعلى مستويات الأداء العلمي أو المهني، كما ذكر أن مصطلح الخوارزميات منسوب إلى الخوارزمي. والإسهام الثاني لكونوث كان من خلال بحث نشره في مجلة رابطة الآلات الحاسوبية ACM، بمناسبة مرور 20 عاما على تأسيسها بعنوان “Ancient Babylonian Algorithms” أظهر فيه عراقة مفهوم المصطلح، وأن الحضارات البشرية مارست حل المشكلات التي واجهتها بوضع حلول وصفية لكيفية حلها.
وعن استخدام مصطلح الخوارزميات في اللغة العربية يقول الباحث العراقي في علوم الحاسوب الدكتور عبد الإله الديوجي ” إنه في عام 1972 اطلعت للمرة الأولى على الجزء الأول من كتاب كونوث، ولَفَتَني ما كَتبه عن أصل المصطلح Algorithm، وقرأت كذلك ورقته البحثية عن الرياضيات البابلية التي حازت اهتمامي بشكل كبير، ما دعاني في عام 1974 إلى كتابة بحث مختصر في مجلة الجامعة التي تصدر عن جامعة الموصل بعنوان “الخوارزميات في التاريخ” فكانت، حسبما أعتقد، المرة الأولى التي استُخدم فيها “تعريب” المصطلح منسوبا بشكل أشير فيه إلى اسم الخوارزمي باللغة العربية. إذ لم أرَ قبل ذلك التاريخ مَن كَتَبَ باللغة العربية واستخدَم المصطلح بالشكل المنسوب للخوارزمي”.
استخدام الخوارزميات
كان مصطح الخوارزمية في الأصل يدل على ثلاثة تراكيب هي: التسلسل (sequence) ، والاختيار (selection)، والتكرار (repetition). ففي التسلسل تمثل الخوارزمية عدة تعليمات متسلسلة، ربما تكون بسيطة أو من نوعين أولهما الاختيار: حيث تكون هناك مشكلات لايمكن حلها بتسلسل بسيط للتعليمات، بل قد تحتاج إلى اختبار بعض الشروط ثم ننتظر نتيجة الاختبار، فإذا كانت النتيجة صحيحة يمكن تتبع مسار يحوي تعليمات متسلسلة، وإذا كانت خاطئة يمكن تتبع مسار آخر مختلف من التعليمات. والنوع الآخر هو التكرار، وهو المستخدَم عند حل بعض المشكلات التي نحتاج معها إلى إعادة نفس تسلسل الخطوات مرات عدة.
وهناك خوارزميات سريعة جدا تستخدم في حالة المدخلات البسيطة، لكن إذا كثرت هذه المدخلات بصورة كبيرة، فإنها تفشل وتستغرق وقتا طويلا، ومن ثم نلجأ في هذه الحال إلى خوارزميات أخرى تناسب هذه المدخلات، وهذا يعني أنه يجب استخدام الخوارزمية المناسبة للحالة الملائمة لكي يتوصل المبرمج إلى حل سريع وذي مسار بسيط للمشكلة التي يعالجها.
وتتمتع الخوارزميات بعدد من الخصائص أهمها أنها تطبق على معطيات قابلة للتغيير، وتعطي نتيجة محددة، ولها عدد منته من التعليمات، وتتكون من مجموعة من القواعد الدقيقة التي يفهمها الجميع، وأنها دقيقة ومحددة بحيث توصف كل تعليمة من دون لَبس. كما يجب تحديد مجال تعريف المعطيات المدخلة إن وجدت، وأن تكون الخوارزمية فعالة بحيث يتمكن أي شخص من تنفيذ العمليات كلها في وقت منته باستخدام الإمكانات اليدوية.
كادر
الخوارزمي
هو عبد الله بن محمد بن موسى الخوارزمي (781 – 847 م)، أصله من خوارزم الواقعة حاليا في أوزبكستان. عاش في بغداد في عهد الخليفة العباسي المأمون وكان مشرفا على مكتبة المأمون. صنف عددا من الكتب منها: كتابا الزيج الأول والثاني، كتاب الرخامة، كتاب عمل الإسطرلاب، كتاب الجبر والمقابلة. والكتاب الأخير أشهر كتبه، وهي من الكتب المرجعية في مجال الرياضيات بصورة عامة، وفي الجبر بصفة خاصة. وله إنجازات متميزة في الرياضيات والجغرافيا والفلك.