یک بار وقتی نوجوان بودم برای تهیهی کتابی از نیشابور به مشهد رفتم. آدرس یک کتابفروشی را از شخصی گرفته بودم و احتمال میدادم که آن کتابفروشی کتابی که میخواهم را داشته باشد. اما آنموقع خبری از گوشیهای هوشمند و گوگل مپ و جی پی اس و این چیزها نبود. من فقط آدرس را در دست داشتم و به مشهد رفتم. این را هم بگویم که من با اینکه بارها به مشهد رفتهام، ولی اصلا هیچ آدرسی را در این شهر بلد نیستم و حس میکنم شهر بسیار پیچیدهایست. به خصوص از این جهت که شمال شهرش، جنوب جغرافیاییست و جنوب شهرش شمال جغرافیایی. یعنی وقتی کسی به شما میگوید صد متر برو بالاتر، منظورش میتواند به سمت جنوب باشد.
به هر حال من که از آدرس سر در نمیآوردم، بدون اینکه نقشهای تهیه کنم و از روی آن نگاه کنم، کنار خیابان ایستادم و تاکسی گرفتم. راننده هم که آدم حقهبازی بود، از روی لهجهام فهمید که اهل مشهد نیستم و گفت که این آدرس خیلی از اینجا دور است، اگر میخواهی مسافر دیگر هم میزنم تا کرایهات زیاد نشود. من هم که از همه جا بیخبر بودم و فکر میکردم اکثر انسانها خوشنیت هستند، گفتم عجب رانندهی مهربانی و سوار شدم. مسیری که اگر پیاده میرفتم بیست دقیقهای میرسیدم (البته این را بعدا فهمیدم)، این راننده یک ساعت و نیم توی خیابانهای مشهد من را میچرخاند و چپ و راست، مسافر هم میزد. دست آخر بعد از کلی چرخیدن توی خیابانهای مشهد، منت هم گذاشت که من سر اینکه تو را برسانم اینقدر مسیرم دور شده و دست آخر کرایهی خوبی هم از من گرفت.
الان که به آن اتفاق فکر میکنم، میبینم که آن راننده در ذهن خودش در حال حل یکی از مسائل مهم و دشوار ریاضیات بوده که به آن مسالهی طولانیترین مسیر یا Longest Path Problem میگویند. این راننده اگر میخواست مسالهی مقابل آن یعنی مسالهی کوتاهترین مسیر یا Shortest Path Problem را حل کند، کارش خیلی راحت بود. او میدانست که این نقطهای که من را سوار کرده کجاست و مقصد را نیز میدانست و برحسب تجربه و شناختی که داشت، کوتاهترین مسیر یا تقریبا (~) کوتاهترین مسیر را توی ذهنش پیدا میکرد. اما کوتاهترین مسیر برای او عایدی زیادی نداشت. اگر طولانیترین مسیر را پیدا میکرد، میتوانست مسافر زیادی بزند و همزمان سر من هم کلاه بگذارد.
اما یک چیز را باید توی ذهنش ذخیره میکرد، او باید یادش میماند که دوبار از یک نقطه عبور نکند. چون اگر دوبار از یک نقطه عبور میکرد، من سریعا متوجه این میشدم که او دارد عمدا مسیر را طولانی میکند. تفاوت مهم این دو مساله نیز در همین است. در مسالهی کوتاهترین مسیر، شما اگر دوبار از یک نقطه عبور کنید، یعنی این مسیر کوتاهترین مسیر نبوده است. پس اصلا این قید اهمیتی ندارد و کوتاهترین مسیر در دل خودش این قید را دارد که دوبار از یک نقطه عبور نکن. اما مسالهی طولانیترین مسیر، باید به این قید احترام بگذارد که دوبار از یک نقطه عبور نکند و پیچیدگی این مساله از همینجا نشات میگیرد. اگر ما شهر مشهد را یک گراف در نظر بگیریم و هر چهار راه را یک گره و هر خیابان را یک یال فرض کنیم، گوگل مپ داخل گوشی شما، خیلی راحت در چند ثانیه برای شما (تقریبا ~) کوتاهترین مسیر بین هر دو نقطه را پیدا میکند. اما اگر بخواهید با الگوریتمی طولانیترین مسیر بین دو نقطه را پیدا کنید، با قویترین کامپیوترهای دنیا نیز، احتمالا میلیونها یا میلیاردها سال زمان نیاز داشته باشید.
به این دست مسائل در حوزهی علوم کامپیوتر مسائل NP-hard گفته میشود.
– ابا اباد