تاریخچه ای از طراحی الگوریتم
از نظر واژهشناسی کلمه الگوریتم از الگوریزم (algorism) به دست آمده که خود از نام ریاضیدان شایسته ایرانی ابوجفعر محمدبن موسی الخوارزمی و به پاس خدمات او به توسعه دانش بشری اقتباس شده است. کلمه «الجبرا» در انگلیسی نیز از روی کتاب مشهور او به نام الجبر و مقابله گرفته شده است. ابوجعفر محمد بن موسی خوارزمی از دانشمندان شهیر ایران است که در نیمه دوم قرن دوم و اوایل قرن سوم هجری شمسی میزیسته و در علوم ریاضی و هیأت سرآمد دانشمندان دوران خود بوده است.
ساختار منطقی الگوریتم
بر اساس یک طبقه بندی الگوریتمها در ۳ گروه دنبالهای، شاخهای و حلقهای قرار میگیرند. الگوریتم دنبالهای (Sequence) ساختاری مرحله به مرحله دارد و ترتیب گامها برای رسیدن به پاسخی معتبر در آن مشخص شده است. در این نوع از الگوریتم، عناصر ورودی بطور پیوسته پردازش شده و عنصر به عنصر متن را تولید میکنند.
الگوریتم شاخهای(Branching) دسته دیگری از انواع الگوریتمها است که بر اساس قانون در ریاضیات کار میکند. در واقع بعد از اینکه شرطی مشخص شد، خروجی با توجه به نتیجه شرط تعیین میشود. در دسته آخر که الگوریتم حلقه ای یا تکراری (Loop) نام دارد، به تعدادی معین شرطی را در الگوریتم اعمال میکنند و پس از اتمام شدن فرایند، برنامه را پایان میدهند.
ویژگیهای یک الگوریتم کاربردی
-
زبان ساده، دقیق و قابل فهم
وقتی از یک جمله برداشتهای متفاوت و مبهمی صورت گیرند، یعنی دقیق و یا واضح نبوده است. تمام تلاش یک الگوریتم و فلوچارت اجرای یک الگوی یکسان است و در صورتی که زبان آن ساده، دقیق و قابل فهم باشد میتوان انتظار داشت که از آن برداشتهای یکسانی صورت گیرند. اگر این ویژگی لحاظ نشود، برداشتهای متفاوت به دستورالعملهای متفاوت ختم خواهند شد. این یعنی الگوریتم اصلاً به هدف خود نزدیک هم نشده است. لازم به ذکر است که زبان الگوریتم میتواند نوعی زبان گفتاری یا نوشتاری اعم از فارسی، انگلیسی و… باشد.
-
جزئیات کافی
در صورتی که جزییات جامع و کامل لحاظ شوند، دستورالعملها به طور کامل اجرا میشوند. از سوی دیگر وجود موارد نامشخص یا مبهم، سبب مخدوش شدن نتایج و در نهایت خروجی میشوند.
-
شروع و پایان الگوریتم
نقطه شروع الگوریتم به عنوان اولین دستورالعمل باید مشخص باشد. زیرا هر الگوریتم یک شروع و پایانی دارد. الگوریتم باید در زمان و تحت شرایط تعیین شده خاتمه یابد. توجه به این نکته نیز حائز اهمیت است که یک الگوریتم میتواند بیش از یک نقطه پایان داشته باشد.
-
ترتیب انجام دستورالعملها
ترتیب انجام دستورالعملها از ویژگیهای بنیادی و مهم یک الگوریتم است. زیرا چنانچه دستورالعملها به ترتیب و درست انجام نشوند، احتمال بروز خطا بالا میرود و خروجی نامعتبر و نادرست تولید میشود. با استفاده از شمارهگذاری دستورالعملها از بالا به پایین، ترتیب انجام عملیات تعیین میشود. این امکان نیز وجود دارد که در صورت لزوم ترتیب اجرای دستورالعملها تغییر یابد.
از کارهای کوچک تا داده های بزرگ
یک مسئله ساده را می توان با یک الگوریتم ایجاد شده در چند دقیقه حل کرد. با این حال مسئله ها با سطح پیچیدگی بسیار بزرگ و طولانی وجود دارد که سال ها یا حتی قرن ها است که محققان و ریاضیدانان را دچار مشکل کرده اند.
سیستم های مدرن با مسائلی در این سطح در زمینه هایی مانند امنیت سایبری و همچنین مدیریت داده های بزرگ روبرو می شوند-مرتب سازی موثر و کامل مجموعه داده های بزرگی که حتی یک سیستم استاندارد هم نمی تواند آنها را در زمان مناسب پردازش کند. نمونه هایی از داده های بزرگ مثل “هر مقاله در ویکیپدیا”، “صفحه وب بایگانی شده در سال ۱۹۹۸” یا “خریدهای آنلاین انجام شده در شش ماه گذشته در ایران”.
مهندسی الگوریتم
با طراحی الگوریتم های جدید در موارد عملی یک زمینه و رشته مرتبط به عنوان مهندسی الگوریتم به وجود آمده است. در بیشتر موارد طراحی و مهندسی الگوریتم توسط یک فرد انجام می شود اما سازمان های بزرگ مانند آمازون و گوگل با توجه به نیاز آنها به الگوریتم های جدید و تخصصی از طراحان و مهندسان متخصص استفاده می کنند.
مهندسی الگوریتم نیز مانند فرایند طراحی شامل استفاده از علوم کامپیوتر همراه با زمینه قوی در ریاضیات است. مهندسان الگوریتم ایده های مفهومی طراحان را گرفته و از آنها فرایندهای قابل درک برای کامپیوتر ایجاد می کنند. با پیشرفت مداوم فناوری های دیجیتال، مهندسان الگوریتم نیز به طور گسترده ای در حال افزایش هستند.
اهمیت الگوریتم ها در علوم کامپیوتر
دلیل استفاده گسترده از الگوریتم ها در علوم کامپیوتر این است که کامپیوترها می توانند طوری برنامه ریزی شوند که دستورالعمل ها را به صورت متوالی اجرا کنند و این امکان را برای برنامه نویسان فراهم می کنند تا بتوانند به کامپیوترها نحوه نمایش گرافیک های سه بعدی، نمایش متن و انجام عملیات مختلف روی اعداد را آموزش دهند.
اولین استفاده از کامپیوترها انجام عملیات محاسبات اولیه روی حجم زیادی از اعداد بود و گاهی گرفتن جواب حتی چندین ماه طول می کشید در حالیکه در سخت افزار امروزه تنها چند ثانیه یا چند دقیقه زمان می برد. دانشمندان کامپیوتر در آن زمان نمی دانستند که می توانند از الگوریتم ها برای برنامه ریزی کامپیوترها برای ایجاد برنامه های ویرایش عکس، طراحی بازی های ویدئویی و یا نرم افزارهای تجاری استفاده کنند.
برخی از مسائل بدون پیچیدگی هستند و راه حلهای مشخص و سادهای دارند در حالیکه برای برخی دیگر از مسائل راهحلهای مختلف وجود دارد و در نتیجه الگوریتمهای متفاوتی میتوان برایشان طراحی کرد. این الگوریتمها کارایی و کیفیت یکسانی ندارند و از جنبههای گوناگون قابل مقایسه میباشند. همانگونه که توجه به کیفیت در همه زمینهها از اهمیت بالایی برخوردار است، برای الگوریتمها نیز چنین است. اهمیت طراحی و ارائه یک الگوریتم خوب برای مسائل پیچیده و مسائلی که دارای محاسبات زیاد و حجیمی هستند به اوج خود میرسد و تا آنجا پیش میرود که برای یک مسئله مشخص، یک الگوریتم ممکن است کاملاً کاربردی باشد، حال آنکه، الگوریتم دیگری که برای حل همان مسأله طراحی شده است کاملاً بیمصرف باشد.
آموزش الگوریتم و فلوچارت برای چه کسانی مناسب است ؟
- علاقه مندان به شروع برنامه نویسی
- افراد تازه کار که قصد فراگرفتن ذهینت برنامه نویسی را دارند
- کسانی که به دنبال یادگیری پیش نیاز های برنامه نویسی هستند
- افرادی که در رشته هایی جز نرم افزار فعالیت داشته و با برنامه نویسی آشنا نیستند
- کسانی که قصد آموزش اصولی برنامه نویسی را دارند
- افراد علاقهمند به آموزش الگوریتم و فلوچارت
مزایای استفاده از الگوریتم ها
زبان های برنامه نویسی سطح بالا مانند C، C++، جاوا و پایتون به برنامه نویسان اجازه می دهتد تا برنامه های بسیار پیچیده را با کدهای نسبتا کوتاه بنویسند. به عنوان مثال یک برنامه C++ برای اجرا الگوریتم جستجوی خطی همه عناصر یک آرایه را فقط در دو یا سه خط کد بررسی کند اما تعداد دستورالعمل های نوشته شده در زبان اسمبلی ممکنه به ۲۰ یا ۳۰ خط کد نیز برسد.
توابع مرتب سازی و جستجو جزء متداول ترین الگوریتم ها در برنامه نویسی هستند و همیشه به دنبال بالا بردن کارایی آنها می باشند. یکی از مهمترین مفاهیم در علوم کامپیوتر مقایسه پیچیدگی P در مقابل NP است یا اینکه آیا مجموعه الگوریتم های با پیچیدگی زمانی چند جمله ای با مجموعه الگوریتم های چند جمله ای غیرقطعی یکسان است یا خیر. اگر یکسان باشند، دانشمندان کامپیوتر می توانند با استفاده از الگوریتم های شناخته شده فعلی مسئله هایی را حل کنند که حل آنها میلیون ها سال طول می کشد. البته بیشتر افراد فکر می کنند P و NP یکی نیستند.
به گفته مجله علمی Scientific American تا زمانی که هر دستورالعمل فقط می تواند در یک زمان اجرا شود پس الگوریتم ها باید به صورت متوالی انجام شود اما محاسبات کوانتومی می تواند آن را نقض کند. اگر علاقه مند به تحصیلات تکمیلی در زمینه ریاضیات و علوم رایانه هستید، وارد رشته طراحی الگوریتم شوید.