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

تاریخ بروزرسانی : چهارشنبه 26 شهریور 1399

تعداد بازدید : 101

زمان خواندن مقاله : 15 دقیقه

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

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

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

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

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

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

ساختار منطقه ای الگوریتم ها:

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

مشخص کردن 3 عامل اصلی در نوشتن یک الگوریتم:

برای نوشتن یک الگوریتم 3 عامل را باید در مسئله مشخص کنیم :
  1. اطلاعاتی که در اختیار ما قرار دارد و باید به کمک آن به حل مسئله بپردازیم یعنی داده های معلوم مسئله.
  2. نتیجه ای که بر اثر انجام محاسبات روی داده به دست می آوریم یعنی خواسته های مسئله.
  3. مجموعه دستورات و روابطی که برای رسیدن به خواسته مسئله روی داده ها و مقادیر مجهول انجام می دهیم یعنی عملیات محاسباتی.

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

بعد از اینکه 3 عامل را مشخص کردیم حالا باید بدانیم برای نوشتن یک الگوریتم چه شرایطی لازم است؟
  • داشتن نقطه شروع و پایان مشخص
  • داشتن ورودی(یا هیچ ورودی یا چند ورودی)
  • داشتن خروجی(یک یا چند خروجی)
  • داشتن کارایی و قطعیت(با زبانی دقیق و بی ابهام بیان شود یعنی قابل اجرا باشد)
  • داشتن محدودیت(در یک بازه زمانی کوتاه و معقول پس از طی مراحل محدود پایان یابد)

چرخه عمر یک الگوریتم برنامه نویسی چیست:

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

مهم ترین انواع الگوریتم ها از نظر نوس مسئله کدام است؟

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

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

الگوریتم های تقسیم و غلبه:

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


الگوریتم های برنامه ریزی پویا:


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


الگوریتم های حریصانه:


این روش برای بهینه سازی یا حل مسئله به کار می رود یعنی هر دفعه با استفاده از یک معیار حریصانه بین مجموع ورودی، بهترین را انتخاب می کند که به آن تابع selection cheekمی  گویند . سپس انتخاب می کنیم که آیا انتخاب جاری امکان پذیر است یا خیر که این عمل توسط feasibility cheek صورت می گیرد.
در نهایت باید بررسی کنیم آیا اضافه کردن انتخاب جاری منجر به حل مسئله می شود یا خیر در صورت نیاز کارها ادامه می یابد.
تابع حل شدن تا زمانی که یا به جواب رسیده باشیم و یا انتخابی برای بررسی نباشد انجام می شود.
که یکی از مثال های معروف در این الگوریتم مسئله پول خرد است که هدف یافتن کم ترین پول خرد ممکن جهت بازگرداندن مبلغ است.


الگوریتم «عقب گرد»:


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


الگوریتم های بروت فروس:


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

پرکاربرد ترین الگوریتم های مورد استفاده:


جست و جوی دودویی:


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


مرتب سازی ادغامی:


در مرتب سازی ادغامی لیست را به 2 قسمت تقسیم می کنیم .سپس هر دو قسمت را به صورت بازگشتی مرتب نموده و نتایج آن 2 را باهم ادغام می کنیم.
توجه کنید که این عمل را تا زمانی که لیست ها به طول 1 ایجاد شود انجام می دهیم.


مرتب سازی سریع:


این الگوریتم نیز در طبقه بندی الگوریتم تقسیم و غلبه قرار دارد. در مرتب سازی سریع ابتدا یک عنصر برای مقایسه به نام عنصر افراز در نظر می گیریم و باتوجه به این عنصر لیست را به 2 قسمت تقسیم می کنیم:
عناصر کوچکتر از عنصر افراز
عناصر بزرگتر از عنصر افراز
سپس هر کدام از 2 لیست را به صورت بازگشتی مرتب می کنیم.


کروسکال:


این الگوریتم یکی از الگوریتم های حریصانه است که برای به دست آوردن درخت پوشای کمینه استفاده می شود این الگوریتم برای شروع با مجموعه تهی E’، کار را شروع می کند سپس در هر یال با کوچکترین وزن از مجموعه 
E-E’ انتخاب می شود و در صورتی که افزودن آن به مجموعه  E’ باعث به وجود آمدن هیچ دوری نشود، آن یال به E’ اضافه می شود و در غیر این صورت، آن یال از E حذف می شود و یال مورد نظر به E’ اضافه نمیشود و در نهایت این کار تاجایی ادامه می یابد که رابطه |E’|=n-1 برقرار شود.

 

کلام آخر:

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


اشتراک گذاری


توضیحاتی در مورد نویسنده این مقاله :
مرضیه فتاحی مرضیه فتاحی

کارشناس کامپیوتر گرایش نرم افزار..... نویسندگی،تجربه ای انفرادی است یعنی به اشتراک گذاری.... این بخشی از ذات انسان است که بخواهد مسائل را به اشتراک بگذارد ازجمله:افکار،ایده ها،عقاید


نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد .
برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

گروه مقالات


آموزشی
51
علمی
29
تحقیقاتی
47
به مقاله امتیاز دهید.
لطفا برای امتیازدهی وارد شوید.
: میانگین امتیاز دوره


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