Tip:
Highlight text to annotate it
X
ما هي الخوارزميات؟
في علم الحاسب،
الخوارزمية هي مجموعة من التعليمات
لحل مشكلة معينة، خطوة بخطوة.
في العادة، تنفذ الخوارزميات باستخدام الحواسيب
ولكننا كبشر لدينا خوارزميات أيضًا.
على سبيل المثال، كيف ستقوم بعدّ
عدد الأشخاص في غرفة؟
حسنا، إن كنت مثلي،
ستقوم على الأغلب بالتأشير على كل شخص
كل واحد على حدة
وسوف تعد من الصفر
1، 2، 3، 4 وهكذا دواليك...
حسنا، هذه تعتبر خوارزمية.
في الواقع، نستطيع أن نعبر عنها
بطريقة أكثر رسمية عبر الترميز المستعار،
أي برمجة بجمل تعبيرية
تشبه لغة برمجية.
ليكن n يساوي 0.
لكل شخص في الغرفة، ليكن n=n+1 .
إذن، كيف نترجم هذا الترميز المستعار؟
حسنا، في السطر الأول قمنا بتعريف
متغير أسميناه n،
وجعلنا قيمته المبدئية 0.
ما يعنيه هذا هو أنه في بداية خوارزميتنا
الشيء الذي نقوم بعدّه
قيمته 0.
فقبل أن نبدأ بالعد،
نكون لم نعد أي شيئ أصلا.
أما تسمية المتغير بالحرف "n" هي مجرد عادة.
وقد كان باستطاعتي تسميته بما أريده.
الآن، السطر الثاني ينوه ببداية "حلقة تكرار"،
أي خطوات متتالية سوف تعاد لعدد من المرات.
إذًا، في مثالنا، الخطوة الواحدة التي نأخذها
هي عدّ عدد الأشخاص في الغرفة.
تحت السطر الثاني لدينا السطر الثالث
والذي يصف تماما كيف سنقوم بعدّنا.
المسافة تبين أن السطر الثالث
هو الذي سوف يعاد.
إذًا، ما يقوله الترميز المستعار
هو أنه بعد البدء من الصفر،
لكل شخص في الغرفة،
سوف نزيد n بمقدار 1.
والآن، هل هذه الخوارزمية صحيحة؟
حسنًا، دعنا نجربها.
هل ستعمل إن كان هناك شخصان في الغرفة؟
فلنر.
في السطر الأول، نعيد قيمة n للعدد 0.
لكل من هذين الشخصين،
نزيد قيمة n بمقدار 1.
إذًا، في أول دورة في حلقة التكرار،
نجدد قيمة n من 0 إلى 1،
وفي ثاني دورة حول نفس الحلقة،
نجدد قيمة n من 1 إلى 2.
وإذًا، عند نهاية الخوارزمية، تكون قيمة n تساوي 2،
والذي يساوي بالفعل عدد الناس في الغرفة.
حسنا، الوضع جيد حتى الآن.
ولكن ماذا عن حالة شاذة؟
افرض أنه كان هناك 0 من الأشخاص في الغرفة،
من غيري، وأنا أقوم بالعد.
في السطر الأول، نعيد قيمة n إلى 0.
ولكن في هذه الحالة السطر الثالث لا ينفذ على الإطلاق
وذلك لأنه لا يوجد شخص في الغرفة أصلًا،
ولذلك تبقى قيمة n تساوي ٠،
وهذا بالفعل عدد الأشخاص في الغرفة.
الأمر بسيط، صح؟
ولكن عدّ الأشخاص واحدا تلو الآخر عملية بطيئة، أليس كذلك؟
بالتأكيد نستطيع فعل أفضل من ذلك.
لم لا نعد كل شخصين في مرة واحدة؟
بدل من العد 1، 2، 3، 4، 5، 6، 7، 8 وهكذا دواليك ..
لم لا نعد
2، 4، 6، 8 ... إلخ؟
تبدو هذه العملية وكأنها أسرع، وبالتأكيد هي كذلك.
فلنعبر عن هذا التسريع باستخدام الترميز المستعار.
ليكن n يساوي 0.
لكل زوج من الأشخاص في الغرفة
ليكن n=n+2.
تغيير بسيط، أليس كذلك؟
بدل من عدّ الناس واحدًا على حدة،
نقوم بعدهم اثنين اثنين.
وتكون إذًا خوارزميتنا ضعف سرعة الخوارزمية السابقة.
ولكن هل هي صحيحة؟
فلنر.
هل تعمل إن كان هناك شخصان في الغرفة؟
في السطر الأول، نعين قيمة n إلى 0.
للزوج الوحيد في الغرفة، نزيد قيمة n بمقدار 2.
وعند نهاية الخوارزمية، تكون قيمة n تساوي 2،
والذي يساوي بالفعل عدد الأشخاص في الغرفة.
فلنفرض الآن بأنه هناك 0 من الأشخاص في الغرفة.
في السطر الأول، نعيد قيمة n إلى صفر.
كما في السابق، السطر الثالث لا ينفذ على الإطلاق
بما أنه لا توجد أية أزواج في الغرفة،
وبالتالي تبقى قيمة n تساوي 0
وهو بالفعل عدد الأشخاص في الغرفة.
ولكن ماذا يحصل إن كان هناك 3 أشخاص؟
كيف ستؤدي خوارزميتنا؟
فلنر.
في السطر الأول، نعيد قيمة n إلى 0.
لزوج واحد من هؤلاء الأشخاص،
نزيد قيمة n بمقدار 2.
ولكن ماذا الآن؟
لا يوجد زوج آخر من الأشخاص في الغرفة،
وبالتالي لن يطبق السطر الثاني.
وبالتالي، عند نهاية الخوارزمية
تكون قيمة n لا تزال 2، وهذا خاطئ،
نقول عن هذه الخوارزمية أنه مشوبة
لأنها تحتوي على خطأ.
فلنعدلها بترميز مستعار إضافي.
ليكن n يساوي 0.
لكل زوج من الأشخاص في الغرفة،
ليكن n=n+2.
إذا بقي شخص واحد منفردا،
ليكن n=n+1.
لحل هذه المشكلة
قمنا في السطر الرابع بإضافة شرط،
أو ما يسمى بـ"فرع"
والذي لا ينفذ إلا إن كان هناك شخص واحد
لم نستطع وضعه في زوج مع شخص آخر.
الآن، سواء كان هناك شخص أو ثلاثة
أو أي عدد فردي من الأشخاص في الغرفة،
ستقوم الخوارزمية بعدّهم.
هل نستطيع أن نكوّن خوارزمية أفضل؟
حسنا نستطيع أن نعد كل 3، أو كل 4، أو حتى كل 5 و 10
ولكن قد تتعقد الأمور
إذا ذهبنا أبعد من ذلك.
في نهاية اليوم،
سواء نفذت من قبل الحواسيب أو البشر،
الخوارزميات ليست إلا مجموعة من التعليمات
نحل باستخدامها المشاكل.
هذه لم تكن سوى ثلاثة خوارزميات.
ما المشكلة التي ستحلها أنت باستخدام خوارزمية؟