الگوریتم چیست و چگونه نوشته میشود؟ (همراه با مثال)
- الگوریتم چیست؟
- ویژگیهای الگوریتم
- مزایا و معایب الگوریتم
- آموزش طراحی الگوریتم برنامه نویسی
- تحلیل پیشین و پسین الگوریتم
از کلمه الگوریتم یا خوارزمی میتوان برای هر مجموعه دستورالعملی استفاده کرد. اساس اجرای بسیاری از برنامههای کامپیوتری، الگوریتم است. اگر میخواهید به خوبی از پس مسائل مختلف برنامهنویسی برآیید باید مفهوم الگوریتم را به خوبی درک کنید تا بتوانید طرحهای خود را در قالب الگوریتم پیادهسازی کنید. در این مطلب برایتان با زبانی ساده توضیح میدهیم الگوریتم یا خوارزمی چیست و همچنین به آموزش طراحی الگوریتم برنامه نویسی میپردازیم.
کلمهی الگوریتم به معنای فرایند یا مجموعهای از قوانین است که باید از آنها در محاسبه یا عملیات حل مسئله پیروی شود.
بنابراین الگوریتم به مجموعهای از قوانین یا دستورالعملها اشاره دارد که نحوهی انجام یک کار را برای دستیابی به نتایج موردنظر، به صورت گامبهگام تعریف کند.
در ادامه دقیقتر توضیح میدهیم الگوریتم چیست و به آموزش الگوریتم برنامه نویسی نیز میپردازیم. معنای الگوریتم با تشبیه آن به پختن یک دستور غذای جدید، بیشتر قابل فهم است. برای پخت دستور غذایی که تا به حال آن را نپختهاید، دستورالعملها و مراحل را میخوانید و آنها را بهترتیب اجرا میکنید. نتیجهی به دست آمده غذایی جدید است که بهخوبی پخته شده. الگوریتمها نیز بهطور مشابه در برنامهنویسی برای دریافت نتیجهی مورد انتظار مفید واقع میشوند.
یک الگوریتم طراحی شده مستقل از زبان است، به بیان دیگر الگوریتمها دستورالعملهای سادهای هستند که میتوانند در هر زبانی پیادهسازی شوند و خروجی نیز همانطور که انتظارش را دارید یکسان خواهد بود. حال که دانستید الگوریتم چیست و چه معنایی دارد، در ادامه با ویژگیهای آن نیز آشنا میشوید.
ویژگیهای الگوریتم
همانطور که برای پختن یک غذا فقط از دستور غذای استانداردش استفاده میکنید، در برنامهنویسی نیز همهی دستورالعملها الگوریتم نیستند. پیش از اینکه به آموزش طراحی الگوریتم برنامه نویسی بپردازیم، بهتر است ویژگیهای آن را بررسی کنیم. برای اینکه یک دستورالعمل، الگوریتم نام بگیرد، باید دارای ویژگیهای زیر باشد:
- واضح و بدون ابهام: باید واضح و بدون ابهام باشد. همهی مراحل باید از همهی جهات مشخص و قابل فهم باشند و فقط یک معنی را بدهند؛
- ورودیهای مشخص: اگر الگوریتمی ورودیهایی را نیز دریافت میکند، ورودیها باید به شکلی مشخص و واضح تعریف شوند؛
- خروجیهای مشخص: باید خروجی به دست آمده را به وضوح مشخص، و آن را به خوبی تعریف کند؛
- محدود بودن: باید پایانپذیر باشد، یعنی نباید به حلقههای بیپایان یا موارد مشابه ختم شود؛
- امکانپذیری: باید ساده، عمومی و کاربردی باشد، به طوری که با منابع موجود اجرا شود. همچنین نباید حاوی تکنولوژی آینده یا هر چیز دیگری باشد؛
- مستقل از زبان: باید مستقل از زبان و دارای دستورالعملهایی باشد که بتوان آن را در هر زبان برنامهنویسیای پیادهسازی کرد و در عین حال خروجی یکسانی هم داشتهباشد.
مزایا و معایب الگوریتم
مزایا:
- درک آن آسان است؛
- نمایش گامبهگامی از حل یک مسئله است؛
- در الگوریتمها، مسائل به بخشها یا مراحل کوچکتری تقسیم میشوند، بنابراین تبدیل آن به برنامه برای برنامهنویس آسانتر میشود.
معایب:
- طراحی آن زمان زیادی میبرد، بنابراین وقتگیر است؛
- نمایش حالتهای شاخهبندی و حلقهزنی در الگوریتمها کار طاقتفرسایی است.
آموزش طراحی الگوریتم برنامه نویسی
در این بخش آموزش طراحی الگوریتم برنامه نویسی را قرار دادهایم. برای طراحی آن باید موارد زیر را به عنوان پیشنیاز در اختیار داشتهباشید:
- مشکلی که قرار است با این الگوریتم حل شود؛
- محدودیتهایی که باید در حل مسئله در نظر گرفتهشوند؛
- ورودی برای بهکارگیری در حل مشکل وجود داشته باشد؛
- خروجی مورد انتظار برای حل مشکل داشته باشد؛
- راه حل مشکل، مطابق محدودیتهای داده شده باشد.
حالا الگوریتم با کمک پارامترهای بالا نوشته میشود تا مسئله را حل کند.
مثال: ۳ عدد را وارد کنید و حاصل جمع را دریافت کنید.
مرحلهی ۱: تأمین پیشنیازها
همانطور که پیش از این گفتیم، برای طراحی ابتدا باید پیشنیازهای آن را تأمین کنید.
- مشکلی که قرار است با این الگوریتم حل شود: ۳ عدد را وارد کنید و حاصل جمع را دریافت کنید؛
- محدودیتهایی که باید در حل مسئله در نظر گرفتهشوند: فقط باید از اعداد استفاده شود و نه کاراکترهای دیگر؛
- ورودی برای بهکارگیری در حل مشکل: ۳ عددی که باید وارد شوند؛
- خروجی مورد انتظار برای حل مشکل: مجموع ۳ عددی که به عنوان ورودی در نظر گرفته میشوند؛
- راه حل مشکل مطابق محدودیتهای داده شده: راه حل شامل جمع ۳ عدد است. برای انجام این کار میتوان از عملگر «+» یا عملگرهای بیتی یا هر روش دیگری استفاده کرد.
مرحلهی ۲: طراحی
حالا بیایید الگوریتم را با بهکارگیری پیشنیازهای بالا طراحی کنیم:
- شروع؛
- ۳ متغیر برای عدد صحیح به نامهای num1، num2 و num3 مشخص کنید؛
- ۳ عددی که باید جمع شوند را به عنوان ورودیهایی برای متغیرهای num1، num2 و num3 در نظر بگیرید؛
- متغیری را به نام sum مشخص کنید تا حاصل جمع ۳ عدد را به عنوان مقدار به آن اضافه کنید؛
- ۳ عدد را جمع کنید و نتیجه را در sum ذخیره کنید؛
- مقدار متغیر sum را چاپ کنید؛
- پایان.
مرحلهی ۳: آزمایش الگوریتم با پیادهسازی آن
بیایید برای آزمایش، آن را با زبان برنامهنویسی C++ ،C و Phyton 3 پیادهسازی کنیم.
برنامه به زبان C:
برنامه به زبان C++:
برنامه به زبان Phyton 3:
خروجی:
تحلیل پیشین و پسین الگوریتم
قبل و بعد از اجرای یک الگوریتم، باید آن را تحلیل و بررسی کنید. در ادامه در مورد تحلیل پیشین و پسین الگوریتمها و همچنین پیچیدگی فضایی و زمانی آنها توضیح خواهیم داد.
۱. تحلیل پیشین (Priori Analysis): تحلیل پیشین به معنای بررسی الگوریتم قبل از اجرای آن است. در تحلیل پیشین، الگوریتم در مرحلهی تئوری ارزیابی میشود. میزان کارایی آن با این فرض اندازهگیری میشود که همهی عوامل جانبی مانند سرعت پردازنده، ثابت هستند و تأثیری در اجرای آن ندارند. این کار معمولا توسط طراح آن انجام میشود. همچنین در این روش میزان پیچیدگی آن نیز مورد نظر قرار میگیرد.
۲. تحلیل پسین (Posterior Analysis): تحلیل پسین به معنای ارزیابی الگوریتم پس از اجرای آن است. در این روش الگوریتم با زبانهای محتلف برنامهنویسی پیادهسازی، و اجرای آن بررسی میشود. این تحلیل برای نوشتن گزارش تحلیل واقعی و کامل از نظر درستی، حافظهی مورد نیاز، زمان مصرف شده و مواردی از این قبیل مفید است.
- عامل زمانی (Time Factor): زمان را با شمارش تعداد عملیات کلیدی در آن، مانند عملیات مقایسه در الگوریتم ترتیببندی، اندازهگیری میگیرند؛
- عامل فضایی (Space Factor): اندازهگیری فضا با شمارش حداکثر فضای مورد نیاز الگوریتم امکانپذیر است.
پیچیدگی فضایی و زمانی
۱. پیچیدگی فضایی (Space Complexity): پیچیدگی فضایی به مقدار حافظهای وابسته است که الگوریتم برای اجرا و ارائهی نتیجه به آن نیاز دارد. این فضا توسط ورودیها، عملیات فرعی و خروجیها مورد استفاده قرار میگیرند.
روش محاسبه پیچیدگی فضایی الگوریتم چیست؟ پیچیدگی فضایی یک الگوریتم را با بررسی دو بخش زیر محاسبه میکنند:
- بخش ثابت (Fixed Part): به فضایی اشاره دارد که به طور قطع مورد نیاز الگ است. برای مثال متغیرهای ورودی، متغیرهای خروجی، اندازهی برنامه و غیره؛
- بخش متغیر (Variable Part): به فضایی اشاره دارد که میتواند بسته به شکل پیادهسازی الگوریتم، متغیر باشد. برای مثال متغیرهای موقت، تخصیص حافظهی پویا، فضای ذخیره شدهی بازگشتی و غیره.
۲. پیچیدگی زمانی (Time Complexity): پیچیدگی زمانی به مدت زمانی اشاره میکند که یک الگوریتم برای اجرا و دستیابی به نتیجه به آن نیاز دارد. این زمان توسط عملیات عادی، دستورات شرطی، حلقهها و غیره مصرف میشود.
روش محاسبه پیچیدگی زمانی الگوریتم چیست؟ پیچیدگی زمانی یک الگوریتم را با بررسی دو بخش زیر محاسبه میکنند:
- بخش زمانی ثابت (Fixed Part): دستوراتی که تنها یک بار اجرا میشوند، در این دسته قرار میگیرند. برای مثال ورودی، خروجی، if-else، switch و غیره؛
- بخش زمانی متغیر (Variable Part): دستوراتی که بیشتر از یک بار اجرا میشوند، برای مثال n بار، در این بخش میآیند. برای مثال حلقهها، بازگشتها و غیره.
خلاصه
الگوریتمها مجموعهای از دستورالعملها هستند و به ما در حل مسائل و یا رسیدن به هدف خاصی کمک میکنند. اما در برنامهنویسی الگوریتم نحوهی انجام کار یا برنامهای را توصیف میکند و کامپیوتر برنامه را به کمک این روش اجرا میکند. در این مطلب بهطور کامل توضیح دادیم الگوریتم چیست و آموزش گامبهگام طراحی الگوریتم برنامه نویسی را قرار دادیم. اگر سؤال و یا نظری در این زمینه دارید، با ما به اشتراک بگذارید.
منبع: geeksforgeeks.org
دیدگاه