الگوریتم یکی از راههای حل مسئله با روشهای ریاضی و منطقی است، این روش برای نخستین بار توسط خوارزمی (دانشمند ایرانی) مورد توجه قرار گرفت، در حال حاضر اساس اجرای بسیاری از برنامههای کامپیوتری روش خوارزمی است، نام الگوریتم نیز به احترام این دانشمند و از کلمهی الخوارزمی گرفته شده است.
در این آموزش قصد داریم با زبانی ساده مفهوم الگوریتم را برای شما شرح دهیم و مثالهایی کاربردی از الگوریتم را در زندگی روزمره با هم بررسی کنیم، پس از آن چند الگوریتم ریاضی را با هم بررسی کرده و در پایان نیز با برخی از الگوریتمهای پرکاربرد علم کامپیوتر آشنا خواهیم شد.
همچنین میتوانید در انتهای آموزش نسخهی PDF این مقاله را به صورت رایگان دانلود کرده و آن را روی کامپیوتر، موبایل یا تبلت خود ذخیره کنید.
همانطوری که گفته شد، اساس اجرای بسیاری از برنامههای کامپیوتری، الگوریتم میباشد، طرح اصلی خیلی از نرمافزارهایی که در حال استفاده از آنها هستیم ابتدا توسط الگوریتم و فلوچارت (روندنما) ایجاد و سپس به برنامه و در نهایت به زبان کامپیوتر تبدیل میشود، بنابراین اگر میخواهید برنامه نویس خوبی شوید و از پس حل مسائل مختلف برآیید باید به خوبی با مفهوم الگوریتم آشنا بوده و بتوانید طرح و ایدهی خود را در قالب الگوریتم و فلوچارت پیادهسازی کنید.
شاید با دیدن تصویر بالا پیش خود فکر کنید که میخواهیم برای شروع آموزش الگوریتمنویسی شما را با تعداد زیادی محاسبات ریاضی گیج کننده درگیر کنیم، باید بگوییم که اصلا اینطور نیست!
برای شروع احتیاجی به این محاسبات پیچیده نداریم، هرچند که باید بدانیم اساس کار برنامههای کامپیوتری بر مبنای همین محاسبات پیچیده است.
“دونالد کنوت“ یکی از دانشمندان بزرگ علوم کامپیوتر میگوید: علم کامپیوتر چیزی جز مطالعهی الگوریتمها نیست.
راه حل مسائل پیچیده و بزرگی که بر سر راه یک برنامه نویس پیش میآیند، تسلط بر الگوریتمهاست؛ زیرا با نوشتن یا تصور یک الگوریتم منطقی میتوان بر تمام مسائل غلبه کرد.
برای نوشتن یک الگوریتم مناسب باید سه عامل اصلی را در صورت مسئله شناسایی کنیم:
- مقادیر معلوم: اطلاعاتی که در اختیار ما قرار داده شده و باید به کمک آنها به حل مسئله بپردازیم (دادهها)
- خواستههای مسئله: نتایجی که در اثر انجام محاسبات بر روی دادههای مسئله حاصل میشود (مقادیر مجهول)
- عملیات محاسباتی: دستورات و روابط منطقی که برای رسیدن به خواستههای مسئله بر روی دادهها و مقادیر مجهول انجام میشود.
به عنوان مثال فرض کنید وزن مقداری سیب و قیمت هر کیلوگرم از آن به ما داده شده است، از ما خواسته میشود قیمت کل سیبها را محاسبه کنیم.
در این مثال:
دادهها: وزن سیبها (W) و قیمت هر کیلوگرم سیب (P)
خواستهها: محاسبهی قیمت کل سیبها (T)
عملیات محاسباتی: قیمت کل = وزن سیبها * قیمت هر کیلوگرم
مراحل حل مسئله به صورت زیر است:
T=W×P
الگوریتم چیست؟
الگوریتم مفهومی است که مسائل را با استفاده از دستورالعملهای پشت سرهم و به کمک تحلیلهای ریاضی و منطقی مورد بررسی قرار داده و راه حل مناسبی برای آن ارائه میکند، الگوریتم به ما کمک میکند مراحل حل مسئله را به زبان رایانه نزدیکتر کرده و در نهایت آن را به کدهای قابل فهم کامپیوتر تبدیل کنیم.
همچنین تعریفی که برای الگوریتم در ویکیپدیا ارائه شده است:
مجموعهای متناهی از دستورالعملها است، که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند. به عبارت دیگر یک الگوریتم، روشی گام به گام برای حل مسئله است. شیوه محاسبه معدل در مدرسه، یکی از نمونههای الگوریتم است.
حال بیایید یک نمونه الگوریتم که مطمئنا بسیاری از ما تا بهحال طبق آن عمل کردهایم را به هم بررسی کنیم.
به عنوان مثال فرض کنید میخواهیم مراحل رفتن به دانشگاه را به صورت مرحله به مرحله بنویسیم!
- شروع
- بیدار شدن از خواب
- شستن دست و صورت
- خوردن صبحانه
- پوشیدن لباس مناسب
- برداشتن وسایل مورد نیاز (کتاب و …)
- خروج از خانه
- رفتن به دانشگاه
- ورود به کلاس
- پایان
چیزی که واضح است این دستورات باید به ترتیب انجام شوند، در غیر اینصورت امکان بروز خطا وجود دارد، الگوریتمهای کامپیوتری نیز به همین صورت هستند، در صورتی که ترتیب اجرای دستورات آنها به درستی در نظر گرفته نشود احتمال تولید خروجی نامعتبر بسیار بالا خواهد رفت.
حال یک مثال سادهی دیگر از الگوریتمها را با هم بررسی میکنیم، فرض کنید قصد داریم الگوریتم پخت کیک را بنویسیم، مراحل نوشتن این الگوریتم به شکل زیر خواهد بود:
- شروع
- تهیهی آرد
- تهیهی شکر
- تهیهی تخممرغ
- تهیهی آب
- مخلوط کردن، آرد، شکر، تخممرغ و آب
- ریختن محتویات در ظرف مخصوص
- قرار دادن ظرف در فر یا مایکروویو
- روشن کردن حرارت
- صبر کردن تا پخت کامل کیک
- خارج کردن کیک از فر
- برش کیک به قطعات دلخواه
- پایان
همانطور که در این مثال نیز به خوبی مشخص است، تمام مراحل کار، با جزئیات کامل، به صورت گام به گام نوشته شده است، مهمترین نکته برای نوشتن یک الگوریتم خوب رعایت همین موضوع ساده است، شما باید تمام فرایند انجام یک کار را به صورت مرحله به مرحله بنویسید.
مثال کاربردی از الگوریتمها در برنامهنویسی
فرض کنید قصد داریم برنامهای ایجاد کنیم که یک عدد را دریافت کرده و در صورت فرد بودن عدد عبارت Fard و در صورت زوج بودن عبارت Zoje را چاپ کند، مراحل این الگوریتم به شرح زیر است:
- عدد را دریافت کن
- عدد را تقسیم بر ۲ کن
- اگر باقی مانده برابر با ۱ بود عبارت Fard را نمایش بده در غیر این صورت عبارت Zoje را نمایش بده.
- پایان
جالب است بدانید، راههای زیادی برای نوشتن یک الگوریتم وجود دارد، آنهم الگوریتمی که دقیقا یک نتیجهی یکسان را در پی داشته باشد، آیا میتوانید چند پاسخ دیگر نیز برای سوال بالا بنویسید؟ الگوریتمهای نوشتهشدهی خود را در بخش دیدگاهها به ما و سایر کاربران نشان دهید!
ضمنا در صورتی که دوست دارید بیشتر با نحوهی نوشتن الگوریتمها آشنا شوید میتوانید به آموزش چگونه الگوریتم بنویسیم مراجعه کنید، آنجا مثالهای کاربردی بیشتری از نحوهی نوشتن الگوریتمها برای شما آوردهایم، مثالهایی که در دنیای واقعی نیز کاربرد دارند.
نکات مهمی که باید در نوشتن الگوریتم به آنها توجه داشته باشید
رعایت این موارد برای نوشتن یک الگوریتم صحیح لازم و ضروری است:
- مراحل را به ترتیب و پشت سر هم بنویسید (اجرا از بالا به پایین)
- قدمهای ضروری را در نظر گرفته و آنها را در طرح خود به کار ببرید.
- از بیان جزئیات بیهوده پرهیز کرده و سعی کنید تا حد امکان مراحل را ساده و در عین حال کامل بنویسید.
- از زبانی ساده برای نوشتن الگوریتم استفاده کنید، طوری که افراد مختلف برداشت متفاوتی از آن نداشته باشند.
- هر الگوریتم تنها یک نقطه شروع دارد که اولین دستورالعمل از آن شروع میشود، ولی میتواند چندین پایان داشته باشد.
- الگوریتم باید جامع باشد، طوری که در حالتهای خاص نیز نتیجهی مناسب را به شما بدهد.
- اولویت عملگرهای ریاضی را هنگام نوشتن طرحتان در نظر داشته باشید (به عنوان مثال محاسبه حاصل ضرب نسبت به محاسبه حاصل جمع در اولویت است)
به یاد داشته باشید، نمادهای ریاضی که از آنها برای حل الگوریتم استفاده میکنید باید در صفحه کلید رایانه شما نیز وجود داشته باشند! خیلی از نمادهای ریاضی (مانند خط کسری، توان و…) را نمیتوانید بر روی کیبورد خود بیابید در نتیجه اجازه ندارید برای نوشتن الگوریتم از آنها استفاده کنید.
فرض کنید میخواهید عبارت زیر را به صورت قابل فهم برای رایانه (به صورت الگوریتم) بنویسید:
شما نمیتوانید این عبارت را با استفاده از کیبورد رایانهی خود بنویسید، در نتیجه باید آن را به صورت زیر ایجاد کنید:
توصیهی همیار آیتی: فرض کنید رایانه مانند کودکی است که چیزی نمیداند و شما میخواهید مراحل حل یک مسئله را برای او توضیح دهید، باید سعی کنید تمام نکات ضروری را به صورت مرحله به مرحله برای او بنویسید تا مطابق دستورالعملهای شما پیش برود و در نهایت به نتیجهی مورد نظر برسد.
اگر جزئیات بیهوده را در مراحل قرار دهید باعث گیج شدن او خواهید شد، همچنین اگر توضیحات کامل نباشد به نتیجهی دلخواه نخواهید رسید، رایانه ما فعلا فقط چهار عمل اصلی را میشناسد و شما باید با استفاده از آنها مراحل حل مسئله را برای او توضیح دهید، برای نشان دادن اولویتها میتوانید از پرانتز کمک بگیرید.
برخی از الگوریتمهای معروف در علم کامپیوتر
این موارد الگوریتمهای معروفی از دنیای رایانهها هستند که در پشت پردهی بسیاری از نرمافزارهای امروزی مورد استفاده قرار گرفتهاند:
- الگوریتمهای مرتبسازی
- الگوریتمهای حریصانه
- الگوریتم کراسکال و دایجکسترا
- الگوریتمهای تقسیم و غلبه
- و…
در پایان این آموزش شما باید مهارتهای زیر را کسب کرده باشید:
- با مفهوم الگوریتم و کاربرد آن آشنا شده باشید.
- بتوانید برای حل مسائل الگوریتم مناسب را ارائه دهید.
برای درک بهتر این آموزش تمرینهای زیر را انجام دهید:
- دادهها و خواستههای مسئله برای حل یک معادلهی درجه ۲ را بنویسید.
- فرض کنید طول (L)، عرض (W) و ارتفاع (H) یک مکعب مستطیل به شما داده شده و حجم آن (V) را از شما میخواهند، نحوه حل این مسئله را به صورت مرحله به مرحله بنویسید.
دانلود نسخهی PDF این آموزش