در پاسخ به سوال الگوریتم چیست؟ میتوان گفت که الگوریتمها، دستورالعملی برای حل مسائل هستند و در هر کاری که انجام میدهیم، ممکن است با آن روبهرو شویم. این اصطلاح را در حوزه کامپیوتر و برنامهنویسی زیاد به گوش میخورد! در بسیاری از پروژههای بزرگ برنامهنویسی، ابتدا کارکرد و اهداف پروژه را به کمک الگوریتمها و بعد چارت طراحی کرده سپس به سراغ برنامهنویسی آن میروند.
بنابر همین علت امروز قصد داریم در این مقاله بررسی کنیم مفهوم الگوریتم چیست و در افزایش مهارتهای برنامهنویسی چه تأثیری دارد. همراه ادمینسایت باشید.
الگوریتم چیست؟
یک الگوریتم به عنوان یک دستورالعمل است که مراحل دقیقی برای رایانه، بهعنوان حل یک مشکل یا رسیدن به یک هدف را توصیف میکند. همه ما دستورالعملهای غذایی را دیدهایم. آنها مواد لازم و مجموعهای از مراحل تهیه غذا را ذکر میکنند. یک الگوریتم نیز دقیقاً شبیه به آن است.
در زبان برنامهنویسی، الگوریتم یک دستورالعمل است و به مواد تشکیلدهنده آن ورودی گفته میشود . رایانه رویه شما را بررسی میکند. آن را مطابق خواسته دنبال میکند و در انتها میتوانید نتایج را که به آنها خروجی گفته میشود را مشاهده کنید. در واقع یک الگوریتم نحوه انجام کاری را توصیف میکند و رایانه شما هر بار دقیقاً این روش را انجام می دهد.
یک الگوریتم شامل تعدادی از دستورات زیر است:
دستورات ورودی
دستورات خروجی
دستورات محاسباتی
دستورات شرطی
دستورات تکرار
برای درک بیشتر این موضوع، در مثال زیر که در مورد درخواست آدرس ایمیل از کاربر است، توجه کنید:
مرحله 1: شروع مراحل
در مرحله 2: مکانی را برای ذخیره آنچه کاربر در آن تایپ میکند، ایجاد میکنیم.
در مرحله 3: متغیر قبلی را پاک کرده و متغیر جدید را جایگزین میکنیم
در مرحله 4: از کاربر میخواهیم آدرس ایمیل خود را وارد کند.
در مرحله 5: سپس آن را در متغیر معلوم ذخیره میکنیم.
در مرحله 6: سپس از ماشین میخواهیم که تشخیص دهد آیا این متغیر آدرس ایمیل هست یا خیر؟
الگوریتمها چگونه کار می کنند؟
الگوریتمهای رایانه از طریق دادههای ورودی و خروجی کار میکنند. آنها دادههای ورودی را میگیرند و هر مرحله از الگوریتم را برای تولید یک داده خروجی اعمال میکنند.
به عنوان مثال، موتورهای جستجو، الگوریتمهایی هستند که عبارت جستجوشده را به عنوان ورودی میگیرند و در پایگاه داده خود موارد مربوط به کلمات موجود در عبارت را جستجو میکنند. سپس نتایج را به عنوان خروجی به شما میدهند.
کیفیت یک الگوریتم خوب باید به گونه زیر باشد:
ورودی و خروجی باید دقیقاً تعریف شود.
هر مرحله در الگوریتم باید واضح و روشن باشد.
الگوریتم ها باید از بین روشهای مختلف برای حل یک مسئله موثر باشند.
الگوریتم نباید شامل یک کد و زبان رایانهای باشد. در عوض، الگوریتم باید به گونهای نوشته شود که بتواند در زبانهای مختلف برنامهنویسی مورد استفاده قرار گیرد.
انواع الگوریتم از نظر ساختاری
حال که متوجه شدید الگوریتم چیست و چگونه کار میکند، انواع آن را بررسی خواهیم کرد. الگوریتمها نقش مهمی در برنامهنویسی و حل مسئله دارند. از لحاظ کارایی و با توجه به نوع مسئله انواع مختلفی الگوریتم وجود دارد که در این بخش به آنها میپردازیم.
۱- الگوریتم بازگشتی (Recursive)
الگوریتمهای بازگشتی حالت پایه مسئله را حل کرده و سپس با استفاده از این جواب، به حل مسائل تودرتو میپردازند. درواقع مسئله به چند بخش کوچک شکسته میشود که با استفاده از پاسخ مرحله قبل، مسئله بعدی قابلحل است. یکی از معروفترین مسائل بازگشتی، تابع فاکتوریل (factorial) میباشد.
۲- الگوریتم دینامیک (Dynamic)
از الگوریتمهای پویا یا دینامیک میتوان برای محاسبه بخشی از برنامه و استفاده از پاسخ آن برای حل مسائل دیگر نیز بهره برد. دنباله فیبوناچی از الگوریتمهای دینامیک محسوب میشود.
۳- الگوریتم برگشت به عقب (Backtracking)
الگوریتم برگشت به عقب، به دنبال پیدا کردن دادههای کلیدی است تا بهینهترین جواب را پیدا کند. این شیوه برای حل مسائل درخت، فضای آن مسئله را ایجاد کرده و تعیین میکند کدام گره امیدبخش است. الگوریتمهای عقبگرد از علامتهایی برای بیان اینکه یک راهحل کاندید به حل مسئله نمیانجامد استفاده میکنند.
مثلاً در ساخت درخت فضای حالت یک سؤال، اگر شاخهای از درخت جواب بهینهای در پی نداشته باشد، علامتگذاری میشود تا در عمق زیاد بررسی نشود و به جای آن، شاخه امیدبخشتر بررسی میشود. البته شاخه اول بهطورکلی هرس نمیشود بلکه موقتاً کنار گذاشته میشود تا در صورت پیدا نکردن بهینهترین جواب در شاخه دیگر، مجدداً به آن بازگردیم.
۴- الگوریتم تقسیم و حل (Divide and conquer )
الگوریتمهای تقسیم و حل، ابتدا مسئله را با توجه به نوع آن، چند بخش کوچکتر تقسیم کرده و به حل آنها میپردازند. سپس از ترکیب پاسخ بخشهای کوچکتر، پاسخ کلی مسئله بهدست میآید.
۵- الگوریتم حریصانه (Greedy)
الگوریتمهای حریصانه به دنبال جستجوی بهینهترین پاسخ ممکن هستند اما لزوماً در هر مسئلهای، نمیتوانند بهینهترین پاسخ را پیدا کنند. اما یکی از جوابهای بهینه را به شما معرفی خواهند کرد. البته برخی مسائل هم بهطورکلی پاسخ بهینه ندارند که به آنها مسائل NP complete میگویند.
تا اینجای مقاله متوجه شدید که الگوریتم چیست و انواع آن را از نظر ساختاری بررسی کردیم. حال نمونههای معروف و رایجی که به عنوان الگوریتم میتوان مثال زد، در ادامه آمده است:
۱- الگوریتم اضافه کردن دو عدد وارد شده توسط کاربر:
مرحله 1: شروع کنید مرحله 2: متغیرهای num1 ، num2 و sum را اعلام کنید. مرحله 3: مقادیر num1 و num2 را بخوانید. مرحله 4: num1 و num2 را اضافه کنید و نتیجه را به sum اختصاص دهید. جمع ← num1 + num2 مرحله 5: نمایش جمع مرحله ششم: متوقف شوید
۲- بزرگترین عدد را از بین سه عدد مختلف پیدا کنید:
مرحله 1: شروع کنید مرحله 2: متغیرهای a ، b و c را اعلام کنید. مرحله 3: متغیرهای a ، b و c را بخوانید. مرحله 4: اگر a> b اگر a> c نمایش a بزرگترین عدد است. اگر نه نمایش c بزرگترین عدد است. اگر نه اگر b> c باشد نمایش b بزرگترین عدد است. اگر نه نمایش c بزرگترین عدد است. مرحله 5: متوقف شوید
۳- ریشه های معادله درجه دوم:
مرحله 1: شروع کنید مرحله 2: متغیرهای a ، b ، c ، D ، x1 ، x2 ، rp و ip را اعلام کنید. مرحله 3: محاسبه کننده را محاسبه کنید D ← b2-4ac مرحله 4: اگر D ≥ 0 باشد r1 ← (-b + √D) / 2a r2 ← (-b-√D) / 2a r1 و r2 را به عنوان ریشه نشان دهید اگر نه قسمت واقعی و قسمت نامشخص را محاسبه کنید rp ← -b / 2a ip ← √ (-D) / 2a (rp+j(ip و (rp-j(ip را به عنوان ریشه نمایش دهید مرحله 5: متوقف شوید
۴- فاکتوریل تعداد وارد شده توسط کاربر:
مرحله 1: شروع کنید مرحله 2: متغیرهای n ، فاکتوریل و i را اعلام کنید. مرحله 3: شروع متغیرها 1 ← فاکتوریل 1 ← i مرحله 4: مقدار n را بخوانید مرحله 5: مراحل را تکرار کنید تا i = n فاکتوریل ← فاکتوریل * i یک + i ← i مرحله ششم: نمایش فاکتوریل مرحله 7: متوقف شوید
۵- سری فیبوناچی را تا سقف 1000 پیدا کنید:
مرحله 1 : شروع کنید مرحله 2 : متغیرها را first_term ، second_term و temp اعلام کنید. مرحله 3 : ابتدا متغیرها را قرار دهید: 0 ← first_term 1 ← second_term مرحله 4 : first_term و second_term را نمایش دهید. مرحله 5 : مراحل را تکرار کنید تا second_term ≤ 1000 شود. temp ← second_term second_term ← second_term + first_term first_term ← temp Display second_term مرحله 6 : متوقف شوید
دیدگاهتان را بنویسید
You must be logged in to post a comment.