الگوریتم در واقع به مجموعه قوانینی اطلاق میشود که در محاسبات یا سایر عملیات حل مسئله بایستی رعایت شود. به زبان ساده روشی که برای حل مسئله به صورت مرحله به مرحله از آن استفاده میگردد. در علوم ریاضی و کامپیوتر، الگوریتم، مجموعه ای است متناهی از دستورالعملها که طبق ترتیبی که نوشته شدهاند، اجرا و مسئله حل میشود.
در زمان استفاده از وسایل محیط پیرامون خود به صورت مکرر از الگوریتم استفاده میکنید. هنگام استفاده از ابزار های دیجیتالی و حتی طبخ یک غذا به صورت ناخودآگاه از یک الگوریتم پیروی میکنید. الگوریتم برنامه نویسی را میتوان به هر نوعی از زبان برنامه نویسی پیاده سازی کرد.
تاریخچه الگوریتم
الگوریتم برنامه نویسی برای اولین بار توسط دانشمند ایرانی، محمد بن موسی خوارزمی در دوران عباسیان به دنیا معرفی شد. خوارزمی، ملقب به پدر جبر، از واژه الگوریتم در سال ۸۲۵ در کتاب “الکتاب المختصر فی حساب الجبر و المقابله” نام برد. این کتاب به قوانین بازسازی و کاهش اشاره دارد. این کتاب در ریاضیات عرب و اروپا تاثیر چشمگیری داشت.
ویژگی های الگوریتم برنامه نویسی
برای ساخت یک برنامه خوب و قوی باید الگوریتم خوب و قوی نوشت. اما یک الگوریتم قوی چه ویژگیهایی باید داشته باشد؟ با بیکد همراه باشید تا این ویژگیها را بیان کنیم:
- یک الگوریتم خوب بایستی صریح واضح و بدون ابهام باشد؛ مراحل یک الگوریتم خوب در نهایت به یک معنا منتهی میشود.
- یک الگوریتم برنامه نویسی علاوه بر اینکه باید دارای یک نقطه شروع و یک نقطه پایان باشد، باید کاملا روشن سازد که چه خروجی به دست میآید.
- در صورتی که در یک الگوریتم نیاز به دریافت ورودی است باید این ورودی ها به خوبی تعریف شوند.
- همانطور که گفته شد یک الگوریتم باید به گونهای طراحی شود که مستقل از زبان برنامه نویسی باشد؛ به عبارتی دیگر دستورالعملها باید ساده باشند تا بتوان آن را با هر زبان دلخواه عملیاتی کرده و خروجی مورد انتظار را به ارمغان آورد.
- الگوریتم باید نقطه پایانی داشته باشد. یعنی پس از گذشت یک زمان مشخص به پایان برسد.
- از دیگر ویژگی های یک الگوریتم برنامه نویسی امکان پذیری آن است. الگوریتم باید ساده و کاربردی باشد تا قابلیت اجرایی داشته باشد
به صورت مختصر یک الگوریتم برنامه نویسی خوب، دارای حداقل یک خروجی، صفر یا بیشتر ورودی است. قطعی و هر مرحله از آن موثر و پس از یک زمان محدود به پایان میرسد.
الگوریتم برنامه نویسی با توجه به نوع مسئله
- الگوریتم جستجو
- الگوریتم برگشت به عقب یا عقبگرد
- الگوریتم مرتب سازی
- الگوریتم های بروت فرس
- الگوریتم هشینگ (درهم سازی)
- الگوریتم تقسیم و غلبه
- الگوریتم حریصانه
- الگوریتم دینامیک/پویا
الگوریتم جستجو
از مهمترین الگوریتم های برنامه نویسی، الگوریتم جستجو است. این نوع الگوریتم برای جستجوی عناصر یا گروهی از عناصر از نوع خاصی از داده ساختار مورد استفاده قرار میگیرد. این الگوریتم خود به دو دسته تقسیم میشود: الگوریتم جستجوی دودویی یا باینری، جستجوی عمق اول یا جستجوی سطح اول.
الگوریتم برگشت به عقب یا عقبگرد
در این الگوریتم از علامت و نشان های خاصی برای حل مسئله استفاده میکند. این علامت ها نشاندهنده قابل حل بودن یا نبودن مسئله است.
انواع الگوریتم عقب گرد
- الگوریتم عقبگرد بازگشتی
- الگوریتم عقبگرد غیر بازگشتی
کاربرد الگوریتم عقبگرد
- حل مسئله N وزیر یا n ملکه
- حل مسائل پیج و خم
- برای یافتن همه مسیر های همیلتونی موجود در نمودار
- در حل مشکلات مختلف کاربرد دارد. به عنوان مثال میتوانید از آن برای یافتن یک راه حل عملی برای یک مشکل تصمیم گیری بهره گرفت.
- در حل مسائل بهینه سازی بسیار مورد استفاده قرار گرفته است.
- همچنین برای یافتن راهحل های ممکن برای مسئله شمارش استفاده میگردد.
الگوریتم مرتب سازی
این الگوریتم گروهی از داده را بر حسب نیاز به روشی خاص مرتب سازی میکند. این ترتیب میتواند عددی یا الفبایی باشد.
مرتب سازی خود دارای ۵ نوع است:
- مرتب سازی هرمی
- مرتب سازی سریع
- مرتب سازی سطلی
- مرتب سازی شمارشی
- مرتب سازی ادغادمی
الگوریتم های بروت فرس
واژه بروت فرس به معنی نیروی بی رحم است این الگوریتم ساده ترین روش برای مسئله است. این الگوریتم همهی راه حل های ممکن را پیمایش میکند تا به پاسخ صحیح برسد. از کاربرد این الگوریتم میتوان به داده کاوی و همچنین در رمزگشایی اشاره کرد. نکته قابل توجه دیگر این است که این الگوریتم در مسائل کوچک استفاده میشود.
الگوریتم تقسیم و غلبه
الگوریتم تقسیم و غلبه یا تقسیم و حل در ابتدا به نوع مسئله دقت کرده و سپس برای راحتی در حل، آن را به قطعات کوچکتر تقسیم کرده و پاسخهای آن قطعات تعیین میشود.روش این الگوریتم برنامه نویسی در طراحی، به صورت بالا به پایین است (top_down) این الگوریتم بازگشتی بوده و به دلیل اینکه حتی مسئله های کوچک ممکن است چندین بار نیاز به حل داشته باشند، از نظر زمان و حافظهای که نیاز دارند، بهینه نیست. از سوی دیگر این باعث میشود تا کدنویسی آسانتری داشته باشد.
الگوریتم حریصانه
این نوع از الگوریتم در حل مسائل بهینه سازی مورد استفاده قرار میگیرد. این الگوریتم به صورت قسمت به قسمت ساخته میشود. در واقع راه حلی که بیشترین سود را داشته باشد، به عنوان راه حل برای قسمت بعدی برگزیده میشود. به دلیل این که روش الگوریتم حریصانه گرفتن بهترین تصمیم در هر مرحله است، در موارد زیادی به راه حل بهینه نخواهد رسید. الگوریتم حریصانه در زمان بهینه اجرا میشود.
الگوریتم دینامیک/پویا
الگوریتم دینامیک و پویا به منظور محاسبه مسائل پیشرفته که در آینده اتفاق میافتد، استفاده میشود. به بیانی ساده این روش برای حل مسائلی استفاده میشود که در آنها زیر مسئله ها به یکدیگر وابسته هستند. نمونه ای از این الگوریتم، دنباله فیبوناچی را میتوان نام برد.
الگوریتم هشینگ یا درهم سازی
این الگوریتم برنامه نویسی مشابه الگوریتم جستجو عمل میکند. با این تفاوت که این الگوریتم یک فهرست با شناسه کلیدی دارد. در واقع به هنگام درهم سازی ، یک کلید به داده های خاصی اختصاص داده میشود. از این الگوریتم به عنوان پرکاربرد ترین روش جهت دسترسی به دادههای مناسب به همراه کلید یاد میشود.
ساختار الگوریتم برنامه نویسی بر حسب منطق
الگوریتم حلقه ای (Loop)
همانگونه که از نام الگوریتم حلقه ای یا تکراری پیداست، این الگوریتم از تعداد تکرار مشخصی در پروژه برای حل مسئله استفاده میکند و در پایان با به اتمام رسیدن مراحل پروژه، کار آن نیز پایان مییابد.
الگوریتم شاخه ای (Branching)
این روش از قانون شرطی اگر_ آنگاه پیروی میکند. به عبارتی دیگر پاسخ مسئله با توجه به شرطی که ما مشخص کردهایم، محاسبه میشود. همچون زوج بودن یا فرد بودن اعداد.
الگوریتم دنباله ای (Sequence)
این الگوریتم از قانونی گام به گام طبق ترتیب، برای رسیدن به نتیجه مطلوب پیروی میکند.
چگونگی نمایش الگوریتم
زمانی که یک الگوریتم طراحی میگردد، در آن برخی کارها به صورت مداوم در حال تکرارند؛ به عبارتی حلقه های تکرار را داریم یا به صورت کلی زمانی که الگوریتم پیچیدهتر شود، از فلوچارت برای نمایش آنها استفاده میکنند.
سخن پایانی
اکنون با افزایش قدرت مناسباتی، الگوریتمها در سطح پیچیدگی خود رشد کردهاند. نسل حاضر در حال حرکت به سمت هوش مصنوعی و محاسبات کوانتومی است. الگوریتم ها در هر مرحله از نوآوری های تکنولوژیک در حال تکامل بوده و در عین حال اساس عملیات را از زمانهای قدیم ثابت نگه میدارند. این روزها الگوریتمها همهجا حضور دارند. نظرات خود را با ما به اشتراک بگذارید.
الگوریتم برنامه نویسی چیست؟
همه ما به هنگام آشپزی یا پخت یک کیک خانگی از یک دستورالعمل مرحله به مرحله استفاده میکنیم. الگوریتم در برنامه نویسی نیز را به مانند همین مثال دانست.
ویزگی های یک الگوریتم برنامه نویسی چیست؟
یک الگوریتم در برنامه نویسی باید متناهی، قابل اجرا و دارای ورودی و خروجی متناسب با نیاز کاربر باشد.
دیدگاه ها
0 دیدگاه