با هميار اي تي پيشنياز مهم برنامهنويسي را بياموزيد
اگر به خوبي با مفهوم الگوريتمهاي برنامهنويسي آشنا باشيد، ميتوانيد بهسادگي منطق برنامهي خود را نوشته و آن را به كدهاي برنامهنويسي تبديل كنيد، در اين نوشته، با زيربناي زبانهاي برنامهنويسي، يعني الگوريتمها آشنا ميشويم.
اگر بخواهيم براساس آن چه كه در مقالات مختلف آمده است، الگوريتم برنامهنويسي را تعريف كنيم، بايد بگوييم الگوريتم مجموعهاي از دستورالعملهاي مختلف است كه داراي ترتيب خاصي بوده و منجر به حل مسائل پيشبيني شده ميشوند. به بيان سادهتر الگوريتم يك روش مرحلهاي براي حل مسائل است؛ بهعنوان مثال محاسبه معدل دانشگاه نيز نوعي الگوريتم محسوب ميشود.
اما اگر بخواهيم اين موضوع را به زبان برنامهنويسها تعريف كنيم، بايد گفت بعد از تعيين اهداف و وظايف نرمافزار و تشخيص اين مسئله كه نرمافزار قرار است چه خدماتي به متخصصان ارائه دهد، بايد مراحلي براي آن تعريف شوند؛ در نهايت انجام اين مراحل منجر خواهند شد كه آن هدف نهايي انجام شود. به اين مراحل كه نحوه عملكرد نرمافزار يا سايت را مشخص ميكنند، الگوريتم ميگوييم. به عبارت ديگر الگوريتم همان راهكارهاي حل مسائل در برنامهنويسي است.
بنابراين پيش از هر چيز بايد آگاهي داشته باشيم كه نرمافزار ما قرار است چه كاري را انجام دهد. سپس بخش دشوار و تخصصي آغاز ميشود كه بايد به سيستم دستوراتي بدهيم كه كارها براساس آن انجام شوند. مطمئنا هر چقدر وظيفه خواسته شده از يك نرمافزار پيچيدهتر و دشوارتر باشد، تعداد خطوط كدهاي نوشته شده نيز بيشتر خواهند بود؛ در نتيجه الگوريتم پيچيدهتري ايجاد خواهد شد.
براي درك بيشتر قصد داريم يك نمونه الگوريتم بسيار ساده را فرض كنيم كه بايد حاصل جمع دو عدد را چاپ كند؛ بنابراين الگوريتم به شكل زير خواهد بود:
- شروع الگوريتم
- دريافت عدد اول
- دريافت عدد دوم
- جمع عدد اول و دوم
- چاپ حاصل جمع
- پايان الگوريتم
البته اين يك مثال بسيار ساده از الگوريتمهاي برنامهنويسي بود، همانطور كه گفتيم، هرچه يك برنامه پيچيدهتر باشد، الگوريتم پيچيدهتري نيز خواهد داشت، اگر علاقهمنديد با مثالهاي حرفهايتري در خصوص الگوريتمهاي برنامهنويسي آشنا شويد، كافي است عبارت «مثال الگوريتم» را در گوگل جستوجو كرده و وارد وبسايت «هميار آيتي» شويد.
چه مسائلي در الگوريتم رعايت ميشوند
تمامي الگوريتمها با هر هدفي، داراي برخي ويژگيها و خصوصيات كلي هستند كه درادامه قصد داريم به توضيح آنها بپردازيم.
ورودي
برخي الگوريتمها بايد بهعنوان ورودي چند پارامتر را بپذيرند، البته اين مورد درباره تمام آنها صدق نميكند.
خروجي
الگوريتمها بايد بهعنوان خروجي يا همان نتيجه عمليات، حداقل يك كميت ايجاد كنند.
قطعيت
دستورها الگوريتم بايد به شكلي دقيق و بدون ابهام نوشته شوند تا سيستم دچار اشكال نشود. در واقع هر دستورالعملي كه صادر ميشود بايد قابليت اجرا داشته باشد. بهعنوان مثال دستوري مانند «عدد ۸ را به X اضافه كنيد» كاملا مبهم است زيرا مشخص نيست كه در نهايت چه عددي بايد به ۸ اضافه شود.
محدوديت
هر الگوريتمي بايد يك شروع و پايان داشته باشد، بهطوريكه با دنبال كردن دستورها آن براي هر حالتي و اتمام دستورها، نتيجه كار مشخص شود. همچنين براي پايان الگوريتم بايد يك زمان كوتاه و منطقي در انديشه متخصصين گرفت.
حال كه با خصوصيات الگوريتم آشنا شديد، بهتر است اطلاعاتي نيز درباره ساختار منطقهاي آن داشته باشيد كه درادامه مطلب آن را بيان ميكنيم.
- دنبالهاي: در اين گونه ساختار، تمام مراحل رسيدن به نتيجه مشخص شدهاند.
- شاخهاي: چنين ساختاري براساس قانون «اگر» عمل ميكند؛ به عبارت ديگر نتيجه نهايي به شروط مشخصي ارتباط دارد، بهعنوان مثال زوج و فرد بودن عدد ميتواند نوعي شرط محسوب شود.
- حلقهاي: نتيجه نهايي اين الگوريتم به چند شرط مشخص بستگي دارد و پس از اتمام شرط، برنامه به پايان ميرسد كه اين يعني ساختاري تكراري.
صفر تا صد اجراي الگوريتم
در اين بخش قصد داريم با چرخه عمر الگوريتم از طراحي تا توليد آن آشنا شويم.
- طراحي: در ابتدا با توجه به نياز و اهداف سيستم، بايد الگوريتم طراحي شود كه اين كار داراي روشهاي مختلفي است.
- اثبات درستي: حال بايد مشخص شود كه آيا الگوريتم طراحي شده عملكرد درستي داريد يا خير. بنابراين بايد به ازاي ورودي درست، خروجي سالم و پيشبيني شدهاي بدهد.
- تحليل: منظور از تحليل اين است كه الگوريتم تا چه اندازه داراي پيچيدگي زماني و مكاني است.
- پيادهسازي: حال بايد با يك زبان برنامهنويسي مشخص، كدهاي الگوريتم نوشته شوند.
- تست برنامه: مرحله نهايي خود شامل دو مرحله ميشود كه يكي مربوط به رفع اشكالات موجود و ديگري براي تشخيص ميزان كارايي هستند.
برنامهنويس موفق بايد انواع الگوريتمها را بشناسد
با توجه به مطالب گفته شده، اكنون درك درستي از چيستي الگوريتم داريد و ميدانيد به چه شكل عمل ميكنند. حال قصد داريم انواع الگوريتمها را از انديشه متخصصين نوع مسئله معرفي كنيم.
الگوريتمهاي بازگشتي
در الگوريتمهاي بازگشتي، اجراي برخي كدها باعث فراخواني همان الگوريتم خواهد شد. روش كار اين الگوريتم به شرح زير است:
- در قسمت اول يا حالت پايه، ديگر فراخواندن تابع به شكل بازگشتي انجام نميشود و مقدار تابع را از همان اول
- در قسمت دوم، يكسري دستورالعملها اعمل ميشوند كه به كوچك شدن مسئله كمك ميكنند و در اين حالت تابع را با مقدار جديدي فرا ميخوانيم
- در قسمت سوم، بخشي از تابع را با مقداري جديد فرا ميخوانيم
بهتر است يك مثال از جهان واقعي براي شما بياوريم تا بهتر اين الگوريتم را درك كنيد. فرض كنيد ميخواهيم يك الگوريتم براي رسيدن به منزل خود داشته باشيم. بنابراين حالت پايه آن به اين صورت خواهد بود كه اگر در خانه باشيم، كاري انجام نخواهيم داد. قسمت دوم آن بايد به ساده شدن مسئله كمك كند، يعي اگر خارج از منزل هستيم بايد يك گام به سمت خانه برداريم تا فاصله كمتر شده و مسئله قبلي به يك مسئله مشابه كوچكتر تبديل شود. بخش سوم نيز همان بازگشت به خانه با مقدار كوچكتر و جديد خواهد بود.
الگوريتم تقسيم و غلبه
اين الگوريتم داراي يك روش بالا به پايين است كه در آن يك مسئله بزرگ به چند زير مسئله كوچكتر تقسيم ميشوند. پس از حل اين زيرمسئلهها و تركيب شدن با يكديگر، به پاسخ مسئله بزرگ خواهيد رسيد. معمولا اين مسئله بزرگ به چند الگوريتم بازگشتي تقسيم ميشود.
الگوريتم برنامهريزي پويا
چنين الگوريتمهاي معمولا براي حل مسائل بهيه سازي به كار ميرود كه در آنها يك دنباله از چند انتخاب صورت گرفته تا به جواب برسند. در واقع اين الگوريتم برخلاف الگوريتم تقسيم و غلبه، رويكردي پايين به بالا دارد و از پيچيدگي بيشتري برخوردار است. همچنين عملكرد بسيار بهتري داشته و داراي قابليت ذخيرهسازي حل زيرمسئلهها را دارد. اين كار كمك ميكند تا در صورت مواجه شدن با موارد مشابه، ديگر نيازي به حل مجدد نباشد. معمولا از اين الگوريتم در مواقعي استفاده ميشود كه زير مسئلهها داراي نوعي وابستگي با يكديگر باشند.
الگوريتم حريصانه
اين الگوريتم در بهينهسازي حل مسائل متخصصد دارد. به عبارتي ديگر، اين الگوريتم با استفاده از تابع Selection Cheek از ميان مجموع وروديها، بهترين انتخاب را انجام ميدهد. سپس با استفاده از تابع Feasibility cheek مشخص ميشود كه آيا استفاده از اين انتخاب ممكن خواهد بود يا خير. در نهايت اين موضوع مطالعه ميشود كه آيا انتخاب صورت گرفته منجر به حل مسائل خواهد شد؟ اين تابع تا زمانيكه به جواب برسيد يا انتخابي وجود نداشته باشد، به كار خود ادامه خواهد داد.
الگوريتم بروت فورس
اين الگوريتم به مطالعه تمام راهحلهاي احتمالي ميپردارد تا در نهايت بهينهترين پاسخ را پيدا كند. منظور از بهينهترين پاسخ در الگوريتم بروت فورس، پاسخي است كه بتواند شرط مسئله را برآورده كند. به همين دليل اين الگوريتم بيشتر در مسائل كوچك مورد استفاده قرار ميگيرد. شايد بهترين مثال براي اين الگوريتم، رمزگشايي باشد كه با مطالعه تمام احتمالات و كليدها، بهدنبال جواب ميگردد. همچنين از الگوريتم بروت فورس در دادهكاوي نيز استفاده ميشود.
الگوريتم عقب گرد
الگوريتم عقب گرد يا Backtrack يكي از الگوريتمهاي حل مسائل است كه تمام راهحلهاي ممكن را سنجيده و در صورت ناكارآمدي آن، به عقب بازگشته و با اصلاح خود، راههاي جديدي را تست ميكند. از اين الگوريتم زماني استفاده ميشود كه قصد داريم اولين جواب احتمالي را پيدا كنيم يا بهدنبال تمامي پاسخهاي احتمالي هستيم. حل جدول سودوكو ميتواند مثال مناسبي براي اين الگوريتم باشد.
همانطور كه در ابتداي اين مقاله نيز اشاره كرديم، آشنايي با نحوهي نوشتن الگوريتمها، شما را يك گام جلوتر از سايرين نگه ميدارد، پس اگر علاقهمنديد بيشتر با مفاهيم مهم برنامهنويسي و ساير يادگيريهاي فناوري اطلاعات و كسبوكار آشنا شويد، همين حالا سري به وبسايت هميار آيتي بزنيد، اگر دانشجوي رشتهي آيتي يا كامپيوتر هستيد يا به هر شكلي به فناوري اطلاعات علاقهمنديد، اين وبسايت جاي خوبي براي افزايش دانش شما است.
هم انديشي ها