وبینار رایگان برنامه ریزی و حفظ تمرکز در شرایط فعلی یکشنبه ساعت ١٩
اطلاعات وبینار
کنکور کامپیوتر

الگوریتم چیست - به زبان ساده و با مثال های فراوان

در این مقاله به زبان بسیار ساده و با مثال های متعدد توضیح داده شده که الگوریتم چیست و چه کاربردهایی دارد

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

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

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

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

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

الگوریتم‌ها دارای ورودی، خروجی و مجموعه‌ای از قوانین محدود هستند

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

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

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

پوشیدن لباس در هنگام صبح و آماده شدن برای رفتن به محل کار و یا دانشگاه یکی از مثال‌هایی است که از اجرای یک الگوریتم ساده در مغز انسان نشأت می‌گیرد. اما اگر قرار باشد این روند را یادداشت کنید و به یک کودک 5 ساله آموزش دهید، چگونه آن را انجام می‌دادید؟ پاسخ این سوال به روشی دقیق، ساختار یک الگوریتم را تشکیل می‌دهد.

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

تعریف ورودی الگوریتم (Input)

ورودی‌ها اطلاعاتی هستند که یک الگوریتم در هنگام تصمیم گیری به آنها نیاز دارد. وقتی صبح می‌خواهید لباس بپوشید به چه اطلاعاتی نیاز دارید؟ قبل از هر چیز باید بدانید چه لباس‌هایی در کمدتان در دسترس شماست و بعد از آن مواردی مانند دما، پیش‌بینی آب و هوا در طول روز و یا حتی برخی از ترجیحات شخصی را در انتخاب لباستان در نظر می‌گیرید.

همه این موارد بعنوان ورودی یک الگوریتم در نظر گرفته می‌شوند. در برنامه نویسیبرنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟برنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟در عصر فعلی برنامه‌نویسی یکی از پرطرفدارترین شغل‌های دنیاست، دغدغه‌‌ای افرادی که می‌خواهند در مسیر برنامه‌نویس شدن قدم بردارند این است که نمی‌دانند از کجا باید شروع کنند، در این صفحه هر آن چه برای تبدیل شدن به یک برنامه نویس حرفه ای نیاز دارید در اختیارتان قرار گرفته است، ورودی‌ها اغلب به صورت مجموعه‌های ساده‌ای از اعداد، کلمات (رشته) و یا انواع مختلف دیگری از داده‌ها تعریف می‌شوند. برای مثال، دما یک عدد است و پیش‌بینی آب و هوا ممکن است کلماتی مانند «بارانی» یا «آفتابی» باشد.

مرحله محاسبات در الگوریتم

در ساختار یک الگوریتم، واحد محاسبات قلب الگوریتم نامیده می‌شود. این بخش شامل سه بخش محاسبات ریاضی، تصمیم‌گیری (شرطی) و تکرار است. اما این بخش برای مثال لباس پوشیدن چگونه بیان می‌شود؟ اینکه کت بپوشید ممکن است به دما بستگی داشته باشد و اینکه کدام ژاکت را انتخاب کنید ممکن است به پیش بینی هوا در طول روز وابسته باشد (واحد محاسبات) . به زبان کامپیوتر، بخشی از الگوریتم لباس پوشیدن اینگونه بیان می‌شود "اگر هوا زیر 25 درجه است و باران می بارد، یک کت بارانی و پیراهنی آستین بلند برای پوشیدن زیر آن انتخاب کن. (واحد تصمیم‌گیری)

نمایش خروجی الگوریتم (Output)

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

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

چرا یادگیری الگوریتم‌ ها و نحوه استفاده از آن‌ها مهم است؟

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

تصور کنید برای اینکه به رستوان مورد علاقه‌تان بروید و غذا سفارش دهید سه مسیر مختلف وجود دارد: عبور از پیاده‌رویی که در امتداد بزرگراه است (راه طولانی و خطرناکی دارد)، عبور از کوچه پس کوچه‌ها (مسیر سریع اما همچنان خطرناک) و یا استفاده از تاکسی (سریع و ایمن اما باید هزینه بپردازید). باز حتی ممکن است راه‌حل‌های متفاوت دیگری نیز برای این مسئله وجود داشته باشد، مثلاً  از خودروی شخصیتان استفاده کنید و به رستوران بروید و یا حتی بصورت تلفنی سفارش بدهید و منتظر پیک رستوران بمانید. در نهایت نکته حائز اهمیت این است که شما موثرترین راه را برای دریافت غذای خود پیدا کنید.

یک برنامه نویسبرنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟برنامه نویسی کامپیوتر چیست و چطور می توانید یک برنامه نویس موفق شوید؟در عصر فعلی برنامه‌نویسی یکی از پرطرفدارترین شغل‌های دنیاست، دغدغه‌‌ای افرادی که می‌خواهند در مسیر برنامه‌نویس شدن قدم بردارند این است که نمی‌دانند از کجا باید شروع کنند، در این صفحه هر آن چه برای تبدیل شدن به یک برنامه نویس حرفه ای نیاز دارید در اختیارتان قرار گرفته است موفق همواره به‌دنبال مؤثرترین و سریع‌ترین راه‌حل ممکن است یعنی امکان اجرای سریع و بدون وقفه برنامه، میزان حافظه موردنیاز، سهولت در پیاده‌سازی و اجرای طرح و حتی برآورد و تخمین هزینه‌های انجام شده برای دریافت نسخه نهایی از مواردی است که یک برنامه‌ نویس باید به آن‌ها آگاه باشد.

به عنوان مثال، شما می‌خواهید یک آرایه از n عدد را به ترتیب صعودی مرتب کنید.

آرایه اولی یک آرایه نامرتب است که قرار است مرتب شود

این خیلی ساده به نظر می رسد!

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

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

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

الگوریتم ها به شما کمک می کنند تا شغلی پیدا کنید

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

الگوریتم‌های زیادی برای یک مسئله وجود دارد که همیشه بهینه‌ترین آن می‌تواند مفید باشد

فرد مصاحبه‌کننده از شما انتظار دارد که علاوه بر ارائه راه‌حل برای مسئله، در خصوص اینکه چرا الگوریتم A را به الگوریتم B ترجیح داده‌اید نیز توضیحاتی بیان کنید.

وظیفه اصلی یک توسعه دهنده، تجزیه و تحلیل و حل مسائل گوناگون است چرا که مهم‌ترین و اصلی‌ترین ابزار برای رسیدن به یک هدف نهایی است. موتور جستجوی گوگل (Google) اگر به خاطر استفاده منحصر به فرد و پیشگامانه‌اش از الگوریتم ها نبود، به این میزان کاربردی و پرطرفدار و البته پول‌ساز نبود. گوگل در حال حاضر بیش از 91 درصد از بازار جهانی موتورهای جستجو را در اختیار دارد و این بیش از دو تریلیون جستجو در هر سال است! در روزهایی که سایر موتورهای جستجو  صرفاً به دنبال کلمات کلیدی بودند، گوگل متوجه شد که آنچه واقعاً اهمیت دارد ارتباط میان کلمات و افراد است. یافتن این ارتباطات و بروزرسانی آن‌ها، اساس کار الگوریتم‌های Google است و با استفاده از نتایج بدست آمده؛ تایپ یک کاربر در موتور جستجو را پیش بینی کرده و هزاران موضوع مرتبط دیگر را به او پیشنهاد می‌دهد.

الگوریتم ها به آموزش مغز شما کمک می کنند

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

استیو جابز : "همه باید برنامه نویسی کامپیوتر را یاد بگیرند، زیرا به شما یاد خواهد داد که چگونه فکر کنید."

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

وب‌سایت های بسیار خوبی در زمینه تمرین و افزایش مهارت های حل الگوریتم  وجود دارد که بازدید و بررسی آن‌ها را به شما پیشنهاد می‌کنیم:            

Codewars، LeetCode، Project Euler، HackerRank

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

در واقعیت، پردازنده یک کامپیوتر به طور مداوم در حال انجام محاسبات ریاضی است و مسائل زیادی برای حل کردن دارد. دقیقاْ به همین دلیل است که الگوریتم ها را قلب علم کامپیوتر می‌دانند. الگوریتم کامپیوتری یک روش محاسباتی است که مجموعه‌ای محدود از ورودی‌ها را دریافت کرده و با انجام اندکی محاسبات ریاضی و منطق، خروجی مورد نظر را تولید می‌کند. یک الگوریتم در برنامه نویسی چندین مرحله به شرح زیر دارد:

  • تعریف مسئله
  • جمع آوری داده ها
  • پردازش داده (درک آنکه چه داده‌هایی دارد و یا آن‌ها را به فرمی درآورد که قابل استفاده باشد)
  • رویکرد منطقی : بکارگرفتن داده‌های جمع‌آوری یا تولید شده در جهت منطق حل مسئله
  • راه حل: نمایش راه حل ارائه شده در قالب گرافیک یا نمودار و یا یک چارت

به طور کلی، یک الگوریتم با توجه به مقدار ورودی X، آن را به مقدار خروجی Y تبدیل می‌کند. اگر آن را به صورت ریاضی بخواهیم بیان کنیم، یک الگوریتم دقیقا تابعی مانند f در نظر گرفته می شود که Y‌ خروجی مورد نظر آن است: y = f(x)

نکته: الگوریتم ها راه‌حل های عمومی هستند که به هیچ زبان برنامه نویسی محدود نمی‌شوند.

25 الگوریتمی که هر برنامه‌نویسی باید از آن‌ها آگاه باشد

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

  1. الگوریتم جستجو دودویی (Binary Search)
  2. الگوریتم جستجوی سطح اول (Breadth First Search (BFS))
  3. الگوریتم جستجوی عمق اول (Depth First Search (DFS))
  4. الگوریتم مرتب‌سازی ادغامی (Marge Sort)
  5. الگوریتم مرتب‌سازی سریع (Quick Sort)
  6. الگوریتم Kruskal
  7. الگوریتم فلوید وارشال (Floyd Warshall)
  8. الگوریتم دایجسترا (Dijkstra)
  9. الگوریتم Bellman Ford
  10. الگوریتم Kadane
  11. الگوریتم Flood Fill
  12. الگوریتم تشخیص چرخه فلوید (Floyd’s Cycle Detection)
  13. الگوریتم Union Find
  14. الگوریتم مرتب سازی توپولوژیکی (Topological Sort)
  15. الگوریتم KMP
  16. الگوریتم مرتب سازی درجی (Insertion Sort)
  17. الگوریتم مرتب سازی انتخابی (Selection Sort)
  18. الگوریتم مرتب‌سازی شمارشی (Counting Sort)
  19. الگوریتم مرتب‌سازی هیپ (Heap Sort)
  20. الگوریتم مرتب سازی توپولوژیکی Kahn
  21. الگوریتم فشرده‌سازی کد هافمن (Huffman Coding Compression)
  22. الگوریتم انتخاب سریع (Quickselect)
  23. الگوریتم رأی اکثریت Boyer – Moore
  24. الگوریتم اویلر (Euclid)
  25. الگوریتم Lee

قبل از یادگیری الگوریتم چه چیزهایی را باید بدانیم؟

بهتر است قبل از یادگیری الگوریتم ها در علوم کامپیوتر، درک خوبی از مفاهیم برنامه نویسی مانند متغیرها، توابع، کلاس‌ها و به ویژه مفاهیم برنامه‌ نویسی شی‌گرا (OOP: Object Oriented Programming) داشته باشید. موارد بیان شده به عنوان مفاهیم پایه در نظر گرفته می‌شوند و در ادامه برای درک مطالب پیچیده و پیشرفته‌تر در علوم کامپیوتر به آن‌ها نیاز خواهید داشت.

ابزارهای نمایش الگوریتم به شرح زیر هستند : 

فلوچارت (Flowchart)

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

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

  • نحوه سازماندهی کد را نشان دهند.
  • اجرای کد را در یک برنامه تجسم کنند.
  • ساختار یک وب‌سایت یا برنامه را نشان دهند.
  • نحوه حرکت کاربران در یک وب سایت یا برنامه را متوجه شوند.

نماد‌های رایج فلوچارت

نقطه شروع و پایان

نقطه شروع و پایان

پردازش

واحد پردازش

واحد تصمیم

واحد تصمیم‌گیری

داده‌ای ورودی/خروجی

داده‌های ورودی/خروجی

جهت/جریان

جهت/جریان

مستندات

مستندات

دیتابیس

پایگاه‌داده

 

فلوچارت‌های معروف در حوزه نرم‌افزار کامپیوتر

  • زبان مدل سازی یکپارچه (UML) : یک زبان همه منظوره است که در مهندسی نرم افزار برای مدل‌سازی استفاده می شود.
  • نمودارهای Nassi-Shneiderman : در برنامه‌نویسی کامپیوتر یک نمایش گرافیکی برای برنامه نویسی ساخت یافته است. این نوع نمودار در سال 1972 توسط ایزاک ناسی و بن اشنایدرمن که هر دو دانشجوی کارشناسی ارشد دانشگاه استونی بروک بودند توسعه یافت.
  • نمودارهای DRAKON : یک زبان برنامه نویسی بصری الگوریتمی است که برای تولید فلوچارت استفاده می شود.

شکل زیر ساختار یک فلوچارت را نشان می‌دهد

شبه کد (Pseudocode)

در علوم کامپیوتر، شبه‌کدها توصیفی ساده از مراحل یک الگوریتم هستند. برخلاف زبان‌های برنامه‌نویسی از دستور خاصی تبعیت نمی‌کنند و بر روی کامپیوتر قابل اجرا نیستند. این شبه‌کدها برای درک راحت انسان از مراحل الگوریتم در نظر گرفته شده‌اند و جزئیاتی را که برای درک ماشینی ضروری هستند، مانند تعریف متغیر و توابع خاص حذف می‌کنند. شبه کدها توصیفی کارآمد و مستقل از محیط و اصول کلیدی یک الگوریتم هستند و درک آن برای یک آماتور و یا برنامه‌نویس ساده‌تر است. معمولاً از شبه‌کدها (کدهای کاذب) در کتاب‌های درسی و انتشارات علمی برای مستندسازی الگوریتم‌ها استفاده می‌شود. شبه‌کدها عموماً از قوانین نحوی هیچ زبان خاصی پیروی نمی‌کنند و هیچ فرم استاندارد سیستماتیکی برای آن‌هاوجود ندارد. برخی از نویسندگان شبه‌کدها در سبک و نحو نگارش خود از ساختارهای کنترلی (while, If then else, Repeat until, for) برخی زبان‌های برنامه‌نویسی مانند Java،Lisp وFortran، Pascal، BASIC، C، C++ وALGOL استفاده می‌کنند. فراخوانی توابع و بلوک‌ها مانند کدهای موجود در یک حلقه، اغلب با یک جمله به زبان طبیعی یک خطی جایگزین می شوند.

مقایسه کلی فلوچارت، شبه کد و الگوریتم

مزایای و معایب الگوریتم

مزایای الگوریتم به شرح زیر است : 

  1. نمایش گام به گام راه‌حل یک مسئله را بیان و درک آن را آسان می‌کند.
  2. از رویه و استاندارهای مشخصی پیروی می‌کند.
  3. به هیچ زبان برنامه نویسی وابسته نیست و برای همه افراد حتی آن‌هایی که دانش برنامه‌نویسی ندارند قابل فهم و آسان است.
  4. هر مرحله در یک الگوریتم، دنباله منطقی خاص خود را دارد و اشکال زدایی آن آسان است.
  5. با استفاده از الگوریتم، مسئله به قطعات یا مراحل کوچکتر تقسیم می‌شود و برای برنامه‌نویس آسان‌تر است که آن را به یک برنامه واقعی تبدیل کند.

معایب الگوریتم به شرح زیر است :

  1. الگوریتم‌ها زمان بر هستند.
  2. نشان دادن انشعاب و حلقه زدن در الگوریتم‌ها مشکل است.
  3. قرار دادن وظایف بزرگ در الگوریتم ها دشوار است.

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

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

ساختمان‌های داده‌، بلوک‌های سازنده الگوریتم‌ها هستند و الگوریتم‌ها بسترهایی هستند که ساختمان داده‌ها بر روی آن ها اعمال و آزمایش می‌شوند.

تفاوت میان الگوریتم و برنامه‌

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

برنامه (Program)

الگوریتم (Algorithm)

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

یک روش کاملاً تعریف شده، گام به گام و منطقی برای حل یک مسئله معین است.

اجزای یک برنامه ممکن است از نظر مفهومی مرتبط نباشند.

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

بسته به وظیفه خاصی که برنامه برای آن طراحی شده، می‌تواند به هر زبان برنامه‌نویسی مانند پایتون، جاوا، C++، جاوا اسکریپت و یا هر زبان دیگری نوشته شود.

الگوریتم‌ها با استفاده از یک زبان محاوره‌ای ساده نوشته می‌شوند و برای افرادی که دانش برنامه نویسی نیز ندارند، قابل درک هستند.

ما برنامه‌های کامپیوتری را به زبان کامپیوتر می‌نویسیم و سپس یک کامپایلر یا مترجم آن را به زبانی ترجمه می‌کند که برای هر سیستم کامپیوتری قابل درک باشد.

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

یک برنامه همیشه توسط کامپیوتر اجرا می‌شود.

الگوریتم می‌تواند توسط هر فردی طراحی  و اجرا  شود.

 

نمونه الگوریتم جمع دو عدد :

Step 1: Start

Step 2: Declare variables num1, num2 and sum.

Step 3: Read values num1 and num2.

Step 4: Add num1 and num2 and assign the result to sum. sum←num1+num2

Step 5: Display sum

Step 6: Stop

نمونه کد پایتون جمع دو عدد:

This program adds two numbers/

num1 = 1.5

num2 = 6.3

# Add two numbers

sum = num1 + num2

# Display the sum

print('The sum of {0} and {1} is {2}'.format(num1, num2, sum))

ویژگی‌های یک الگوریتم چیست؟

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

  1. ورودی‌ها به خوبی تعریف شده باشند : ورودی داده‌ای است که در طول محاسبات برای تولید خروجی توسط کدهای دستوری مصرف می‌شود. یک الگوریتم باید دارای ورودی‌های کاملاً تعریف شده باشد که در آن نوع داده، میزان دریافتی و نحوه ورود آن‌ها توسط الگوریتم به طور واضح مشخص است.
  2. خروجی‌ها به خوبی تعریف شده باشند : خروجی داده‌های حاصل از محاسبه (نتیجه مورد نظر شما) است. یک الگوریتم باید یک یا چند خروجی کاملاً تعریف شده داشته باشد و با خروجی مورد نظر مطابقت داشته باشد. میزان سنجش دقت خروجی مستلزم داشتن اطلاعاتی نظیر نوع داده، مقدار و نحوه نمایش آن است. (اگر الگوریتم دارای چند خروجی باشد باید خصوصیات هریک از آن‌ها به طور کاملاُ مشخص تعیین شده باشد.)
  3. واضح و بدون ابهام : الگوریتم باید دارای قطعیت باشد و هر یک از مراحل آن از همه جهات روشن و جزئیات هر مرحله مشخص شود (از جمله نحوه رسیدگی به خطاها). قطعیت یعنی مشخص کردن توالی عملیات برای تبدیل ورودی به خروجی. این الگوریتم باید شامل همه چیزهای کمی باشد و نه کیفی. اگر خودتان در مورد آن ابهام دارید، نمی توانید انتظار داشته باشید که کامپیوتر چیزی را بفهمد!
  4. امکان‌پذیر : الگوریتم باید ساده، عمومی و کاربردی باشد تا بتوان با منابع موجود آن را اجرا کرد. اگر الگوریتم دارای مراحل زائد و غیرضروری باشد آن را عملاً بی‌اثر و ناکارآمد خواهد کرد. درحال پختن غذا هستید و سبزیجاتی را که در دستور غذا استفاده نشده‌اند، خرد می‌کنید و این کار عملاً اتلاف وقت است.

  5. متناهی بودن : هر الگوریتمی باید در نهایت متوقف شود و توقف به این معناست که یا الگوریتم خروجی مورد انتظار را تولید کرده و یا جوابی برای آن مسئله پیدا نکرده است. بهرحال الگوریتم ها بایستی پس از طی تعداد محدودی از مراحل خاتمه پیدا کنند و زمان اجرای آن‌ها محدود باشد و پس از گذشت زمانی معقول خاتمه یابد.

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

انواع الگوریتم‌

الگوریتم‌ها دارای انواع مختلفی هستند اما اصلی‌ترین به‌شرح زیر است.

الگوریتم Brute Force

ساده‌ترین الگوریتم ممکن که برای حل یک مسئله می‌توان ابداع کرد را الگوریتم brute force می‌نامند. این الگوریتم برای حل یک مسئله بر قدرت محاسباتی محض تکیه کرده و هر امکانی را به جای تکنیک‌های پیشرفته برای بهبود کارایی امتحان می کند. این الگوریتم در مرحله اول،  یک راه‌حل برای مسئله ارائه کرده و در مراحل بعدی تلاش می‌کند در کوتاه‌ترین زمان ممکن، خود را به یک هدف نهایی مشخص و بهینه برساند. هر مسئله‌ای را می‌توان با رویکرد brute force حل کرد، اگرچه معمولاً پیچیدگی مکانی و زمانی آن قابل توجیه نیست.

الگوریتم حریصانه (Greedy)

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

در حالت کلی این روش سرعت و مرتبه زمانی بهتری نسبت به روش‌های مشابه خود دارد؛ اما متناسب با مسئله ممکن است به یک جواب بهینهٔ سراسری ختم نشود. این روش اغلب در حل مسائل بهینه‌سازی استفاده شده و در پاره‌ای مواقع جایگزین مناسبی برای روش‌هایی مانند برنامه‌ریزی پویا است.

برنامه های کاربردی :

  • مرتب سازی : مرتب سازی انتخابی، مرتب سازی توپولوژیکی
  • الگوریتم های پریم و کروسکال
  • مسئله تغییر سکه
  • مسئله کوله پشتی
  • الگوریتم زمانبندی کار

الگوریتم بازگشتی (Recursive)

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

الگوریتم عقبگرد (Backtracking)

الگوریتم عقبگرد یک الگوریتم حل مسئله است که از رویکرد ‌Brute Force برای یافتن خروجی مورد نظر استفاده می‌کند. اصطلاح عقبگرد نشان می‌دهد که اگر راه حل فعلی مناسب نیست، پس به عقب بروید و راه حل‌های دیگر را امتحان کنید. بنابراین در عین حال یک رویکرد بازگشتی نیز هست و برای حل مسائلی استفاده می‌شود که راه‌حل‌های متعددی دارند.

برنامه های کاربردی آن به شرح زیر است : 

  • تولید تمام رشته های باینری
  • مسئله وزیر (N-Queens)
  • مسئله کوله پشتی
  • مسئله رنگ آمیزی نقشه

الگوریتم عقب‌گرد برای پیدا کردن راه بهینه، درصورت نیاز به عقب حرکت می‌کند

الگوریتم تقسیم و غلبه (Divide and Conquer)

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

  • تقسیم کردن : مسئله را به چند زیرمسئله کوچک که دارای شباهت یکسانی هستند تقسیم کن.
  • غلبه : زیرمسئله‌ها اگر به اندازه کافی کوچک و غیرقابل تقسیم هستند را به صورت بازگشتی حل کن.
  • ترکیب: راه حل هر زیرمسئله را باهم ترکیب کن تا پاسخ مسئله اصلی پیدا شود.

این الگوریتم به طور گسترده در مسائل مختلف مورد استفاده قرار می‌گیرد زیرا برای بسیاری از آن‌ها کاملاً پایدار و بهینه است.

برنامه های کاربردی آن به شرح زیر است

  • جستجوی باینری
  • مرتب سازی ادغامی و سریع
  • پیدا کردن میانه
  • ضرب ماتریس

الگوریتم تقسیم و غلبه، مسائل را به زیرمسائل کوچک‌تر تقسیم می‌کند

الگوریتم پویا (Dynamic)

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

برنامه های کاربردی آن به شرح زیر است : 

  • یافتن طولانی ترین زیر رشته مشترک، طولانی ترین زیر رشته افزایشی، طولانی ترین زیر رشته مشترک و غیره.
  • الگوریتم بلمن-فورد (Bellman-Ford)
  • ضرب ماتریس زنجیره ای
  • جمع زیر مجموعه
  • مسئله کوله پشتی و بسیاری موارد دیگر.

شکل زیر انواع الگوریتم ها را نشان می‌دهد.

انواع مختلف از الگوریتم‌هارا در این شکل مشاهده می‌کنید

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

برای نوشتن یک الگوریتم راه های زیادی وجود دارد. الگوریتم‌ها می‌توانند دارای ساختار و کاربردهای متفاوتی باشند مثلاً یک الگوریتم می‌تواند خیلی ساده و یا پیچیده و پر از محاسبات ریاضی باشد و یا اینکه برای یک نمایش گرافیکی بکار رود. اما به طور کلی نکته مهم در نوشتن الگوریتم این است که الگوریتم کارآمد بوده و روش و منطق خوبی برای بررسی و حل مسئله ارائه دهد و در نظر گرفتن فرم الگوریتم اهمیت خاصی ندارد.

فرآیند توسعه الگوریتم (یک طرح) یک گام کلیدی در حل مسئله است و پنج مرحله اصلی دارد.

  1. تعریف مسئله

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

  1. تجزیه و تحلیل مسئله

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

الگوریتم نویس در هنگام تعیین نقطه شروع الگوریتم، با چنین سوالاتی روبروست:

  • چه داده هایی در دسترس است؟
  • چه قوانینی برای کار با داده ها وجود دارد؟
  • چه روابطی بین مقادیر داده وجود دارد؟

در هنگام تعیین نقطه پایان الگوریتم نیز باید ویژگی های راه حل را توصیف کند. یا به عبارت دیگر، الگوریتم نویس چگونه متوجه می‌شود که کارش تمام شده؟ پرسیدن سوالات زیر اغلب به تعیین نقطه پایان کمک می کند.

  • چه حقایق جدیدی خواهیم داشت؟
  • چه مواردی تغییر خواهد کرد؟
  • چه مشکلاتی دیگر وجود نخواهند داشت؟
  1. یک الگوریتم سطح بالا ایجاد کنید

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

  1. با افزودن جزئیات بیشتر، الگوریتم را اصلاح کنید

بعد از نوشتن الگوریتم سطح بالا نوبت به اضافه کردن جزئیات می‌رسد، اما چقدر جزئیات را باید اضافه کنیم؟ متأسفانه پاسخ به این سوال بستگی به شرایط دارد. ما باید در نظر بگیریم که چه کسی (یا چه چیزی) قرار است الگوریتم را پیاده‌سازی کند و آن شخص (یا چیز) به چه میزان در انجام کار مهارت دارد. مورد دیگر آنکه آن دسته از الگوریتم‌هایی که برای برنامه‌های کامپیوتری طراحی می‌شوند، باید قابلیت‌های کامپیوتر را نیز در نظر بگیرند و حتی جزئیات کافی را نیز ارائه کند.

  1. الگوریتم را مرور کنید

مرحله آخر بررسی الگوریتم است. باید گام به گام الگوریتم را بررسی کرده و مشخص کنیم که آیا این الگوریتم مشکل اصلی را حل می‌کند یا خیر. و هنگامی که مطمئن شدیم الگوریتم راه حل مسئله را ارائه می دهد، شروع به جستجوی جزئیات دیگری کنیم. سوالات زیر نمونه سوالاتی هستند که در زمان بررسی الگوریتم باید پرسیده شوند:

  • آیا این الگوریتم یک مسئله بسیار خاص را حل می‌کند یا برای مسائل کلی تر نیز کارآمد است؟
  • اگر برای مسئله خاصی طراحی شده، آیا باید آن را تعمیم داد؟
  • آیا می توان این الگوریتم را ساده کرد؟
  • آیا این راه حل مشابه راه حل مسئله دیگری است؟ در چه مواردی شبیه هم هستند؟ چه تفاوت‌هایی دارند؟

کاربرد الگوریتم

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

از سنین پایین با روشی گام به گام به ما آموزش داده می‌شود که چگونه کارهای روزمره‌مان را انجام دهیم مانند اینکه چگونه بشماریم، اشیاء را مرتب کنیم، راه برویم، بند کفش‌هایمان را ببندیم و در تمامی این کارها اساساً ما در حال یادگیری تفکر الگوریتمی هستیم. در ادامه چند کاربرد الگوریتم در زندگی روزمره را بیان خواهیم کرد.

مرتب کردن برگه‌ها

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

تشخیص چهره

هر روز و هرلحظه، زمانی‌که چهره یکی از عزیزان، همکار و یا حتی یک همسایه عجیب و غریب را می‌بینیم، از داده‌هایی استفاده می‌کنیم که قبلاً در مورد ویژگی‌های ظاهری آن شخص جمع آوری کرده‌ایم. سپس این اطلاعات در داخل مغز تجزیه و تحلیل می‌شود تا به طور خودکار دیگران را شناسایی کند و این نوعی از یک فرآیند پردازش تصویرپردازش تصویر دیجیتال چیست؟ چه انواعی دارد؟ چه مراحلی را شامل می‌شود؟ پردازش تصویر دیجیتال چیست؟ چه انواعی دارد؟ چه مراحلی را شامل می‌شود؟ پردازش تصویر یکی از فیلدهای پرطرفدار مرتبط با گرافیک کامپیوتر، بینایی کامپیوتر، هوش مصنوعی، یادگیری ماشین، و الگوریتم‌ها و محاسبات است که ارتباط تنگاتنگی میان تمام آنهاست. در نتیجه در این صفحه علاوه بر معرفی این فیلد، نقشه راهی نیز برای علاقه‌مندان این حوزه ارائه کرده‌ایم. طبیعی در چشم و مغز انسان‌هاست. الگوریتم ها می‌توانند این فرآیند را برای کامپیوترها خودکار کنند ‌اما با این حال، برنامه‌های تشخیص چهره گاهاً درست عمل نمی‌کنند و چهره‌های تیره پوست را به دقت تشخیص نمی‌دهند. این مشکل حاکی از آن است که هنوز الگوریتم‌‌های تشخیص چهره به اندازه کافی کامل نیستند و نیاز به پیشرفت دارند.

تشخیص چهره توسط الگوریتم‌هایی که توسط کامپیوترها ساخته می‌شوند، انجام می‌شوند

نتایج تکراری

دیوید چکوفسکی، معلم علوم و فناوری کامپیوتر در مدارس مرکزی هاید پارک، این مثال را توضیح می‌دهد. «اگر می‌خواهید یک وظیفه را به خوبی انجام دهید، نگاه کردن به نمونه‌های موفق قبلی افراد دیگر می‌تواند بسیار مفید باشد.» استفاده از دستورات پخت غذا در حین آشپزی نمونه خوبی برای درک این مطلب است. مطمئناً شما به تنهایی می‌توانید از عهده درست‌کردن یک پاستای خوشمزه به طریق آزمون و خطا بربیابید، اما پیروی از دستور العمل گام به گام یک سرآشپز معروف موفقیت شما را تضمین خواهد کرد.

چراغ راهنمایی و رانندگی

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

چراغ‌های راهنمایی و رانندگی نیز از یک الگوریتم خاص تبعیت می‌کنند

زمان بندی حرکت اتوبوس‌ها

هر روز صبح، هزاران اتوبوس از محله‌ها عبور می‌کنند و مسافران زیادی را سوار می‌کنند. برنامه‌ریزی و زمانبندی حرکت اتوبوس‌ها و تعیین مسیر آن‌ها و پیش‌بینی زمان دقیق رسیدن‌شان به ایستگاه‌ها، کاری است که بدون کمک الگوریتم ها امکان‌پذیر نخواهد بود. این مسئله مسیریابی به طور کلاسیک به عنوان "مسئله فروشنده دوره‌گرد" شناخته می‌شود و حتی به عنوان تمرینی برای علوم تئوری کامپیوتر در نظر گرفته شده است.

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

راننده اتوبوس هرروز یک برنامه خاص که شبیه به الگوریتم هست را اجرا می‌کند

کاربرد الگوریتم در اینترنت

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

موتور جستجو Google

حتی یک عمل به ظاهر ساده مانند جستجو در گوگل بدون کمک الگوریتم‌ها امکان‌پذیر نیست. الگوریتم‌های گوگل طوری طراحی شده‌اند که به تایپ کامل کلمات سوال شما نیازی ندارند و در کسری از ثانیه بدون آنکه جمله کاملی را از جانب شما دریافت کنند، نتایج مورد انتظارتان را نشان می‌دهند. مثلاً  اگر سوال مدنظر شما این باشد که  «آیا یک فیل شنا می‌کند؟» اما کلمات "فیل شنا" را جستجو کنید فوراً، خروجی یا نتایج، فیلم‌هایی از شنای فیل‌ها خواهد بود و حتی به دنبال آن موارد بیشتری را ارائه می‌دهد.

گوگل قدرتمندترین هوش مصنوعی در دنیا را دارا می‌باشد

مسیریابی در شبکه

لایه شبکه برای انتقال بسته‌ها از مبدأ به مقصد، باید بهترین مسیر ممکن برای انتقال داده‌ها را تعیین و هدایت کند. پس وظیفه اصلی لایه شبکه ارائه بهترین مسیر است که به این منظور از الگوریتم‌های مسیریابی بهره برده و به هدایت ترافیک اینترنت به طور موثر کمک می‌کند. در لایه شبکه بهترین مسیر، مسیری است که از مبدا تا مقصد دارای «مسیر کم هزینه» باشد.

بدون الگوریتم های مسیریابی، اینترنت معنایی ندارد والگوریتم مسیریابی یکی از فناوری‌های اصلی در قلب اینترنت است.

الگوریتم های مسیریابی مانند فازی، اکتشافی و تطبیقی از مشهورترین الگوریتم‌ ها هستند که هرکدام به ایجاد ارتباطات موثر در شبکه کمک می‌کنند.

رمزنگاری

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

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

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

کاربرد الگوریتم در ریاضی

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

امروزه الگوریتم‌های مشهور و پیشرفته زیادی وجود دارند که بر پایه محاسبات معادلات ریاضی پایه‌گذاری شده‌اند. الگوریتم دایجسترا یکی از معروف‌ترین الگوریتم‌های مسیریابی در جهان به حساب می‌آید که از قواعد و اصول ریاضی به منظور یافتن کوتاه‌ترین مسیر استفاده می‌کند. نقشه گوگل (Google Map) از این الگوریتم برای ارائه مسیری کوتاه و کم هزینه به کاربران خود بهره می‌گیرد.

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

مشاغل مرتبط با الگوریتم

مهم‌ترین بخش از هر شاخه‌ای، مشاغل موجود درآن است. خوشبختانه رشته الگوریتم از رشته‌های بسیار عالی محسوب می‌شود که بازارهای مرتبطی باآن یافت می‌شود که به شرح زیر هستند : 

  1. مهندس الگوریتم با درآمدی حدود 121.500 دلار
  2. توسعه دهنده نرم‌افزار با درآمدی حدود 227.400 الی 168.100 دلار در سال
  3. مهندس علوم داده با درآمدی حدود 899 دلار در سال
  4. مهندس داده و هوش مصنوعی با درآمدی حدود 112 دلار در سال
  5. مهندس بیوانفورماتیک با درآمدی حدود 104.575 دلار در سال
  6. مهندس ارشد طراحی IC با درآمدی حدود 106.821 دلار در سال
  7. مهندس شبکه با درآمدی حدود 90.149 دلار در سال
  8. مهندس پردازش تصویر و بینایی ماشین با درآمدی حدود 122.464 دلار در سال

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

در آخر شاید جالب باشد بدانید که کلمه الگوریتم از نام محمدبن موسی الخوارزمی ریاضیدان ایرانی قرن نهم (780- 850 هجری قمری) گرفته شده است که برگردان آن به زبان لاتین به واژه الگوریتم تغییر یافته است. محمد بن موسی خوارزمی ریاضیدان، منجم، جغرافیدان و دانشمند بیت الحکمه در بغداد بود که نامش به معنای «بومی خوارزم» است، منطقه‌ای که بخشی از ایران بزرگ بوده و اکنون در ازبکستان است.

ویدیوی زیر در خصوص تاریخچه الگوریتم است که می‌توانید آن را تماشا کنید و از آن لذت ببرید.

مثال‌های ساده الگوریتمی

1.Find the largest number among three numbers

Step 1: Start
Step 2: Declare variables a, b and c.
Step 3: Read variables a, b and c.
Step 4: If a > b
If a > c
Display a is the largest number.
Else
Display c is the largest number.
Else
If b > c
Display b is the largest number.
Else
Display c is the greatest number.
Step 5: Stop

2. Find Roots of a Quadratic Equation ax2 + bx + c = 0

Step 1: Start
Step 2: Declare variables a, b, c, D, x1, x2, rp and ip;
Step 3: Calculate discriminant
D ← b2-4ac

Step 4: If D ≥ 0
r1 ← (-b+√D)/2a
r2 ← (-b-√D)/2a
Display r1 and r2 as roots.
Else
Calculate real part and imaginary part
rp ← -b/2a
ip ← √(-D)/2a
Display rp+j(ip) and rp-j(ip) as roots
Step 5: Stop

3. Find the factorial of a number

Step 1: Start
Step 2: Declare variables n, factorial and i.
Step 3: Initialize variables
factorial ← 1
i ← 1
Step 4: Read value of n
Step 5: Repeat the steps until i = n
5.1: factorial ← factorial*i
5.2: i ← i+1
Step 6: Display factorial
Step 7: Stop

4. Check whether a number is prime or not

Step 1: Start
Step 2: Declare variables n, i, flag.
Step 3: Initialize variables
flag ← 1
i ← 2
Step 4: Read n from the user.
Step 5: Repeat the steps until i=(n/2)
5.1 If remainder of n÷i equals 0
flag ← 0
Go to step 6
5.2 i ← i+1
Step 6: If flag = 0
Display n is not prime
else
Display n is prime
Step 7: Stop

جمع بندی:‌

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

یادگیری کامل الگوریتم چقدر زمان می‌برد؟

بطور کلی الگوریتم بعنوان یکی از سخت‌ترین موضوعات برای یادگیری در علوم کامپیوتر در نظر گرفته می‌شود و یادگیری آن برای هر برنامه نویسی ضروری است. قصد نداریم شما را بترسانیم، اما باید بدانید که تسلط بر این موضوع به زمان و تلاش زیادی نیاز دارد. اما برای همه دانشجویان این سوال مطرح است که برای یادگیری کامل الگوریتم چقدر زمان باید صرف کنند؟ پاسخ سوال این است که اگر شما در طول روز، حدود 3 تا 4 ساعت را صرف یادگیری و درک مطالب الگوریتم کنید، معمولاً حدود 6 تا 8 هفته طول می‌کشد تا آن را به طور کامل یاد بگیرید. با این حال، هیچ جدول زمانی مشخصی برای مدت زمان یادگیری الگوریتم‌ وجود ندارد و همه چیز به اراده و سرعت شما در مطالعه و درک عمیق مطالب بستگی دارد.

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

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

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

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

منظور از تجریه و تحیل الگوریتم چیست؟

تحلیل الگوریتمی بخش مهمی از نظریه پیچیدگی محاسباتی است که در آن منابع مورد نیاز الگوریتم برای حل یک مسئله محاسباتی را تخمین میزنند و هرچقدر میزان مصرف منابع معقولانه و کمتر باشد، آن الگوریتم بهتر و کارآمدتر خواهد بود. هنگامی که صحبت از تحلیل الگوریتم‌ها در میان می‌آید، چهار موضوع اهمیت ویژه‌ای پیدا می‌کنند : زمان، حافظه، مصرف داده و مصرف انرژی

همچنین هر گونه سوالی در مورد کلاس‌های آنلاین کنکور کامپیوتر و یا تهیه فیلم‌ها و یا رزرو مشاوره تک جلسه‌ای تلفنی با استاد رضوی دارید می‌توانید به طرق زیر از تیم پشتیبانی بپرسید:

آی دی تلگرام تیم پشتیبانی:     konkurcomputer_admin@

شماره ثابت موسسه:   09378555200

امتیازدهی5 1 1 1 1 1 1 1 1 1 15.00 امتیاز (3 رای)
بارگذاری نظرات