تاریخچه ای از طراحی الگوریتم
از نظر واژهشناسی کلمه الگوریتم از الگوریزم (algorism) به دست آمده که خود از نام ریاضیدان شایسته ایرانی ابوجفعر محمدبن موسی الخوارزمی و به پاس خدمات او به توسعه دانش بشری اقتباس شده است. کلمه «الجبرا» در انگلیسی نیز از روی کتاب مشهور او به نام الجبر و مقابله گرفته شده است. ابوجعفر محمد بن موسی خوارزمی از دانشمندان شهیر ایران است که در نیمه دوم قرن دوم و اوایل قرن سوم هجری شمسی میزیسته و در علوم ریاضی و هیأت سرآمد دانشمندان دوران خود بوده است.
او بنیانگذار علم جبر در دنیا میباشد. اگر چه قبل از خوارزمی دانشمندان یونانی در زمینه جبر کارهای ابتدایی انجام داده بودند، لیکن اهمیت کارهای آنها در مقابل پژوهشهای خوارزمی ناچیز ارزیابی شده است. کلمه الگوریتم به افتخار خوارزمی و اهمیت کارهای او، به ویژه در تدوین روشهای سازمانیافته حل پارهای از مسائل عددی انتخاب گردیده است.
امروزه واژه الگوریتم در علوم و مهندسی کامپیوتر معادل روش حل مسأله است. الگوریتم با این دید طراحی میگردد که بعد از تبدیل آن به یک زبان برنامه نویسی (مثلا پایتون یا جاوا یا سی) به کامپیوتر داده شود که کامپیوتر آن را اجرا کند. الگوریتم را میتوان به زبان طبیعی (مثلا نوشتن مراحل الگوریتم به فارسی)، زبانی مشابه زبانهای کامپیوتری (شبه کد یا همان pseudocode) و حتی به صورت نمودارهای خاصی بیان نمود. بنابراین الگوریتم در این مرحله مستقیماً به وسیله کامپیوتر قابل تفسیر و اجرا نیست، اما پس از تبدیل آن به یک زبان برنامه نویسی برای اجرا به کامپیوتر داده میشود. بنابراین توجه کنید که اجرا کننده الگوریتم کامپیوتر است.
عوامل متعددی بر سرعت اجرای الگوریتم تأثیر دارد، که میتوان از سرعت کامپیوتر، میزان حافظه اصلی کامپیوتر و از همه مهمتر کیفیت الگوریتم نام برد.
برخی از مسائل بدون پیچیدگی هستند و راه حلهای مشخص و سادهای دارند در حالیکه برای برخی دیگر از مسائل راهحلهای مختلف وجود دارد و در نتیجه الگوریتمهای متفاوتی میتوان برایشان طراحی کرد. این الگوریتمها کارایی و کیفیت یکسانی ندارند و از جنبههای گوناگون قابل مقایسه میباشند. همانگونه که توجه به کیفیت در همه زمینهها از اهمیت بالایی برخوردار است، برای الگوریتمها نیز چنین است. اهمیت طراحی و ارائه یک الگوریتم خوب برای مسائل پیچیده و مسائلی که دارای محاسبات زیاد و حجیمی هستند به اوج خود میرسد و تا آنجا پیش میرود که برای یک مسئله مشخص، یک الگوریتم ممکن است کاملاً کاربردی باشد، حال آنکه، الگوریتم دیگری که برای حل همان مسأله طراحی شده است کاملاً بیمصرف باشد.
سرفصل های الگوریتم و فلوچارت:
- کاربرد متغیر ها در نوشتن الگوریتم
- عملگر ها در الگوریتم نویسی
- آموزش نوشتن الگوریتم مجموع و میانگین
- ساختار های شرطی و کاربرد آنها
- نوشتن الگوریتم محاسبه زوج و فرد بودن عدد ورودی
- پیاده سازی الگوریتم محاسبه عدد بزرگتر بین سه عدد
- حلقه های تکرار و عملکرد آنها
- نوشتن الگوریتم محاسبه مجموع و میانگین ۱۰۰ عدد
- پیاده سازی الگوریتم محاسبه مجموع اعداد تا وارد کردن عدد صفر
- مفهوم فلوچارت و دلیل نیازمندی به آن
- اشکال و معنای آنها در فلوچارت
- طراحی فلوچارت محاسبه زوج و فرد
- و…
آنچه در این دوره می آموزید :
در دوره آموزش الگوریتم و فلوچارت، با مباحث اولیه برنامه نویسی نظیر متغیر ها، عملگر ها، ساختار های شرطی، حلقه های تکرار و غیره آشنا میشوید. سپس به سراغ پیاده سازی الگوریتم های متنوع نظیر الگوریتم زوج و فرد، الگوریتم فاکتوریل و الگوریتم محاسبه مجموع و میانگین چند عدد خواهیم رفت. پیاده سازی این الگوریتم ها صرفا برای آشنایی با ساختار حل مسئله به صورت گام به گام میباشد.
پس از یادگیری الگوریتم نویسی، به سراغ فلوچارت خواهیم رفت. فلوچارت ها روند اجرایی الگوریتم ها را به تصویر میکشند. تجربه ثابت کرده است که به خاطر سپردن تصویر بسیار ساده تر از نوشته است. پس فلوچارت میتواند روند به خاطر سپردن مسیر اجرایی را ساده تر کند. در طراحی فلوچارت از اشکال مختلفی برای نمایش مسیر اجرا استفاده میشود؛ که البته در این دوره با مفهوم تمامی اشکال آشنا خواهید شد
اهمیت یادگیری آموزش طراحی الگوریتم چیست؟
درس طراحی و تحلیل الگوریتمها، یکی از دروس مهم رشته کارشناسی کامپیوتر و پایه و اساس برنامهنویسی است. این درس کمک میکند تا بتوانیم الگوهای منطقی و ریاضی را برای حل مسائل مختلف به دست آوریم. از این درس در کنکورهای ارشد و دکتری، در بیشتر گرایشهای کامپیوتر و IT سوال مطرح میشود.
پیشنیاز درس طراحی الگوریتم
برای اخذ درس هوش مصنوعی (۳ واحدی) لازم است که درس طراحی الگوریتم را بعنوان پیشنیاز گذرانده باشید. از آنجا که رشته هوش مصنوعی(AI) در خصوص بکارگیری الگوریتمها و روشهای پیچیده برای ساخت ماشینهای خودمختار(بتوانند به تنهایی تصمیم بگیرند) است، بنابراین یادگیری دقیق و صحیح درس طراحی الگوریتم ضروری میباشد.
چرا از الگوریتم استفاده میکنیم؟
دو بچه، علی و محمد را در نظر بگیرید که مکعب روبیک را حل میکنند. علی میداند که چگونه آن را در تعداد مشخصی از مراحل حل کند. از سوی دیگر محمد میتواند که این کار را انجام دهد اما از روند کارآگاه نیست. علی مکعب را در عرض ۲ دقیقه حل میکند درحالیکه محمد ممکن است با ساعتها آزمونوخطا آن را حل کند.
بنابراین زمان موردنیاز برای حل یک مشکل با رویه الگوریتم بسیار مؤثرتر از زمانی است که بدون هیچ روشی یک مسئله را حل کرد. ازاینرو نیاز به الگوریتم ضروری است.
تجزیه و تحلیل الگوریتم
تجزیهوتحلیل الگوریتم بخش مهمی از نظریه پیچیدگی محاسباتی (پیچیدگی زمانی و پیچیدگی حافظه) است که تخمین نظری منابع موردنیاز یک الگوریتم را برای حل یک مشکل محاسباتی خاص ارائه میدهد. تجزیهوتحلیل الگوریتمها تعین مقدار منابع زمانی و مکانی موردنیاز برای اجرای آن است که در دوره آموزش طراحی الگوریتم بهخوبی این موضوع پوشش داده شده است.
چرا تجزیهوتحلیل الگوریتمها مهم است؟
دلایل زیر همگی نیاز به تجزیهوتحلیل الگوریتم را بیان خواهند کرد:
- برای پیشبینی رفتار یک الگوریتم بدون اجرای آن بر روی یک کامپیوتر خاص، تجزیهوتحلیل نیاز است.
- داشتن معیارهای ساده برای کارایی یک الگوریتم بسیار راحتتر از پیادهسازی الگوریتم و آزمایش کارایی هر بار که پارامتر خاصی در سیستم کامپیوتری زیربنایی تغییر میکند، است.
- مهمتر از آن، با تجزیهوتحلیل الگوریتمهای مختلف، میتوانیم آنها را باهم مقایسه کنیم تا بهترین الگوریتم را برای هدف خود تعیین کنیم.
انواع روش ارزیابی الگوریتم
- بهترین حالت الگوریتم: بهترین حالت الگوریتم زمانی است که ورودی را طوری تعریف کنیم که الگوریتم برای آن زمان کمتر یا حداقل زمان نیاز دارد. در بهترین حالت، حد پایین یک الگوریتم محاسبه میشود. مثال: در جستجوی خطی وقتی دادههای جستجو در اولین مکان دادههای وجود دارد، بهترین حالت رخ میدهد.
- بدترین حالت: بدترین حالت زمانی است که ورودی را طوری تعریف کنیم که الگوریتم برای آن زمان طولانی یا حداکثر زمان نیاز دارد. در بدترین حالت، حد بالایی یک الگوریتم محاسبه میشود. مثال: در جستجوی خطی وقتی دادههای جستجو اصلاً وجود ندارد، بدترین حالت رخ میدهد.
- حالت متوسط: در حالت متوسط، تمام ورودیهای تصادفی انتخاب میشوند و زمان محاسبه برای همه ورودیها محاسبه میشود و سپس آن را بر تعداد کل ورودیها تقسیم میشود.