الگوریتم به زبان ساده
نویسنده : نازنین رحمانی | زمان انتشار : 11 دی 1400 ساعت 10:17
جهت انجام پروژه های دانشجویی و یا تمرینهای برنامه نویسی رشته کامپیوتر میتوانید به آی دی تلگرام زیر پیام دهید
@AlirezaSepand
الگوریتم کلمهای است که بسیار با آن مواجه میشویم. اما وقتی در مورد الگوریتمهای یوتیوب یا فیسبوک صحبت میکنیم، منظورمان دقیقاً چیست؟ الگوریتمها چه هستند و چرا افراد تا این حد از آنها در هراس هستند؟
الگوریتمها، دستورالعمل حل مسئله هستند
ما در دنیایی زندگی میکنیم که گرچه رایانهها در لحظه لحظه زندگی ما نفوذ و رسوخ کردهاند، اما درک دقیقی از کارکرد آنها وجود ندارد. با این حال یک حوزه در علوم رایانه وجود دارد که هر فردی میتواند مبانی آن را درک کند. این زمینه از دانش رایانه به نام برنامهنویسی شناخته میشود.
برنامهنویسی صرفاً یک عنوان شغلی جذاب محسوب نمیشود؛ بلکه مبنای همه نرمافزارهای رایانهای از آفیس مایکروسافت تا نرمافزارهای سخنگوی تلفنی است. حتی اگر دانش شما از برنامهنویسی تنها منحصر به فیلمهای خیلی قدیمی و گزارشهای خبری زرد باشد، احتمالاً متوجه هستید که کار یک برنامهنویس چیست. برنامهنویس کدی را برای رایانه مینویسد و رایانه با استفاده از دستورالعملهای تعریف شده آن کد وظایفی را برای حل مسائل اجرا میکند.
اینک باید گفت که در دنیای دانش رایانه، الگوریتم در واقع عنوانی جذاب برای نامیدن کد است. هر مجموعه دستورالعمل که به یک رایانه اعلام کند مسائل را چگونه حل کند یک الگوریتم محسوب میشود؛ حتی اگر آن وظیفه بسیار آسان باشد. زمانی که رایانه خود را روشن میکنید، یک مجموعه از دستورالعملهای «شیوه روشن شدن» اجرا میشوند. زمانی که رایانه NASA از دادههای موج رادیویی خام برای رندر کردن یک عکس فضایی استفاده میکند، همچنان یک الگوریتم اجرا شده است.
واژهای چند بعدی
کلمه الگوریتم میتواند برای توصیف هر مجموعه دستورالعملی حتی در خارج از دنیای برنامهنویسی نیز مورد استفاده قرار گیرد. برای نمونه روش شما برای مرتبسازی ظروف در یک کابینت نیز یک الگوریتم محسوب میشود. همچنین روش شما برای شستن دستها پس از دستشویی نیز یک الگوریتم است.
اما نکته اینجا است که امروزه کلمه الگوریتم صرفاً برای برخی گفتگوهای فناوری بسیار خاص مورد استفاده قرار میگیرد. معمولاً نمیشنویم که کسی از الگوریتمهای «ریاضیات مقدماتی» یا الگوریتمهای «ابزار گرافیتی در نرمافزار Paint» صحبت کند. اما در عوض بسیار میشنویم که کاربران در مورد الگوریتمهای پیشنهاد دوست اینستاگرام یا الگوریتمهای گردآوری داده فیسبوک از گروههای خصوصی اعتراض میکنند.
اگر الگوریتم یک اصطلاح با معانی مختلف برای دستورالعملهای محاسباتی باشد، در این صورت چرا باید از آن منحصراً برای توصیف جنبههای گیجکننده، جادویی و یا حتی شریرانه دنیای دیجیتال استفاده کنیم؟
اغلب افراد از «الگوریتم» و «یادگیری ماشین» به جای هم استفاده میکنند
در گذشته، برنامهنویسان و فرهنگ عامه اغلب دستورالعملهای محاسباتی را به صورت کد مینامیدند. این وضعیت امروزه نیز تا حدودی زیادی برقرار است. یادگیری ماشین زمینه وسیع و مبهمی از محاسبات است که در آن به جای کد از الگوریتم استفاده میشود. بدیهی است که این مسئله نیز بر سردرگمی پیچیدگی موجود پیرامون کلمه الگوریتم میافزاید.
یادگیری ماشین مدتهای زیادی است که وجود دارد، اما صرفاً در طی حدوداً 15 سال اخیر بوده است که به بخش بزرگی از دنیای دیجیتال تبدیل شده است. با این که یادگیری ماشین مانند یک ایده پیچیده به نظر میرسد، اما درک آن کاملاً آسان است. برنامه نویسان نمیتوانند کدهای خاص را برای هر موقعیت نوشته و تست کنند و از این رو کدی را مینویسند که بتواند خودش کدنویسی کند.
یادگیری ماشین به مثابه هوش مصنوعی
یادگیری ماشین را میتوان مانند یک شکل عملی از هوش مصنوعی تصور کرد. اگر شما تعداد کافی از ایمیلهای رئیس خود را به صورت اسپم علامتگذاری کنید، در این صورت کلاینت ایمیل به صورت خودکار همه ایمیلهای رئیس را به صورت اسپم نمایش میدهد. به طور مشابه، گوگل از یادگیری ماشین برای مطمئن شدن از این که نتایج جستجوی یوتیوب مرتبط بودهاند بهره میگیرند. آمازون نیز از یادگیری ماشین استفاده میکند تا محصولاتی که بهتر است بخرید را به شما پیشنهاد کند.
البته یادگیری ماشین این مقدار هم زیبا و سرراست نیست. عنوان «یادگیری ماشین» نیز آن قدر پیچیده هست که موجب آزردگی برخی افراد شود. برخی از کاربردهای رایج یادگیری ماشین نیز از نظر اخلاقی بحث برانگیز هستند. الگوریتمهایی که فیسبوک برای دادهکاوی کاربران در سطح وب استفاده میکند، مثالی از جنبههای ناخوشایند یادگیری ماشین محسوب میشوند.
در اخبار به صورت مکرر در خصوص الگوریتم گوگل برای رتبهبندی نتایج جستجو، الگوریتم یوتیوب برای پیشنهاد ویدئو و الگوریتم فیسبوک برای تصمیمگیری در مورد مطالبی که در تایملاین دیده میشود مطالبی را میخوانیم. اینها همگی مواردی مستعد نزاع و بحثانگیز هستند.
چرا الگوریتمها بحث برانگیز هستند؟
Long Division ازجمله الگوریتمهای آشنا برای تقسیم اعداد است. این الگوریتم چنان ساده است که به جای رایانهها مورد استفاده کودکان مدرسهای است. پردازندههای رایانه از الگوریتم کاملاً متفاوتی برای تقسیم کردن اعداد استفاده میکنند، اما در هر حال نتیجه کار یکسان است.
در تبدیل گفتار به متن از یادگیری ماشین استفاده میشود، اما هیچ کس از الگوریتم تبدیل گفتار به متن صحبت نمیکند، چون یک پاسخ دقیق عینی وجود دارد که هر انسانی میتواند بیدرنگ شناسایی کند. برای هیچ کس مهم نیست که رایانهها چگونه گفتهها را تشخیص میدهند و آیا از یادگیری ماشین استفاده شده است یا نه. تنها نکته مهم برای ما این است که آیا رایانه پاسخ صحیحی داده است یا نه.
اما دیگر کاربردهای یادگیری ماشین از این مزیت ارائه پاسخ صحیح برخوردار نیستند. به همین دلیل است که الگوریتمها به موضوع معمول گفتگوهای رسانهای در عصر حاضر تبدیل شدهاند.
یک الگوریتم برای مرتبسازی الفبایی فهرست تنها روشی برای اجرای وظیفه تعریف شده است. اما الگوریتمی مانند الگوریتم گوگل برای رتبهبندی بهترین وبسایتها برای جستجو یا الگوریتم یوتیوب برای پیشنهاد بهترین ویدئو ابهام بیشتری دارد و یک وظیفه تعریف شده را اجرا نمیکند. در این حالت مردم میتوانند بحث کنند که آیا الگوریتم نتایجی را که باید تولید کند، ارائه میدهد یا نه و بدیهی است که افراد مختلف میتوانند نظرهای متفاوتی در این خصوص داشته باشند. اما در مثال مرتبسازی الفبایی یک فهرست، همه کس توافق دارند که فهرست نهایی از نظر الفبایی مرتب شده است و هیچ جایی برای بحث وجود ندارد.
چطور میتوانیم از واژه الگوریتم استفاده کنیم؟
الگوریتمها مبانی همه نرمافزارها هستند. بدون وجود الگوریتم هیچ تلفن یا رایانهای وجود نمیداشت و احتمالاً همین مقاله را نیز روی کاغذ میخواندید و شاید هم اصلاً نمیتوانستید آن را بخوانید.
اما توده مردم از واژه الگوریتم به عنوان یک اصطلاح همهکاره برای کدهای رایانهای استفاده نمیکنند. در واقع اغلب مردم تصور میکنند که تفاوتی بین کد رایانه و الگوریتم وجود دارد؛ در حالی که واقعاً چنین نیست. از آنجا که واژه الگوریتم با یادگیری ماشین مرتبط است، معنی آن تا حدودی در هالهای از ابهام قرار گرفته است و کاربرد آن به موارد خاصی محدود شده است.
آیا ما باید از واژه الگوریتم برای توصیف اغلب کدهای رایانهای استفاده کنیم؟ شاید این کار مناسبی نباشد، چون اغلب افراد منظور گفتههای شما را درک نخواهند کرد. زبان همواره در حال تغییر است و برای هر تغییری نیز همواره دلیل خوبی وجود دارد. افراد برای توصیف دنیای سردرگمکننده، مبهم و در برخی موارد مشکوک یادگیری ماشین به یک واژه نیاز دارند و فعلاً واژه الگوریتم این نقش را بر عهده گرفته است.
بدین ترتیب بهتر است به خاطر داشته باشید که یک الگوریتم (و یادگیری ماشین) در معنای اصلی خود مقداری کد است که برای حل وظایف نوشته شده است. هیچ ترفند جادویی در مورد الگوریتم وجود ندارد و در واقع نسخه پیچیدهتری از نرمافزار است که همگی با آن آشنا هستیم.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای ساختمان داده و طراحی الگوریتم
- آموزش طراحی الگوریتم
- مجموعه آموزشهای الگوریتمهای بهینهسازی هوشمند
- تکنیکهای حل الگوریتم به زبان ساده — بخش اول
- برترین الگوریتمهای پیشبینی در یادگیری ماشین (Machine Learning)
این مطلب با حمایت «گروه الگوریتمسازان پارس» نوشته شده است.
امروزه الگوریتمها تاثیر قابل توجهی در زندگی روزمره ما دارند، از دنیای رباتیک گرفته تا برنامهنویسی و…، گروه الگوریتم سازان پارس به شما کمک میکند به راحتی برای اجزای مهم رباتها یا برنامههای خود الگوریتمهای هوشمندانه و بهینهای تهیه کنید.
این گروه با تکیه بر تجربیات چند ساله خود در زمینه آمادهسازی الگوریتم و ارائه راهحلهای هوشمند برای سازمانها مختلف آماده خدمت رسانی به شما است. جهت کسب اطلاعات بیشتر میتوانید به وبسایت شرکت مراجعه کنید، همکاران ما آماده پاسخگویی به شما هستند.
==
«میثم لطفی» دانشآموخته ریاضیات و شیفته فناوری به خصوص در حوزه رایانه است. وی در حال حاضر علاوه بر پیگیری علاقهمندیهایش در رشتههای برنامهنویسی، کپیرایتینگ و محتوای چندرسانهای، در زمینه نگارش مقالاتی با محوریت نرمافزار نیز با مجله فرادرس همکاری دارد.
بر اساس رای 47 نفر
آیا این مطلب برای شما مفید بود؟
منبع: blog.faradars.org