خوارزمية
الخوارزمية هي مجموعة من الخطوات الرياضية والمنطقية والمتسلسلة اللازمة لحل مشكلة ما. وسميت الخوارزمية بهذا الاسم نسبة إلى العالم المسلم الطاشقندي الاصل أبو جعفر محمد بن موسى الخوارزمي الذي ابتكرها في القرن التاسع الميلادي. الكلمة المنتشرة في اللغات اللاتينية والأوروبية هي «algorithm» وفي الأصل كان معناها يقتصر على خوارزمية لتراكيب ثلاثة فقط وهي: التسلسل والاختيار (selection) والتكرار.
- التسلسل: تكون الخوارزمية عبارة عن مجموعة من التعليمات المتسلسلة، هذه التعليمات قد تكون إما بسيطة أو من النوعين التاليين.
- الاختيار: بعض المشاكل لا يمكن حلها بتسلسل بسيط للتعليمات، وقد تحتاج إلى اختبار بعض الشروط وتنظر إلى نتيجة الاختبار، إذا كانت النتيجة صحيحة تتبع مسار يحوي تعليمات متسلسلة، وإذا كانت خاطئة تتبع مسار آخر مختلف من التعليمات. هذه الطريقة هي ما تسمى اتخاذ القرار أو الاختيار.
- التكرار: عند حل بعض المشاكل لا بد من إعادة نفس تسلسل الخطوات عدد من المرات. وهذا ما يطلق عليه التكرار.
و قد أثُبت أنه لاحاجة إلى تراكيب إضافية. استخدام هذه التراكيب الثلاث يسهل فهم الخوارزمية واكتشاف الأخطاء الواردة فيها وتغييرها.
محتويات |
تمثيلها [عدل]
1- خرائط الانسياب: هو تمثيل مصور للخوارزمية يوضح خطوات حل المشكلة من البداية إلى النهاية مع إخفاء التفاصيل لإعطاء الصورة العامة للحل. و يمكن تصنيفها إلى أصناف أربعة هي:
- مخططات سير العمليات التتابعية (Sequential Flowcharts).
- مخططات سير العمليات ذات التفرع (Branched Flowcharts).
- مخططات سير العمليات ذات التكرار والدوران (Loop Flowcharts).
- مخططات سير العمليات ذات الاختيار (Selection Flowcharts).
2-الشفرة الوصفية (Pseudocode): وصف الخوارزمية بلغات البشر كالانجليزية أو الفرنسية أو العربية بطريقة مشابهه للغات البرمجة و لكن بدون أي انتماء لها. البعض يستخدم الكثير من التفاصيل (لتصبح قريبة من لغات البرمجة) والبعض الآخر يستخدم القليل (أي أقرب للغة البشر)... فلا قاعدة معينة لكتابة هذا النوع من الشفرات.
خوارزميات حاسوبية [عدل]
في أنظمة الحاسوب, يمثل الخوارزم في الأساس صورة من منطق أعيد كتابته بواسطة (برمجيات) ليصبح أكثر فعالية يمكن استغلاله في الحواسيب والحصول على النتائج (مخرجات) من بيانات معطاة (مدخلات).
قواعد البرمجة [عدل]
هناك أربعة طرق يستعان بها في الخوارزم البرمجي هي:
- التكرار Looping
- التفرع Branching
- الاختيار Selection
- التتابع Sequence
أمثلة [عدل]
مثال الترتيب [عدل]
من أبسط الخوارزميات هو البحث عن العدد الأكبر في قائمة (غير مرتبة) من الأعداد. يحتاج الحل بالضرورة إلى فحص كل عدد في القائمة ولكن عدداً واحداً كل مرة. بهذه الطريقة يسري الخوارزم البسيط، والذي يمكن صياغته بلغة برمجة عليا كما يلي: وصف عالي المستوى:
- افرض أن العنصر الأول هو الأكبر.
- انظر إلى كل عنصر من عناصر القائمة المتبقية وإذا كان أكبر من العنصر الأكبر حتى الآن، قم بوضع علامة عليه.
- يكون العنصر المعلم الأخير هو أكبر عنصر في القائمة عند انتهاء العملية.
خوارزم إقليدس [عدل]
تظهر خوارزمية إقليدس في المسألة الثانية من كتابه ("نظرية الأعداد الأساسية").[1] يعرض إقليدس المسألة: "إذا كان لدينا عددان أوليان فيما بينهما، لإيجاد قياسهما المشترك الأكبر". يقوم بتعريف "العدد [بأنه] متعدد مؤلف من وحدات":، عدد حسابي، عدد موجب لا يتضمن الصفر. ومن أجل "القياس" فيعني أن نضع قطعة قياس طولية s بشكل متعاقب (q من المرات) على طول القطعة الأطول l حتى يتبقى الجزء r أقل من القطعة الأقصر s.[2] في العبارات الحديثة نقول, الباقي r = l - q*s، q هي حاصل القسمة, r "باقي القسمة", الجزء الكسري المتبقي بعد إجراء القسمة.[3]
برنامج بسيط لمحاكاة خوارزم إقليدس [عدل]
المثال التالي بلغة بيسك يمثل برنامجاً بسيطاً على خوارزم اقليدس.
5 REM Euclid's algorithm for greatest common divisor 6 PRINT "Type two integers greater than 0" 10 INPUT A,B 20 IF B=0 THEN GOTO 80 30 IF A > B THEN GOTO 60 40 LET B=B-A 50 GOTO 20 60 LET A=A-B 70 GOTO 20 80 PRINT A 90 END
مصادر [عدل]
- ^ Heath 1908:300; Hawking’s Dover 2005 edition derives from Heath.
- ^ " 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297
- ^ For modern treatments using division in the algorithm see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293-297 (Volume 2).