موسوعة الخوارزمي

 

الخوارزميات و بتى المعطيات

مثال توضيحي:

لنفترض أننا نريد ترتيب سلسة منتهية من الأرقام العشوائية بشكل تصاعدي (أو تنازلي).

نبدأ بتعريف المشكلة على الشكل التالي:

الدخل: تتابع من n عدد غير متسلسل <a1,a2,a3,..........,a4>

الخرج: إعادة ترتيب الدخل بحيث نحصل على <b1,b2,b3,........,b4> بحيث يكون b1<=b2<=b3 و هكذا ( => تعني أصغر أو يساوي)

نقول عن الخوارزمية أنها صحيحة إذا توقفت من أجل أي دخل، معطية خرجاً صحيحا دوماًً.

الخوارزمية الغير صحيحة تتوقف معطية خرجاً غير صحيحاً من أجل بعض المداخيل أو قد لا تتوقف أبداً. لاحظ أن الخوارزمية الغير صحيحة قد تتوقف معطية خرجاً صحيحاً من أجل دخلٍ ما و لكنها لا تُعطي خرجاً صحيحاً دوماً.

لنعود الآن إلى مثالنا التوضيحي.

إن المصدر الأول للخوارزميات هو الخبرة التي إكتسبها الإنسان في حل المشاكل عبر الزمن، و مشكلتنا السابقة معروفة جداً من قبل لاعبي الورق حيث يقوم كل لاعب بترتيب الأوراق الموزّعة إليه عند بداية اللعب.

الخوارزمية التي سنستخدمها لحل هذه المشكلة تُدعى خوارزمية الإدراج Insertion sort algorithm و التي تتم كما يلي:

- في البداية تكون يد اللاعب فارغة.

- توضع الأوراق المرتبة عشوائياً على الطاولة.

- يتناول اللاعب في كل مرة ورقة واحدة فقط من الطاولة و يضعها في المكان المناسب .

- يقوم اللاعب بمقارنة الورقة الجديدة مع كل ورقة من الأوراق الموجودة في يده من اليمين إلى اليسار حتى يجد المكان المناسب لها و يقوم بإدراجها في هذا الموقع .

لتمثيل هذه الخوارزمية برمجياً نستخدم لغة برمجية رمزية بهدف الإيضاح.

لنقم بكتابة إجرائية procedure تُدعى insertion_sort هذه الإجرائية تقبل كدخل مصفوفة Array ( مجموعة مرتبة من الأعداد بشكل غير تسلسلي) تحوي n رقم غير مرتبة و تُعطي كخرج نفس المصفوفة بعد ترتيب عناصرها تسلسلياً

Insertion_sort (A)

for j <-- 2 to length[A]

do key <-- A[j]

{ وضع العنصر J في مكانه التسلسلي المحدد }

i <-- j

while i > 0 and A[j] > key

do A[j+1] <-- A[i]

i <-- i-1

A[i+1]<-- key

موسوعة الخوارزمي

الصفحة الأساسية

بحث مخصص