الگوریتم روشی است که از آن برای حل یک مسأله و یا انجام محاسبات استفاده میشود. الگوریتمها به طور گستردهای در ریاضیات و علوم کامپیوتر مورد استفاده قرار میگیرند. الگوریتم مسأله را به صورت یک سناریو میبیند و بر اساس آن الگویی برای حل نهایی مسأله در نظر میگیرد. امروزه در سطوح بسیار پایین، برای آموزش روش حل مسأله به کودکان یاد میدهند چگونه الگوی حل مسأله را پیدا کنند.
الگوریتمها نقش گستردهای در پردازشهای سیستمهای خودکار دارند. الگوریتم میتواند در روش مرتبسازی اعداد تا حل مسائل پیچیده استفاده شود.
الگوریتمها معمولاً یک یا چند ورودی دارند که پس از اعمال عملیاتی به روی آنها، خروجی و نتیجه ی محاسبات را تحویل میدهند. در ادامه خواهیم گفت الگوریتم چیست و از کجا آمده است؟ در زندگی و یا در دنیای کامپیوتر به چه صورت است؟ و انواعی از الگویتمهای کامپیوتری را به صورت ساده برای شما خواهیم آورد.
مفهوم الگوریتم از کجا آمده است؟
مفهوم الگوریتم به دوران باستان بر میگردد. الگوریتم حسابی مانند الگوریتم تقسیم، توسط ریاضیدان بابلی مطرح شد، که مربوط به 2500 سال قبل از میلاد است. ریاضیدانان یونانی بعدها حدود 240 سال قبل از میلاد از الگوریتمها در غربال اعداد اول استفاده کردند.
ریاضی دانان عرب در قرن نهم الگوریتمهایی مربوط به شکستن کدها را ارائه دادند.
اما کلمهی الگوریتم از نام محمد ابن موسی الخوارزمی گرفته شده است. خوارزمی رسالهای به زبان عربی در مورد سیستم اعداد نوشت که در قرن دوازدهم به زبان لاتین ترجمه شد.
الگوریتم چیست؟
شاید شما به دفعات زیادی شنیده باشید که از الگوریتم و یا الگوریتم برنامه نویسی نام میبرند. حتی شاید این به گوش شما خورده باشد که کسانی که تحصیلات آکادمیک دارند واحدی به نام الگوریتم را میگذرانند.
اما الگوریتم کامپیوتری چیست؟ الگوریتم برنامهنویسی چه مفهومی دارد؟ الگوریتم چه اهمیتی در حیطهی کامپیوتر و یا حتی زندگی روزمره دارد؟
به مجموعهای از مراحل که برای انجام یک کار خاص انجام میشود، الگوریتم میگویند. به الگوریتم بلوک سازندهی برنامهنویسی نیز میگویند.
الگوریتم به رایانهها، تلفنهای هوشمند و وب سایتها اجازهی عملکرد و تصمیمگیری میدهد. بسیاری از کارهایی که ما به صورت روزانه انجام میدهیم در واقع نوعی الگوریتم هستند. به عنوان مثال فرض کنید میخواهید ماکارونی درست کنید. حتماً قبل از انجام، مراحلی را در ذهن خود دارید.
شما احتمالاً ابتدا مواد میانی ماکارونی را درست میکنید. سپس آب را درون قابلمه میگذارید تا به جوش آید و ماکارونی و نمک و روغن را به آن اضافه میکنید. شما در این پروسه زمان را نیز در نظر میگیرد.
کل این فرا آیند در واقع یک الگوریتم است که شما را وادار کرده که از یک الگوی خاص پیروی کنید تا به نتیجه دلخواه برسید.اگر در تمام طول این فرایند اشتباهی انجام دهید نتیجهی نهایی آن چیزی نیست که مطلوب و قابل قبول باشد.
برنامهها نیز از چنین رویهای پیروی میکنند. کدها روند خاصی را دنبال میکنند. فرض کنید ما میخواهیم از یک برنامهی ناوبری استفاده کنیم.
شما مقصد را تایپ میکنید. الگوریتم شروع به جستجوی مسیرهای در دسترس میکند. سپس از الگوریتم دیگری برای کنترل ترافیک استفاده خواهد کرد. بعد از آن الگوریتمی وجود دارد که میتواند مسیر و ترافیک را در کنار هم بسنجد و نتیجه نهایی را اعلام کند.
تمام این الگوریتمها در کدها جای گرفتهاند و اگر کوچکترین خطایی وجود داشته باشد، شما به مقصد یا نمیرسید و یا نتیجه دلخواه از نظر زمان و ترافیک را نخواهید داشت.
هر دو مثال نشان میدهد که چگونه هم کامپیوترها و هم انسانها میتوانند از الگوریتمها استفاده کنند. تفاوت در این است که کامپیوترها کارها را سریعتر و با دقت بیشتری انجام میدهند و نتیجهی بهتری در اموری که محاسبات سنگین دارد به ما میدهند.
تکنولوژِی به سمت بهتر شدن پیش میرود. تا زمانی که از کدنویسی و برنامهنویسی استفاده میشود، در واقع الگوریتم قلب این مسأله است. با الگوریتمها ما میدانیم چه کاری و به چه ترتیبی قرار است صورت پذیرد.
الگوریتم کامپیوتری چگونه کار میکند؟
الگوریتم را میتوان به صورت زبان طبیعی، زبانهای برنامهنویسی، شبه کدها، فلوچارتها و جداول کنترل بیان کرد. از زبان طبیعی کمتر استفاده میشود چون الگوریتم احتیاج به زبانی همگانی دارد. از زبانهای برنامهنویسی برای نوشتن الگوریتم کامپیوتری استفاده میشود.
الگوریتمها از یک ورودی اولیه به همراه مجموعهای از دستور العملها استفاده میکنند. دادههای ورودی به صورت اعداد و یا کلمات وارد میشوند. به روی دادههای ورودی از طریق تعدادی از دستور العملها و محاسبات، عملیات انجام میشود. خروجی معمولاً آخرین مرحلهی یک الگوریتم است و معمولاً به صورت داده نمایش داده میشود.
به عنوان مثال یک الگوریتم جستجو را در نظر بگیرید. عبارتی برای جستجو وارد میشود. الگوریتم به روی پایگاه دادههایی که دسترسی دارد شروع به جستجو میکند.
نرمافزار اتوماسیونهای اداری را در نظر بگیرید. این نرمافزار نیز دارای الگوریتمی در پشت صحنهی است که بر اساس قواعد خاصی عمل میکند. قواعدی که در روند آن اداره و سازمان در نظر گرفته شده است. بسیاری از ادارات یا سازمانها برنامه اتوماسیون خود را به شرکتی بیرونی بر اساس قواعد مشخص خود سفارش میدهند.
الگوریتم کامپیوتری را چگونه میتوان تقسیمبندی کرد؟
الگوریتم ها یمختلف با کارائی های متفاوتی وجود دارد که بر اساس مساله از آنها استفاده میشود.
الگوریتم موتور جستجو (Search engine algorithm):
این الگوریتم رشتههای کلمات و یا اعداد و یا ترکیب هر دو را از کاربر میگیرد. در پایگاه داههای مجاز در صفحات مختلف وب شروع به جستجو میکند و نتیجه را بر میگرداند.
الگوریتمهای رمزگذاری (Encryption algorithm):
این الگوریتمها دادهها بر طبق روند خاصی کدگذاری میکند. مثلاً الگوریتم کلید متقارن (symmetric key)داریم. با یک استاندارد رمزگذاری دادهها را رمزگذاری میکند و فقط از طریق همان کلید امکان بازگشایی رمز وجود دارد. زمانی که الگوریتم به اندازه کافی پیچیده باشد کسی قادر نخواهد بود که کار رمزگشایی را بدون داشتن کلید انجام دهد.
الگوریتم حریص (Greedy algorithm):
این الگوریتم با پیدا کردن راه حل بهینه کار میکند. با این وجود در بعضی موارد نمیتواند بهترین راه حل را پیدا کند.
الگوریتم بازگشتی (Recursive algorithm):
این الگوریتم هر بار با فراخوانی خودش نسبت به حل مسأله تلاش میکند. کار این الگوریتم این است که خودش را با متغیرهای کوچکتر فراخوانی کند تا نهایتاً به هدف برسد.
الگوریتم عقبگرد (Backtracking algorithm):
این الگوریتم با رویکردهای افزایشی راه حل را برای مسأله جستجو میکند.
الگوریتم تقسیم کن و حکومت کن (Divide-and-conquer algorithm):
این الگوریتم از دو قسمت تشکیل شده است. یک قسمت مسأله را به مسائل کوچکتر تقسیم میکند و بخش دوم الگوریتم سعی در حل کردن مسائل کوچک دارد.
الگوریتم برنامهنویسی پویا (Dynamic programming algorithm):
این الگوریتم نیز مسائل را تقسیم میکند و قسمتهای مختلف را حل میکند تا به نتیجهی مطلوب برسد.
الگوریتم Brute-Force:
این الگوریتم راه حلها را به صورت کورکورانه دنبال میکند تا به نتیجهی دلخواه برسد.
الگوریتم مرتبسازی (Sorting algorithm):
بر اساس مقایسه، ساختار دادهها را به روشهای مختلفی مرتب میکند.
الگوریتم هشینگ (Hashing algorithm):
این الگوریتم بر اساس یک Hash دادهها را به یک پیام یکنواخت تبدیل میکند. تابع Hash یکی از ارکان اصلی اینترنت امن است.
الگوریتم تصادفی (Randomized algorithm):
این الگوریتم زمان اجرا را کم میکند و همچنین پیچیدگیهای مربوط به زمان را کاهش میدهد. الگوریتم از عناصر تصادفی برای اجرای عملیات استفاده میکند.
مثالی از الگوریتمهای کامپیوتری
ماشین لرنینگ (Machine learning) نمونه خوبی از الگوریتم کامپیوتری است، زیرا از الگوریتمهای متعددی برای پیشبینی نتایج استفاده میکند. ماشین لرنینگ از نتایج خود برای بهبود کار خود استفاده میکند. به عنوان مثال
- اینکه گوشی هوشمند شما چهرهی شما را تشخیص میدهد از الگوریتمهای ماشین لرنینگ استفاده میکند.
- اینستاگرام، فیسبوک و سایر شبکههای اجتماعی از طریق الگویتمهای ماشین لرنینگ علایق شما را پیگیری میکنند و تبلیغات و افراد مختلف را به شما نشان میدهند.
- آمازون، دیجی کالا و سایر فروشگاههای آنلاین در واقع با بررسی تاریخچهی خریدهای شما و با الگوریتمهای خاص تبلیغ برای شما میفرستند.
کلام آخر
شاید بشر از همان ابتدای خلقت بدون اینکه نام الگوریتم را به روی کارهای خود بگذارد بر اساس الگوریتمهای مختلف کار کرده است. اکنون با پیشرفت تکنولوژی، الگوریتم تحت عنوان نامهای مختلف و برای انجام و تسهیل زندگی بشر وارد دنیای دیجیتال شده است.
منبع: techtarget