الگوریتم چیست؟ + مثال کاربردی

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

در این نوشته ما به صورت کامل با الگوریتم و نحوه ایجاد یک الگوریتم آشنا می شویم. در خصوص اهمیت آن در برنامه نویسی صحبت می کنیم و می بینیم که اصلا باید الگوریتم رو به عنوان یک برنامه نویس یاد بگیریم یا خیر. این نوشته برای کسانی که هیچ دانش تخصصی در خصوص الگوریتم ندارند و یا نمی ندانند که اصلا الگوریتم چیست کاربرد دارد.

در این نوشته همچنین ما اقدام به ارائه روش های حل یک مسئله با الگوریتم و معرفی معروف ترین الگوریتم های جهان که هروزه با آن ها سر و کار داریم می کنیم. پس با ما همراه باشید.

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

بر اساس تعریف ویکیپدیا از الگوریتم: الگوریتم روشی برای حل یک مسئله است. مثالا نحوه محاصبه معدل در مدرسه ها یک الگوریتم ساده است. از دیگر الگوریتم هایی که هروزه با آن سر و کار داریم به عنوان یک فرد عادی می توان به نرم افزار ویز یا گوگل مپ اشاره کرد که آدرس مبدا و مقصد رو بهش می دهیم و کوتاه ترین مسیر رو به ما می دهد.

اگر من بخواهم به زبان ساده بگویم. الگوریتم یعنی همان الگو! الگویی برای حل یک بازه مشخص از مسئله ها. چیزی که داخل الگوریتم همیشه مطرح است این موضع است که ما می توانیم برای هر مسئله چند الگو تعریف کنیم که همه آن ها به درستی مشکل ما را حل می کنند اما در این میان آن الگوریتیمی را انتخاب می کنیم که از همه سریع تر مشکل را حل می کند.

بنا بر این مسئله سرعت در الگوریتم خیلی خیلی اهمیت دارد.

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

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

همچنین این سوال دیرینه که آیا باید برای یادگیری برنامه نویسی الگوریتم بلد شد را به شما پاسخ می دهیم.

مفاهیم الگوریتم

بیایید کمی با مفاهیمی که در طراحی الگوریتم هستند آشنا شویم و به چیستی آن ها بپردازیم.

ببینید هر الگوریتم به عنوان یک راهکار گام به گام و مرحله به مرحله تعریف می شود.

یک یا چند ورودی دریافت می کند و هر ورودی بر اساس مراحلی که داخل خود الگوریتم تعریف شده یک خروجی به ما می دهد.

در داخل الگوریتم ما چیزی به نام یا نداریم. یعنی الگوریتم باید قطعیت داشته باشد. نمی توانیم بگوییم که اگر ورودی ما ۲ بود بیاد این کارو انجام بده اگر ۳ بود بیا اون کارو انجام بده و…. باید بدانید گرچه چنین عملیات هایی در خود طراحی الگوریتم صورت می پذیرد اما به روشی دیگر، به این صورت که در صورتی که نیاز شد ما بتونیم برای ۴ و ۵ هم یه حرکتی متفاوت بزنیم.

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

ببینید همانطور که گفته شد ما برای حل یک مسئله می توانیم با استفاده از روش های طراحی الگوریتم، الگوریتم های متنوعی بسازیم. به طور مثال برای مرتب سازی دانش آموزان یک مدرسه از قد بلند به کوتاه ما می توانیم چند الگوریتم پیاده سازی کنیم که قد دانش آموزان آن مدرسه را بگیرد و از بزرگ به کوچک یا بلعکس مرتب کند.

در این میان ما مثالا برای این کار ۳ الگوریتم ساخته ایم(لزومی نداره بسازید. چنین الگوریتم هایی تعریف شده اند و اگر الگوریتم مرتب سازی رو داخل گوگل سرچ کنید با اونا آشنا می شوید). در بین این الگوریتم ها در نهایت اونی بهتره که سریع در این عملیات مرتب سازی رو انجام میده. به این حداکثر مدت زمانی که الگوریتم ما بر اساس تعداد وردی خود اقدام به پردازش می کند و در نهایت خروجی رو به ما می دهد مرتبه اجرایی یک الگوریتم می گویند که هر چی زمان پردازش آن کمتر باشه بهتره.

به طور مثال شما می خواهید از تهران به شیراز بروید. مسلما از اون مسیری می روید که کوتاه تره و کم ترافیک تر هست.

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

کد نمونه یعنی چه؟ ببینید معمولا زبان های برنامه نویسی ساختار و ویژگی های مشترک زیادی دارند اما کاربرد آن ها و همچنین نحوه اجرا و نوشتن دستورات آن ها متفاوت است اما می توان از یک الگوریتم در تمامی آن ها به درستی استفاده نمود. در این میان ما چیزی نام کد نمونه الگوریتم داریم که عملا یک حال کلی از نحوه استقرار الگوریتم در زبان برنامه نویسی رو به ما نشون میده.

فلوچارت

باید بدانید که الگوریتم ها دارای پیچیدگی های خاص خود می باشند(حقیقا وقتی که وارد این حوزه بشین متوجه می شوید). از این رو معمولا قبل از دست به کار شدن و نوشتن کد سمپل یا نمونه کد میان نحوه کار الگوریتم رو به صورت نمایشی در میارن و قسمت های مختلفش رو می سازند. باید بدایند که این رسم کردن شکل ظاهری برای درک نحوه کارکرد یک الگوریتم بسیار کارامد هست و خیلی میتونه کار رو ساده و مرتب و منظم کنه.

اما فلوچارت هم دقیقا مانند خود مبحث طراحی الگوریتم اصول و مبانی خاصی داره که در یک نوشته دیگر در آینده در خصوص اون توضیح می دهم و اون رو اینجا لینک می کنم

آیا برای یادگیری برنامه نویسی باید الگوریتم بلد باشیم یا بلعکس؟

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

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

به طور کلی ما با استفاده از زبان های برنامه نویسی الگوریتمی که یک (طراح الگوریتم ساخته) رو برای فهموندن به کامپیوتر پیاده سازی می کنیم. از ان رو ما در بسیاری از مواقع نیاز داریم الگوریم رو پیاده سازی کنیم که خیلی ساده است نه اینکه اونو طراحی کنیم.

دقت کنید که طراح الگوریتم خودش یه عنوان شغلی. این فرد باید به حوزه طراحی الگوریتم و کمی هم برنامه نویسی مسلط باشه اما برنامه نویس نیز می بایست کمی به حوزه طراحی الگوریتم و خود مبحث برنامه نویسیش نیز مسلط باشه.

از این رو پیشنهاد من اینه که برنامه نویسی رو یاد بگیرید اما کمی هم در خصوص الگوریتم و پیاده سازی آن و مفاهیم دیگر اون اطلاعات کسب کنید.

آیا الگوریتم همان هوش مصنوعی است؟

بسیاری از افراد فکر می کنند که الگوریتم همان هوش مصنوعی است. یعنی مثالا موتور گفتار به نوشتار گوگل یا بازی های رایانه ای که انجام می دهید و هم محاصبه آمار اینستاگرام همشون یکی هستند.

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

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

مقالات

مشاهده همه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سفارش طراحی سایت
جهت سفارش سایت مورد نظر خود اطلاعات فرم زیر را تکمیل نمایید.