در این مقالات به سراغ الگوریتم رفته ایم و این بار میخواهیم جواب سوال الگوریتم برنامه نویسی چیست؟ رو دهیم.
سعی میکنیم به صورت دقیق و کاملا ساده در مورد الگوریتم برنامه نویسی صحبت کنیم البته منظور همون الگوریتم است اما بین مردم رایج شده به نام الگوریتم برنامه نویسی، ما هم با همین اسم در مورد آن صحبت میکنیم.
الگوریتم چیست؟
چیزی که در اینترنت و مقالات ویکی پدیا آمده است، مجموعهای متناهی از دستورالعملها است، که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند. به عبارت دیگر یک الگوریتم، روشی گام به گام برای حل مسئله است. شیوه محاسبه معدل در مدرسه، یکی از نمونههای الگوریتم است.
اما اگر به زبان خودمان بخواهیم بگویم الگوریتم چیست، باید بگویم پس از آن که متوجه شدیم نرم افزار قرار است چه کاری انجام دهد و چه مشکلاتی از کاربران رفع کند، حال باید گام های را تعریف کنیم تا با اجرای آنها یکی پس از دیگری، به سیستم دستور دهیم تا آن مشکل خاص را حل کند. این گام های دقیقی که مشخص میکنند نرمافزار ما چگونه می بایست کار کند را اصطلاحاً الگوریتم می گویند. به عبارت دیگر، الگوریتم راه کارهای حل یک مسأله در برنامه نویسی را میگویند.
در واقع برای داشتن یک الگوریتم خوب، پیش از هر چیز می بایست بدانیم که نرمافزار ما قرار است چه کاری انجام دهد. سپس بایستی به سیستم دستور دهیم که آن کار یا کارها را به چه شکلی انجام دهد که این بخش دشوار کار است. در حقیقت، هرچه کارهایی که ما میخواهیم سیستم برای ما انجام دهد بیشتر و پیچیدهتر باشند، مسلماً تعداد خطهای کد بیشتری باید نوشته و برنامه ی ما هم پیچیدهتر خواهد شد و نیاز به الگوریتم پیچیده تری دارا است.
واژه الگوریتم از کجا آماده است؟
الگوریتم نام های دیگری مثل الگوریتمی، خوارزمیک یا خوارزمی دارد. واژه الگوریتم از نام ریاضیدان و ستارهشناس و جغرافیدان نامی ایرانی، ابوجعفر محمد بن موسی خوارزمی (الخوارزمی)، گرفته شده است.
در قرن ۱۳ میلادی واژه الگوریسموس(algorismus) به معنای (سیستم شمارش عربی (دهدهی)) (یعنی اعداد ۱ تا ۹ به علاوه صفر، و نیز مفهوم اعشار) بود؛ که هنوز هم یکی از معانی واژه الگوریسم(algorism) است. معنای دیگر الگوریسم «حساب کردن با کمک اعداد عربی» است؛ یعنی فن انجام أعمال حسابی پایه، مانند جمع و ضرب، با قرار دادن اعداد در زیر هم و إعمال قواعدی خاص، که جایگزین به کارگیری اعداد رومی و استفاده از چرتکه شد. حتی روش انجام دستی تقسیم و جذر گرفتن (رادیکال) هم الگوریسم نامیده میشود. در قرن ۱۹ این کلمه در فرانسوی به algorithme تغییر شکل پیدا کرد، البته معنایش ثابت ماند. طولی نکشید که این کلمه به شکل algorithm وارد زبان انگلیسی شد؛ ولی فقط در اواخر قرن ۱۹ میلادی بود که معنای عامتر امروزیاش را یافت، و به «هر مجموعه قواعدی برای انجام یک رویه محاسباتی یا روال رایانهای به کار رود» الگوریتم گفته شد.
خصوصیات یک الگوریتم
تمام الگوریتمها باید شرایط و معیارهای زیر را دارا باشند:
- ورودی:
یک الگوریتم باید هیچ یا چندین پارامتر را به عنوان ورودی بپذیرد؛ - خروجی:
الگوریتم بایستی حداقل یک کمیت به عنوان خروجی (نتیجه عملیات) تولید کند؛ - قطعیت:
دستورهای الگوریتم باید با زبانی دقیق، و بیابهام بیان شوند. هر دستورالعمل نیز باید انجامپذیر باشد. دستورهایی نظیر «مقدار ۶ یا ۷ را به x اضافه کنید» یا «حاصل تقسیم پنج بر صفر را محاسبه کنید» مجاز نیستند؛ چرا که در مورد مثال اول، معلوم نیست که بالاخره چه عددی باید انتخاب شود، و در خصوص مثال دوم هم تقسیم بر صفر در ریاضیات تعریف نشدهاست. - محدودیت:
الگوریتم باید دارای شروع و پایان مشخصی باشد، به نحوی که اگر دستورهای آن را دنبال کنیم، برای تمامی حالات، الگوریتم پس از طی مراحل شمارا و متناهی خاتمه یابد. به علاوه، زمان لازم برای خاتمه الگوریتم هم باید به گونهای معقول، کوتاه باشد.
مفهوم الگوریتم
- مفهوم الگوریتم را معمولاً با تشبیه به دستور آشپزی توضیح میدهند. مثلاً اگر بخواهیم آبگوشت درست کنیم (عمل مورد نظر) با فرض اینکه مواد خام را داریم (حالت اولیه) مراحل مشخصی را باید طبق دستور آشپزی طی کنیم (دستورالعملها) تا به آبگوشت آماده (حالت پایانی) برسیم. البته الگوریتمها معمولاً پیچیدهتر از این هستند.
- الگوریتم گاه دارای مراحلی است که تکرار میشود (در مثال آبگوشت مثلاً چند بار باید نمک زد یا آب اضافه کرد) و یا در مرحلهای نیازمند تصمیمگیری است (اگر نمک کافی است دیگر نمک نمیزنیم، اگر کافی نیست نمک میزنیم).
- اگر الگوریتم برای عمل مورد نظر مناسب نباشد و یا غلط باشد به نتیجه مورد نظر نمیرسیم. مثلاً اگر الگوریتم آبگوشت را با مواد اولیه کباب انجام دهیم واضح است که به آبگوشت نمیرسیم.
- باید بدانیم برای هر الگوریتم تعریف متغیرها و طراحی مرحله به مرحله بسیار مهم است. زیرا الگوریتم باید بداند بر روی چه متغیرهایی، چه اعمالی را انجام دهد و نتیجه را در غالب چه متغیرها یا پارامترهایی نشان دهد.
نکاتی که باید هنگام نوشتن الگوریتم در نظر داشته باشید:
- مراحل را به ترتیب و پشت سرهم بنویسید (اجرا از بالا به پایین)
- قدمهای ضروری را در نظر گرفته و آنها را در طرح خود به کار ببرید.
- از بیان جزئیات بیهوده پرهیز کرده و سعی کنید تا حد امکان مراحل را ساده و در عین حال کامل بنویسید.
- از زبانی ساده برای نوشتن الگوریتم استفاده کنید، طوری که افراد مختلف برداشت متفاوتی از آن نداشته باشند.
- هر الگوریتم تنها یک نقطه شروع دارد که اولین دستوالعمل از آن شروع میشود، ولی میتواند چندین پایان داشته باشد.
- الگوریتم باید جامع باشد، طوری که در حالتهای خاص نیز نتیجهی مناسب را به شما بدهد.
- اولویت عملگرهای ریاضی را هنگام نوشتن طرحتان در نظر داشته باشید (به عنوان مثال محاسبه حاصل ضرب نسبت به محاسبه حاصل جمع در اولویت است)
مثال: به عنوان مثال فرض کنید میخواهیم مراحل رفتن به دانشگاه را به صورت مرحله به مرحله بنویسیم !
- شروع
- بیدار شدن از خواب
- شستن دست و صورت
- خوردن صبحانه
- پوشیدن لباس مناسب
- برداشتن وسایل مورد نیاز (کتاب و …)
- خروج از خانه
- رفتن به دانشگاه
- ورود به کلاس
- پایان
همانگونه که مشاهده میکنید این دستورات باید به ترتیب انجام شوند، در غیر اینصورت امکان بروز خطا وجود دارد.