الخوارزمية هي مجموعة من الخطوات الرياضية والمنطقية والمتسلسلة اللازمة لحل مشكلة ما. وسميت الخوارزمية بهذا الاسم نسبة إلى العالم المسلم الطاشقندي الاصل أبو جعفر محمد بن موسى الخوارزمي الذي ابتكرها في القرن التاسع الميلادي. الكلمة المنتشرة في اللغات اللاتينية و الأوروبية هي «algorithm» وفي الأصل كان معناها يقتصر على خوارزمية لتراكيب ثلاثة فقط وهي: التسلسل والاختيار (selection) والتكرار.
التسلسل: تكون الخوارزمية عبارة عن مجموعة من التعليمات المتسلسلة، هذه التعليمات قد تكون إما بسيطة أو من النوعين التاليين.
الاختيار: بعض المشاكل لا يمكن حلها بتسلسل بسيط للتعليمات، وقد تحتاج إلى اختبار بعض الشروط وتنظر إلى نتيجة الاختبار، إذا كانت النتيجة صحيحة تتبع مسار يحوي تعليمات متسلسلة، وإذا كانت خاطئة تتبع مسار آخر مختلف من التعليمات. هذه الطريقة هي ما تسمى اتخاذ القرار أو الاختيار.
التكرار: عند حل بعض المشاكل لا بد من إعادة نفس تسلسل الخطوات عدد من المرات. وهذا ما يطلق عليه التكرار.
و قد أثُبت أنه لاحاجة إلى تراكيب إضافية. استخدام هذه التراكيب الثلاث يسهل فهم الخوارزمية واكتشاف الأخطاء الواردة فيها وتغييرها.
\
خريطة انسيابية تمثل خوارزم إقليدس لحساب القاسم الأعظمي المشترك (g.c.d.) بين عددين a وb في موضعين يدعيان A وB. يتم الخوارزم عبر سلسلة من عمليات الطرح المتتالية في حلقتين: إذا كان الفحص B ≤ A ينتج عنه "نعم" (أو قضية صائبة) فإن العدد b في الموضع B أقل من أو يساوي العدد a في الموضع A)ثم يعين الخوارزم B ← B - A (بمعنى أن العدد b - a يبدل القيمة السابقة b). بالمثل، إذا كان A > B فإن A ← A - B.حينما تصبح (محتويات) B مساوية لـ 0، وينجم عن ذلك قاسم مشترك أكبر في A.1- خرائط الانسياب: هو تمثيل مصور للخوارزمية يوضح خطوات حل المشكلة من البداية إلى النهاية مع إخفاء التفاصيل لإعطاء الصورة العامة للحل. و يمكن تصنيفها إلى أصناف أربعة هي:
مخططات سير العمليات التتابعية (Sequential Flowcharts).
مخططات سير العمليات ذات التفرع (Branched Flowcharts).
مخططات سير العمليات ذات التكرار والدوران (Loop Flowcharts).
محططات سير العمليات ذات الاختيار (Selection Flowcharts).
2-الشفرة المزيفة (pseudocode) : تمثيل الخوارزمية بلغات البشر كالانجيليزية أو الفرنسية أو العربية أو بلغات البرمجة مثل باسكال (Pascal) (توجد في العربية أيضاً لغة ج). البعض يستخدم الكثير من التفاصيل والبعض الآخر يستخدم القليل... فلا قاعدة معينة لكتابة هذا النوع من الشفرات.
[عدل] خوارزميات حاسوبيةفي أنظمة الحاسوب, يمثل الخوارزم في الأساس صورة من منطق أعيد كتابته بواسطة برامجيات ليصبح أكثر فعالية يمكن استغلاله في الحواسيب والحصول على النتائج (مخرجات) من بيانات معطاة (مدخلات).
[عدل] قواعد البرمجةهناك أربعة طرق يستعان بها في الخوارزم البرمجي هي:
التكرار 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
التسلسل: تكون الخوارزمية عبارة عن مجموعة من التعليمات المتسلسلة، هذه التعليمات قد تكون إما بسيطة أو من النوعين التاليين.
الاختيار: بعض المشاكل لا يمكن حلها بتسلسل بسيط للتعليمات، وقد تحتاج إلى اختبار بعض الشروط وتنظر إلى نتيجة الاختبار، إذا كانت النتيجة صحيحة تتبع مسار يحوي تعليمات متسلسلة، وإذا كانت خاطئة تتبع مسار آخر مختلف من التعليمات. هذه الطريقة هي ما تسمى اتخاذ القرار أو الاختيار.
التكرار: عند حل بعض المشاكل لا بد من إعادة نفس تسلسل الخطوات عدد من المرات. وهذا ما يطلق عليه التكرار.
و قد أثُبت أنه لاحاجة إلى تراكيب إضافية. استخدام هذه التراكيب الثلاث يسهل فهم الخوارزمية واكتشاف الأخطاء الواردة فيها وتغييرها.
\
خريطة انسيابية تمثل خوارزم إقليدس لحساب القاسم الأعظمي المشترك (g.c.d.) بين عددين a وb في موضعين يدعيان A وB. يتم الخوارزم عبر سلسلة من عمليات الطرح المتتالية في حلقتين: إذا كان الفحص B ≤ A ينتج عنه "نعم" (أو قضية صائبة) فإن العدد b في الموضع B أقل من أو يساوي العدد a في الموضع A)ثم يعين الخوارزم B ← B - A (بمعنى أن العدد b - a يبدل القيمة السابقة b). بالمثل، إذا كان A > B فإن A ← A - B.حينما تصبح (محتويات) B مساوية لـ 0، وينجم عن ذلك قاسم مشترك أكبر في A.1- خرائط الانسياب: هو تمثيل مصور للخوارزمية يوضح خطوات حل المشكلة من البداية إلى النهاية مع إخفاء التفاصيل لإعطاء الصورة العامة للحل. و يمكن تصنيفها إلى أصناف أربعة هي:
مخططات سير العمليات التتابعية (Sequential Flowcharts).
مخططات سير العمليات ذات التفرع (Branched Flowcharts).
مخططات سير العمليات ذات التكرار والدوران (Loop Flowcharts).
محططات سير العمليات ذات الاختيار (Selection Flowcharts).
2-الشفرة المزيفة (pseudocode) : تمثيل الخوارزمية بلغات البشر كالانجيليزية أو الفرنسية أو العربية أو بلغات البرمجة مثل باسكال (Pascal) (توجد في العربية أيضاً لغة ج). البعض يستخدم الكثير من التفاصيل والبعض الآخر يستخدم القليل... فلا قاعدة معينة لكتابة هذا النوع من الشفرات.
[عدل] خوارزميات حاسوبيةفي أنظمة الحاسوب, يمثل الخوارزم في الأساس صورة من منطق أعيد كتابته بواسطة برامجيات ليصبح أكثر فعالية يمكن استغلاله في الحواسيب والحصول على النتائج (مخرجات) من بيانات معطاة (مدخلات).
[عدل] قواعد البرمجةهناك أربعة طرق يستعان بها في الخوارزم البرمجي هي:
التكرار 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