نحوه ارائه راه حل ها: تکنیک ها در مسائل برنامه نویسی

زمانی که با دانش آموزان کار می کنم، اغلب با این موقعیت مواجه می شوم که اگر مسئله ای در نگاه اول برای دانش آموز واضح به نظر نمی رسد، باعث می شود نتوانند آن را حل کنند. در واقع، شما همیشه در مورد روش ها و تکنیک های خاص می شنوید. اما شما در مورد چگونگی فکر کردن برای به کار بردن آنها نمی شنوید. در این یادداشت سعی می کنم تجربیات خود را از حل مسائل برنامه نویسی خلاصه کنم. با این حال، برخی از توصیه ها برای المپیادهای ریاضی و اولین قدم های شما در تحقیقات دانشگاهی نیز قابل اجرا خواهد بود.بنابراین شما یک مسئله را خوانده اید و نمی دانید چگونه آن را حل کنید. تکنیک های زیر را امتحان کنید، برخی از آنها اغلب می توانند مفید باشند.تکنیک 1: "یادآوری کامل"سعی کنید مسیله مشابهی را که باید حل می کردید به خاطر بسپارید. بسیاری از مسیله ها یک ایده کاملاً جدید ندارند. بنابراین احتمالاً می توانید از تجربه خود در حل یک مسیله مشابه برای حل این مسیله استفاده کنید.تکنیک 2: "از خاص به عمومی"فرض کنید راه حل مسیله را پیدا کرده اید (عجله کنید!). بیایید یک مورد خاص از یک مسیله را در نظر بگیریم. البته می توانید الگوریتم/راه حل را روی آن اعمال کنید. به همین دلیل است که برای حل یک مسیله کلی، باید تمام موارد خاص آن را حل کنید. سعی کنید چند مورد خاص (یا چندگانه) را حل کنید و سپس سعی کنید آنها را به حل مشکل اصلی تعمیم دهید. چنین موارد خاصی را می توان به عنوان ساده سازی مسئله در نظر گرفت، یعنی می توان با این اصل استدلال کرد: «اگر ندانم یک مسئله پیچیده را چگونه حل کنم، فکر می کنم آن را ساده می کنم و راه حل های ساده شده را پیدا می کنم. نسخه".نمونه های رایج ساده سازی ها (موارد خاص):شما برای یک درخت مسیله دارید. نوع آن را در نظر بگیرید که در آن درخت به یک مسیر منحط می شود.مشکل وزن دارد؟ گونه‌ای را در نظر بگیرید که در آن همه وزن‌ها برابر با یک یا یک عدد دلخواه هستند، یا فقط دو وزن متمایز وجود دارد (و غیره).توجه داشته باشید که حل یک مورد خاص تقریباً همیشه ساده تر از حل یک مورد عمومی نیست، بنابراین باید سعی کنید راه حلی بیابید که تا حد امکان آسان و مؤثر باشد.تکنیک 3: "فرضیه جسورانه"از طرح فرضیه های جسورانه ای که به نظر شما درست به نظر می رسد خجالت نکشید. شما مجبور نیستید راه حل های خود را در طول مسابقات ثابت کنید، به شهود درونی خود ضربه بزنید. وقتی فرضیه خود را مطرح کردید، سعی کنید آن را ثابت کنید - ممکن است به خوبی کار کند یا به شما ایده دهد که چگونه آن را رد کنید. فرضیه را بر روی مجموعه وسیعی از آزمون‌ها آزمایش کنید، زیرا اتلاف وقت برای اجرای یک راه‌حل مبتنی بر یک فرضیه دردناک است و تنها پس از آن فرضیه را رد کنید.مثال ها:راه حل همیشه وجود دارد؛مورد تعداد ایالت ها زیاد نیست.تکنیک 4: "برای حل یک مسیله ، باید مانند یک مسیله فکر کنید"من جدی می گویم، خود را به جای شخصیت مسیله قرار دهید، تصور کنید که این وظیفه شماست که مجموعه های ورودی را مدیریت کنید. به این فکر کنید که در این مورد چگونه عمل می کنید. سعی کنید چند نمونه کوچک را به تنهایی پردازش کنید. اگر مشکل از یک بازی است، آن را بازی کنید. گاهی اوقات سعی می کنم برای درک بهتر یک فرآیند یا مدل را تجسم کنم. این کمی شبیه این است که چگونه فیلم ها طرز فکر دانشمندان را نشان می دهند. سعی کنید در تصاویر فکر کنید، راه حل را تصور کنید، آن را در حال آشکار شدن ببینید.تکنیک 5: "با هم فکر کنید"این تکنیک فقط برای مسابقات تیمی کاربرد دارد. در یک گروه دو یا سه نفره شروع به گفتن برخی از حقایق روشن در مورد مشکل می کنند. به عنوان مثال: "اگر n زوج باشد، پاسخ همیشه 0 است"، "اگر n اول باشد، پس جواب باید به این صورت باشد" و غیره. گاهی اوقات هم تیمی های شما ایده هایی را انتخاب می کنند و آنها را توسعه می دهند و این استراتژی می تواند شما را از مشکل عبور دهد.تکنیک 6: "یک روش را انتخاب کنید"سعی کنید از الگوریتم‌ها یا روش‌های رایج استفاده کنید که می‌توانند به هر نحوی برای مشکل اعمال شوند. دیدن محدودیت های مشکل مفید است. پس از انتخاب یک روش، سعی کنید روی راه حل فکر کنید با این فرض که مشکل با استفاده از این روش حل شده است. استدلال شما باید تا حدودی اینگونه باشد: "بیایید فرض کنیم که مشکل با تقسیم و غلبه حل می شود. سپس اجازه دهید این مشکل را به صورت بازگشتی برای نیمه چپ و راست حل کنیم. اکنون تنها چیزی که باقی مانده است یافتن راهی برای متحد کردن این راه حل ها است. من. تعجب می کنم که چگونه می توانیم این کار را انجام دهیم..."تکنیک 7: "چاپ و نگاه کنید"اغلب (به ویژه در مسائل با ورودی کوچک: یک یا دو عدد) الگوهایی در ترکیب راه حل وجود دارد. برای دیدن یک الگو، گاهی اوقات نیاز دارید که روش ساده‌ای برای حل یک مسئله بنویسید، برای تعداد زیادی تست در محدوده‌های بزرگ پاسخ ایجاد کنید و برای مدتی روی پاسخ‌های خود تعمق کنید. برای اینکه کامپیوتر را مشغول نکنید، یک استراتژی خوب این است که نتایج به دست آمده را چاپ کنید و این بار روی نسخه های چاپی مدیتیشن کنید.گاهی اوقات ایده خوبی است که نه تنها پاسخ، بلکه برخی اطلاعات اضافی، مانند نحوه به دست آوردن یک راه حل، چاپ کنید.تکنیک 8: "گوگل"این تکنیک تنها در صورتی قابل استفاده است که قوانین دور/مسابقه اجازه دهد. اگر مشکل مربوط به دنباله هاست، می توانید در سایت https://oeis.org/ به دنبال راه حل باشید (به تکنیک 7 مراجعه کنید). این به درک مدل رسمی مسئله و جستجوی اصطلاحات ریاضی صحیح در گوگل کمک می کند.