در دنیای برنامه نویسی الگوریتم ها از نقش بسیار مهمی برخوردارند، الگوریتم ها در دنیای نرم افزار مانند قوانین فیزیک در دنیای واقعی هستند؛ هر کدی که ما مینویسیم در واقع یک الگوریتم است بنابراین خیلی مهم است که با روش های مختلف الگوریتم نویسی آشنا شویم تا بتوانیم از آنها در کد هایمان به روش صحیح استفاده کنیم. در این مقاله قصد داریم تا با مفهوم الگوریتم آشنا شویم و درباره اهمیت آنها در برنامه نویسی صحبت کنیم.

الگوریتم چیست؟

طبق تعریف : « الگوریتم مجموعه ای ترتیب دار از دستورات است که برای انجام کاری مشخص استفاده میشوند».

برنامه نویس ها معمولا الگوریتم را به دستور پخت غذا تشبیه میکنند. دستورالعمل پخت غذا گام به گام، مراحل درست کردن غذا را از مواد اولیه توضیح میدهد پس در واقع نوعی الگوریتم محسوب میشود. به طور کلی الگوریتم ها از سه قسمت اصلی تشکیل میشوند:

1.     ورودی

الگوریتم ها معمولا مقادیری به عنوان ورودی دارند که دستورات روی آنها انجام میشود، برگردیم به همان مثال دستور پخت غذا؛ هر دستور غذایی نیاز به یک سری مواد اولیه دارد که میتواند چیز های مختلفی باشد مثل تخم مرغ، گوشت، ادویه، روغن و….   در مورد الگوریتم ها هم همینطور است. برای مثال الگوریتم “جستجوی دودویی” نیاز به یک لیست مرتب شده و یک مقدار مشخص برای جستجو دارد در مقالات بعدی در اینباره بیشتر صحبت میکنیم.

2.     سلسله دستورات

مهم ترین بخش هر الگوریتم سلسله دستورات است، نکته مهم که در تعریف هم گفته شد این است که این دستورات ترتیب دارند بنابر این ما به یک لیست وسایل سفر نمیتوانیم بگوییم الگوریتم. در یک دستور العمل غذا همیشه ترتیب وجود دارد و اگر کار ها بدون در نظر گرفتن آن ترتیب انجام شود در نهایت به خروجی دلخواهمان نمیرسیم.

3.     خروجی

خروجی در واقع همان هدفی است که ما الگوریتم را برای آن نوشته ایم، مهم ترین معیار بررسی یک الگوریتم این است که خروجی درستی به ما بدهد، اینکه الگوریتم سریع و بهینه باشد در اولویت دوم است (البته نه همیشه، در مقالات بعدی بیشتر توضیح میدهم)، طبیعتا انتظار ما این است که اگر ورودی درست باشد و سلسله دستورات هم به ترتیب و با دقت انجام شده باشد خروجی هم درست باشد. اگر مواد اولیه را به درستی تهیه کرده باشیم و تمام مراحل را طبق دستور العمل پیش رفته باشیم باید به غذای خوشمزه و مطلوبی برسیم وگرنه بدون شک دستور پخت غذا مشکل داشته است.

الگوریتم نویسی در دنیای برنامه نویسی چه کاربردی دارد؟

همان طور که گفتیم هر کدی که ما مینویسیم نوعی الگوریتم است اما به سه دلیل مهم ما باید حتما مفاهیم الگوریتم نویسی و ساختمان داده را یاد بگیریم

1.     حل مسائل پیچیده

شاید بتوانیم مسائل ساده برنامه نویسی را بدون دانش الگوریتم نویسی حل کنیم اما برای مسائل پیچیده تر بدون دانستن این مفاهیم به مشکل میخوریم برای مثال شاید شما بتوانید برج هانوی را با سه یا چهار دیسک به راحتی حل کنید و الگوریتم آن را بنویسید اما آیا میتوانید همین کار را برای هزار دیسک انجام دهید؟ اگر بیشتر باشد چطور؟ حل مسائل پیچیده برنامه نویسی بدون دانش الگوریتم اگر غیرممکن نباشد بسیار دشوار است.

برج هانوی

2.     افزایش سرعت مسئله

در برخی مسائل ممکن است ما بتوانیم بدون دانش الگوریتم هم مسائل را حل کنیم اما سرعت الگوریتمی که به دست می آید بسیار پایین تر از یک الگوریتم بهینه است، البته اختلاف سرعت الگوریتم ها در اعداد بزرگ خودش را نشان میدهد (در مقالات بعدی بیشتر در اینباره صحبت میکنیم) برای اینکه بیشتر متوجه اهمیت این مورد بشویم بهتر است یک مثال بزنیم: فرض کنید ما یک مجموعه ای از یک میلیارد عدد داریم و میخواهیم یک عدد را در این مجموعه پیدا کنیم، برای این کار دو الگوریتم وجود دارد : جستجوی خطی  و جستجوی دودویی (در مقالات بعدی درباره هر یک از این ها بیشتر صحبت میکنیم)

اگر فرض کنیم که بررسی کردن هر عدد یک ثانیه طول میکشد، پیدا کردن این عدد با روش خطی بیش از 37 سال طول میکشد در صورت که با جستجوی دودویی فقط 30 ثانیه طول خواهد کشید و این اختلاف در اعداد بزرگتر به مراتب بیشتر خواهد شد. پس بسیار مهم است که الگوریتم هایی با بالاترین سرعت ممکن بنویسیم.

3.     استفاده بهینه از منابع سیستم

نرم افزار هایی که ما مینویسیم قرار است توسط سخت افزار ها اجرا شوند و همه ما به خوبی میدانیم که با وجود پیشرفت تکنولوژی هنوز سخت افزار ها محدودیت های زیادی دارند پس ما باید الگوریتم های مان را طوری بهینه کنیم که از منابع سیستم به درستی استفاده کنیم تا بیشترین بازدهی را بگیریم، در مباحث ساختمان داده بیشتر در اینباره صحبت خواهیم کرد

از کجا الگوریتم یاد بگیریم؟

در مقاله قبلی یک کتاب بسیار عالی برای یادگیری الگوریتم معرفی کردم، اما اگر مطالعه این کتاب برایتان دشوار است میتوانید سری مقالات الگوریتم و ساختمان داده من را مطالعه کنید، در این مقالات سعی کردم که مفاهیم الگوریتم را به صورت جامع و کاربردی اما به زبان ساده توضیح دهم امیدوارم که برایتان مفید باشد.

 

خیلی ممنون از اینکه وقت گذاشتید و این مقاله رو مطالعه کردید، ممنون میشم نظرتون رو بهم بگید.