« الگوریتم » چیست؟ چرا؟ و چگونه؟
چگونه میتوانیم فرآیند انجام یک کار یا حل یک مساله را قدمبهقدم تدوین کنیم بهطوریکه اگر به یک روبات داده شود (عملکننده بدون هوش) بتواند از نقطه شروع به نتیجه برسد؟
.
۱. الگوریتم = روند قدمبهقدم حل مسأله (تشخيص نياز + تشخيص قوانين و امكانات موجود + ايجاد ارتباط بين امكانات و نيازها)
۲. فلوچارت = نمودار جریان حل یک مساله و انجام یک فرآیند از ابتدا تا انتها (تصویر کردن یک الگوریتم در قالب اشکال هندسی)
۳. الگوریتمها، روشی برای دقیقسازی و شفافسازی فرآیندها هستند.
۴. الگوریتمها، از حلقههای ارتباطی میان مبانی فکری و تبدیل آنها به محصولات عینی هستند؛ همچنین الگوریتمها برقرارکننده ارتباط میان نیازهای ما و منابع و ساختارها و فرآیندها هستند.
الگوريتم، يك روش منطقي براي حل مسائل است. روش الگوريتمسازي را خوارزمي رياضي دان مسلمان ايراني براي حل مسائل پيشنهاد كرده بود. الگوريتم مجموعه دستورالعملهايي است كه اجراي آنها با ترتيب تعيين شده و مرحله به مرحله، منجر به انجام يك كار ميشود. ويژگيهاي الگوريتم كه سبب ايجاد چنين اثري ميشوند عبارتنداز :
۱. تعداد دستورالعملهامشخص باشد.
۲. ابتدا وانتهاي دستورالعملها براي انجام دهنده تعريف شده باشد.
۳. در فهم واجراي دستورالعملها تنها يك حالت ممكن باشد و برداشتهاي متعدد نشود.
۴. هريك ازدستورالعملها خود به تنهايي قابل فهم و اجرا باشد.
۵. ترتيب دستورالعملهاما را به يك هدف مشخص برساند.
تعيين دقيق جزئيات و ترتيب مراحل و نحوة به پايان رسيدن فعاليتها مشخصههاي يك فعاليت الگوريتمي هستند.
یک نمونه:
تلفن زنگ ميزند، شما گوشي را برميداريد، پاسخ ميدهيد و گوشي را ميگذاريد. آيا ميتوانيد تعداد فعل و انفعالاتي راكه در اين حركت عادي روزمره درذهن شما رخ ميدهد فهرست كنيد؟
راهنمايي: با توجّه به موقعيتهاي زير به سؤال فوق پاسخ دهيد :
چرا برخي اوقات با وجود اينكه تلفن زنگ ميزند و شما ميشنويد گوشي را برنميداريد؟
چرا برخي اوقات با اشتياق گوشي را برميداريد؟
چرا گاهي صداي مخاطب را ميشنويد و گوشي را ميگذاريد؟ و ...
نمودار زیر تحليل قسمتی از اتفاقي است كه در ذهن ما در يكي از موقعيتهاي خاص نسبت به برداشتن گوشي تلفن ميافتد:
اگر دقّت كنيد در هر يك از موقعيتهاي " آري، خير"محاسبات بسياري در ذهن ميگذرد كه مبتني بر تجربه ما از زندگي و قوانين جاري خلقت است. مثلا يك مورد از آنها را بررسي كنيم:
قسمتِ «آيا موقعيت پاسخ به تلفن را دارم يا نه؟» :
در اين قسمت، وضعيت موجود با قوانيني كه انسان در ذهن دارد مقايسه ميشود و نتيجه صادر ميگردد. مثلاً وضعيت موجود، "خواب بودن" است و قانوني كه در ذهن جاي گرفته اين است كه “ وقتي خواب هستي به تلفن پاسخ نده ".
سوال: چرا بسياري از افراد حتي در موقع خواب و استراحت هم مقيد هستند كه به تلفن جواب بدهند؟
پاسخ: معادلاتي كه در ذهن آنها جاي گرفته است با كسي كه اينكار را انجام نميدهد فرق ميكند. مثلاً كساني كه به احتمالات ضعيف هم اعتنا ميكنند با اين فكر كه شايد تلفن مربوطي باشد گوشي را برميدارند. در همين مرحله نيز بسته به افكار و روحياتي كه دارند مبناي عملكردشان با يكديگر فرق ميكند. كسي كه طمعكار است با احتمال اينكه شايد اين تلفن منفعتي براي او داشته باشد گوشي را برميدارد ولي كسيكه روحيه ايثار دارد با احتمال اينكه شايد اين تلفن منفعتي براي ديگري داشته باشد گوشي را برميدارد. و البته شدت و ضعف اين روحيه به تجربيات و آموزشهاي قبلي افراد بستگي دارد. مثلاً اگر احتمال دارد تلفني كه در حال خواب به صدا درآمد از طرف مادر انسان باشد، بسته به ميزان اهميتي كه براي مادر قائل هستيم به اين احتمال توجّه ميكنيم.
تك تك تصميمگيريهاي ما برخواسته از انبوهي از محاسبات ذهني است كه بسته به ميزان تجربه و شناخت ما از واقعيات، تصميمي صحيح يا غلط از آب درميآيد. براي كسي كه طمعكاراست حكايتهايي از سرانجام طمعكاري ميگويند زيرا يقين دارند كه او زيانهاي طمعكاري را نميداند.
در یکی از دائرهالمعارفها در مورد «الگوریتم» چنین آمده است: (از ویکیپدیا با استناد به منابع پاورقی ۱)
الگوریتم مجموعهای متناهی از دستورالعملها است، که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند. به عبارت دیگر یک الگوریتم،روشی گام به گام برای حل مسئله است. تمام الگوریتمها باید شرایط و معیارهای زیر را داراباشند:
ورودی: یک الگوریتم باید یک یا چندین متغیر را به عنوان ورودی بپذیرد؛
خروجی: الگوریتم بایستی حداقل یک نتیجه به عنوان خروجی تولیدکند؛
قطعیت: دستورهای الگوریتم باید با زبانی دقیق، و بیابهام بیان شوند. هر دستورالعمل نیز باید انجامپذیر باشد. دستورهایی نظیر «مقدار ۶ یا ۷ را به x اضافه کنید» یا «حاصل تقسیم پنج بر صفر را محاسبه کنید» مجاز نیستند؛ چراکه در مورد مثال اول، معلوم نیست که بالاخره چه عددی باید انتخاب شود، و در خصوص مثال دوم هم تقسیم بر صفر در ریاضیات تعریف نشدهاست.
محدودیت: الگوریتم باید دارای شروع و پایان مشخصی باشد، به نحوی که اگر دستورهای آن را دنبال کنیم، برای تمامی حالات، الگوریتم پس از طی مراحل متناهی خاتمه یابد. به علاوه، زمان لازم برای خاتمه الگوریتم هم باید به گونهای معقول، کوتاه باشد.
ریشه واژهٔ الگوریتم
واژه الگوریتم از نام ریاضیدان و ستارهشناس و جغرافیدان ایرانی، ابوجعفر محمد بن موسی خوارزمی (الخوارزمی)، گرفته شده است، که در خوارزم زاده شد و در دانشگاه «بیت الحکمه» بغداد به اوج شهرت رسید. خوارزم یکی از شهرهای«ایران بزرگ» بود، که امروزه در ازبکستان واقع شده است و خیوه نام دارد. رسالهای که خوارزمی در قرن ۹ میلادیبه عربی نگاشته بود، در قرن ۱۲به لاتین با نام "Algoritmi denumero Indorum" ترجمه شد؛ یعنی«کتاب الگوریتمی» در مورد اعداد هندی"، که «الگوریتمی» نام الخوارزمی بود که مترجم در تبدیل به لاتین نام وی را جلوی نام اصلی کتاب (در مورد اعداد هندی) آورده بود. در قرن ۱۳ میلادی واژه الگوریسموس(algorismus) به معنای«سیستم شمارش عربی (دهدهی)» (یعنی اعداد ۱تا ۹به علاوه صفر، و نیز مفهوم اعشار) بود؛ که هنوز هم یکی از معانی واژه الگوریسم(algorism) است.
مفهوم الگوریتم
مفهوم الگوریتم را معمولاً با تشبیه به دستور آشپزی توضیح میدهند. مثلاً اگر بخواهیم آبگوشت درست کنیم (عمل مورد نظر) با فرض اینکه موادخام را داریم (حالت اولیه) مراحل مشخصی را باید طبق دستور آشپزی طی کنیم (دستورالعملها)تا به آبگوشت آماده (حالت پایانی) برسیم.
الگوریتم گاه دارای مراحلی است که تکرار میشود (درمثال آبگوشت مثلاً چند بار باید نمک زد یا آب اضافه کرد) و یا در مرحلهای نیازمندتصمیمگیری است (اگر نمک کافی است دیگر نمک نمیزنیم، اگر کافی نیست نمک میزنیم).
اگر الگوریتم برای عمل مورد نظر مناسب نباشد و یا غلط باشد به نتیجه مورد نظر نمیرسیم. مثلاً اگر الگوریتم آبگوشت را با مواد اولیه کباب انجام دهیم واضح است که به آبگوشت نمیرسیم.
باید بدانیم برای هر الگوریتم تعریف متغیرها و طراحی مرحله به مرحله بسیار مهم است. زیرا الگوریتم باید بداند بر روی چه متغیرهایی، چه اعمالی را انجام دهد و نتیجه را در غالب چه متغیرها یا پارامترهایی نشان دهد.
نقش الگوریتمها در علوم رایانه:
در علوم رایانه، یک الگوریتم را یک روال محاسباتی خوشتعریف میدانند، که مقدار یا مجموعهای از مقادیر را به عنوان ورودی (Input) دریافت کرده و پس از طی چند گام محاسباتی، ورودی را به خروجی (Output) تبدیلمیکند. بجز این، الگوریتم را ابزاری برای حل مسائل نیز تعریف کردهاند. ساخت و طراحی الگوریتم مناسب در مرکز فعالیتهای برنامهسازی رایانه قرار دارد. یک برنامه رایانهای،بیان یک یا چند الگوریتم با یک زبان برنامهنویسی است.
مقدمهای بر تحلیل الگوریتم:
معمولاً برای حل یک مسئله، روشها و الگوریتمهای گوناگونی وجود دارند؛ یک الگوریتم ممکن است عمل مورد نظر را با دستورهای مختلف در مدت زمان ویا کار کمتر یا بیشتری نسبت به الگوریتم دیگر انجام دهد. به همین دلیل، انتخاب الگوریتم مناسب و کارا اهمیت زیادی در موفق بودن و کارایی برنامه رایانهای دارد.
الگوریتمهابه عنوان یک فناوری مطرح هستند و دانشمندان آنها را طراحی، تحلیل، و مطالعه میکنند.مطالعه الگوریتمها زمینههای متعددی را در بر میگیرد. در زیر به چند نمونه اشاره میکنیم که میتوان آنها را چرخه حیات یک الگوریتم نامید.
الف) طراحی الگوریتمها:روشهای مختلفی برای طراحی الگوریتمهاوجود دارد که عبارتند از:روشهای تقسیم و غلبه، روشهای حریصانه، روشهای برنامه نویسی پویا، روشهای پسگرد و روشهای انشعاب و تحدید.
ب) معتبر سازی یا اثبات درستی الگوریتمها:بعد از طراحی باید اثبات شود که الگوریتم مزبور درست است. الگوریتمی درست است که به ازای هر ورودی مناسب خروجی صحیحی بدهد. اثبات درستی الگوریتمها به اثبات قضایا در ریاضی میماندو مرحله بسیار مهمی در زمینه مطالعه الگوریتمها است
ج) تحلیل الگوریتمها (تحلیل مقدم، ارزیابی کارایی الگوریتمها):یک الگوریتم در زمان اجرا از cpuی رایانه برای اجرای دستورالعملها و از حافظه برای ذخیرهسازی برنامه و دادهها استفاده میکند؛ تحلیل یک الگوریتم مشخص میکند که الگوریتم در زمان اجرا چه مدت زمان از cpuبرای اجرای دستورالعمل (پیچیدگی زمانی) و چه مقدار ازحافظه (چه اصلی و چه جانبی) برای ذخیرهسازی برنامه و دادهها (پیچیدگی فضایی) نیازدارد.
د) پیادهسازی الگوریتمها:پیادهسازی یک الگوریتم نوشتن آن به زبان برنامه نویسی خاص است که معمولا بعد از تحلیل مقدم آن صورت میگیرد و نام برنامه به آن اطلاق میشود.
ه) تست برنامه:تست یک برنامه شامل۱:اشکال زدایی و۲:تحلیل موخر (اندازه گیری کارآیی) است.
عناوین زیر، نمونهای از الگوریتمهایی هستند که در علوم حوزوی، نقش کلیدی و حیاتی دارند:
- الگوریتم کلمهشناسی
- الگوریتم جملهشناسی،
- الگوریتم سیاقشناسی و قرینهیابی
- الگوریتم تعریف موجّه
- الگوریتم استدلال برهانی
- الگوریتم کشف مغالطات
- الگوریتم تعیین وظیفه مکلف
- الگوریتم مسالهشناسی و موضوعشناسی
- الگوریتم جستجوی ادله
- الگوریتم اجتهاد
- الگوریتم تفسیر
- الگوریتم فقهالحدیث
- الگوریتم سندشناسی
- الگوریتم جمع دلالی
- الگوریتم تنقیح مناط
- الگوریتم ارزیابی واقعه تاریخی
- الگوریتم تحلیل مفهومی
فلوچارت روش تحقیق مدلسازانه
فرآیند طلاق:
پاورقی۱:
- هورویتز، الیس. طراحی الگوریتمها، چاپ دوم (مترجم:علیخانزاده، امیر). مشهد: پرتونگار، ۱۳۸۵. ISBN 964-6735-12-6
- منابع برای مطالعه بیشتر[ویرایش]
- طراحی الگوریتمها - تالیف دکتر محمود نقیبزاده
- شیرعلی شهرضا و شیرعلی شهرضا - آموزش سریع