Menu


الگوریتم چیست؟ (به همراه چند مثال ساده از کاربرد الگوریتم ها)


اهداف و انتظارات آموزشی متمم در این درس
کد درس: ۶۱۹۱۳
از دوستان عزیز متممی انتظار می‌رود پس از مطالعه درس الگوریتم
  • بتوانند مفهوم الگوریتم را توضیح دهند.
  • اگر قبلاً با الگوریتم های Sort (مرتب سازی) آشنا نبوده‌اند، کمی در خلوت خود برای فکر کردن به‌ آنها بر اساس سوال مطرح شده در درس وقت بگذارند.
  • بتوانند چند مورد از الگوریتم های رایج را نام ببرند.
فشار ذهنی هنگام مطالعه
نیاز به مشارکت شما
کسب و کار
زندگی
تعریف الگوریتم به همراه چند مثال از الگوریتمهای ساده ریاضی و برنامه نویسی

همه‌ی ما – حتی کسانی که تا کنون برنامه نویسی نکرده‌اند – می‌دانیم که کامپیوترها و سیستم‌های کامپیوتری برای انجام هر کاری نیاز به برنامه (Program) دارند.

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

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

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

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

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

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

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

مثال الگوریتم در زندگی روزمره

بسیاری از کارهای شخصی ما دارای الگوریتم مشخص و روتین از پیش تعیین شده هستند.

این نکته‌ای است که در درس نظم شخصی هم تحت عنوان روتین‌های شخصی به آن اشاره کردیم.

[ درس مرتبط: روتین شخصی چیست و چرا اهمیت دارد؟ ]

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

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

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

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

برای اینکه کمی پیچیدگی‌های طراحی الگوریتم را – حتی در همین مثال ساده – تجربه کنید، می‌توانید دو حالت زیر را به صورت جداگانه در نظر بگیرید:

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

پیشنهاد عضویت در متمم

دوست عزیز.

شما با عضویت رایگان به عنوان کاربر آزاد متمم (صرفاً با تعیین نام کاربری و کلمه‌ی عبور) می‌توانید به حدود نیمی از چند هزار درس متمم دسترسی داشته باشید.

همچنین در صورت تمایل، با پرداخت هزینه عضویت، به همه‌ی درس‌های متمم دسترسی خواهید داشت.

فهرست برخی از درس‌های مختص کاربران ویژه متمم را نیز می‌توانید در اینجا ببینید:

 فهرست درس‌های مختص کاربران ویژه متمم

البته از میان درس‌های مطرح شده، شاید بهتر باشد ابتدا مطالعه‌ و بررسی مباحث زیر را در اولویت قرار دهید:

  دوره MBA

  فنون مذاکره

  تصمیم گیری

  مدیریت بازاریابی

  سواد دیجیتال

روش نمایش الگوریتم ها

گاهی اوقات الگوریتم‌های ساده را می‌توان به صورت گام به گام با چند شماره گذاری شرح داد.

وقتی الگوریتم‌ها پیچیده‌تر می‌شود از فلوچارت (Flowchart) برای نمایش آن‌ها استفاده می‌شود. فلوچارت در زبان فارسی به روندنما ترجمه شده است.

نمونه یک فلوچارت یا روندنما برای نمایش الگوریتم

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

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

در اینجا چند خط برنامه جنریک (یا برنامه سمبلیک) را برای نمایش یک الگوریتم مشاهده می‌کنید:

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

چند مثال از الگوریتمهای رایج

معمولاً آموزش الگوریتم را با الگوریتم های مرتب کردن (اصطلاحاً: Sorting) آغاز می‌کنند.

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

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

در اینجا تنها از چند نمونه نام می‌بریم و در درس‌های دیگر بسته به نیاز، بحث مربوط به الگوریتم‌ها را بازتر خواهیم کرد:

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

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

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

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

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

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

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

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

  شما تاکنون در این بحث مشارکت نداشته‌اید.

برخی از دوستان متممی که به این درس علاقه مندند: رها فخردولتی , ابوالفضل فراهانی , مهدی آراسته , علی قلعه جوقی , مرضیه همتی

ترتیبی که گروه متمم برای خواندن مطالب سری سواد دیجیتال به شما پیشنهاد میکند:

سری مطالب حوزه سواد دیجیتال
 
برخی از سوالهای متداول درباره متمم
متمم چیست و چه می‌کند؟ (+ دانلود فایل PDF معرفی متمم)
چه درس‌هایی در متمم ارائه می‌شوند؟
هزینه ثبت‌نام در متمم چقدر است؟
آیا در متمم فایل‌های صوتی رایگان هم برای دانلود وجود دارد؟

قوانین کامنت گذاری/ چرا دیدگاه من منتشر نشده است؟

19 نکته برای الگوریتم چیست؟ (به همراه چند مثال ساده از کاربرد الگوریتم ها)

    پرطرفدارترین دیدگاه به انتخاب متممی‌ها در این بحث

    نویسنده‌ی دیدگاه : شهرزاد

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

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

    وقتی فلوچارت میکشیم، برای هر نوع دستور از یک شکل هندسی استفاده میکنیم. مثلاً برای شروع و پایان از بیضی، و از متوازی الاضلاع برای نمایش داده های ورودی و خروجی استفاده میکنیم.

    یکی از کتابهایی هم که در دانشگاه، خیلی در زمینه یادگیری الگوریتم و فلوچارت به ما کمک کرد، کتاب برنامه نویسی به زبان C و ++C دکتر جعفرنژاد قمی بود.

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

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

     
    دوست گرامی مشاهده تمرینهای مربوط به این درس، صرفا برای کاربران متمم امکانپذیر میباشد.
    .