ما یک زمانی یک معلم فیزیکی در مدرسه داشتیم که خیلی روی این تاکید داشت که ما اول باید مساله را خوب بفهمیم و بعد به سراغ حل آن برویم و همیشهی خدا هم تکه کلامش این بود که “فهم السوال، نصف الجواب”. این را هم خیلی با لهجهی غلیظی میگفت و فکر میکرد که استاد عربی شده و از عربها بهتر این جمله را میخواند. بعد موقع امتحان وقتی از او سوالی میپرسیدیم، تنها کمکی که میکرد این بود که سعی میکرد مساله را دوباره برای ما توضیح دهد. اما این چندان هم درست نیست. یعنی اینکه ما مساله را خوب متوجه بشویم، هیچ تضمینی به ما نمیدهد که به نصف جواب برسیم. از طرف دیگر کسی نمرهای از بابت فهم السوال هم به ما نمیدهد. همه دنبال جوابند نه دنبال سوال.
ما در زندگیمان هم خیلی از مشکلات را میشناسیم، اما قادر به حل آنها نیستیم. اصلا خیلی از اوقات راه حل آن مشکل را هم میدانیم، اما نمیتوانیم آنقدر برای حل آن هزینه کنیم. پس باید راه حلی که پیدا میکنیم قابل اجرا هم باشد. پس نه تنها بایستی راه حل را بدانیم، بلکه باید بتوانیم راه حل را اجرا هم بکنیم. شاید آن معلم فیزیک اگر معلم ریاضیات بود آن حرف را نمیزد. اگر باور ندارید که من با یک مثال از حوزهی علوم کامپیوتر، به شما اثبات میکنم که گاهی اوقات، فهم مساله خیلی راحت است، اتفاقا اولین راه حلی هم که به ذهن ما میرسد خیلی راحت و تابلو است و شاید به ذهن یک بچه هم برسد. اما رفتن سراغ این راه حل ما را به هیچ کجا نمیرساند. یا بهتر است بگوییم میرساند اما نه خیلی راحت.
فرض کنید من یک مجموعه از اعداد طبیعی جلوی شما گذاشتهام. مثلا مجموعهی {۴،۵،۷،۹،۳} و از شما میپرسم که آیا شما میتوانید یک زیرمجموعه از اعضای این مجموعه پیدا کنید که جمع آنها عدد ۱۲ بشود؟ خب خیلی مسالهی سادهایست. شما یک نگاه سریع هم به این اعداد بیندازید، فورا متوجه میشوید که چه زیرمجموعههایی از این اعداد، جمعشان ۱۲ میشود. مثلا {۷،۵} یا مثلا {۹،۳} یا مثلا {۵،۴،۳}. البته من از شما اصلا نخواستم که این زیرمجموعهها را به من بگویید. من فقط پرسیدم که آیا چنین زیرمجموعهای وجود دارد یا نه؟ شما بسیار لطف کردید و گفتید بله وجود دارد و چند مثال هم برای من آوردید که من از این بابت از شما سپاسگزارم.
آیا فهم این مساله سخت بود؟ تصدیق میفرمایید که نه خیلی مسالهی راحتیست و مثل آب خوردن آن را حل کردید. سوال هم که خیلی ساده بود و فقط پرسیدیم که آیا چنین زیرمجموعهای وجود دارد یا نه؟ جواب هم خیلی ساده بود. شما چند بار اعداد را سریع توی ذهنتان جمع کردید و پاسخ دادید. اما اگر بخواهید با همین راه حل به سراغ مجموعهی بزرگتری بروید، مثلا مجموعهای که از ۱۰۰ عدد تشکیل شده است، برای پاسخ به همان سوال، شما بایستی ۱۰۰ ضربدر ۲ بتوان ۱۰۰ مرحله محاسبات انجام دهید. اگر تعداد اعداد مجموعهی شما n باشد و اگر شما یکی یکی بخواهید زیرمجموعههای این مجموعه را بسازید، بایستی ۲ بتوان n زیرمجموعه را چک کنید و در بدترین حالت، هر بار هم n عدد را جمع کنید.
شما مساله را میدانستید، راه حل خیلی خوب و محکمی هم در ذهنتان داشتید، اما اگر این راه حل را به سریعترین ابررایانهی دنیا یعنی فوگاکو در ژاپن بدهید، حدود ده میلیون سال طول میکشد تا با الگورتیم شما به پاسخ برسد. پس انگار که عملا جواب شما کارایی ندارد. به این مساله، مسالهی جمع زیرمجموعهها یا SSP گفته میشود. این مساله ذیل دستهی خاصی از مسائل در علوم کامپیوتر قرار میگیرد که به آنها ان پی کامل میگویند.
– ابا اباد