مهندسی مسائل پیچیده؛
درسی از تجزیه و تحلیل الگوریتم‌ها
یکی از لذت‌های مطالعه دروس دانشگاهی، برداشت‌های کاربردی از مفاهیم پایه‌ای در فضای غیرآکادمیک است و با کمی درنگ می‌توان برای یک مفهوم پایه‌ای در مهندسی، پیامی در زندگی روزمره یافت. محتوای بسیاری از دروس دانشگاهی که دانشجویان با زحمت فرامی‌گیرند، به‌زودی و پس از فراغت از تحصیل، به‌دلیل عدم تکرار فراموش می‌شوند. اما مفاهیم پایه‌ای که درخلال این مطالعات در ذهن می‌نشینند، ممکن است یک عمر در حافظه باقی بمانند و حتی در زندگی روزمره کاربرد پیدا کنند.

درجه پیچیدگی الگوریتم‌ها

درس ریاضی محور «تجزیه و تحلیل الگوریتم‌ها» یکی از دروس پایه و بسیار مهم و در عین حال دشوار در رشته کامپیوتر است. بسیاری از اطلاعاتی که دانشجو درخلال فراگیری این درس به دست می‌آورد، بعداً فراموش خواهد شد. مگر اینکه شغل و حرفه او به این اطلاعات نیاز داشته باشد.
اما بعضی از مفاهیم پایه که در خلال این درس منتقل می‌شوند، بسیار جالب هستند و به بینش انسان در طول زندگی کمک می‌کنند. از آن جمله مفهوم «درجه پیچیدگی» الگوریتم‌ها که Order of Magnitude نیز نامیده می‌شود، اصل مهمی را در حوزه مهندسی دربر دارد. به طور خلاصه، تکنیک‌های این متد کمک می‌کند، بر اساس یکسری محاسبات ریاضی، یک الگوریتم را از نظر پیچیدگی در گروه‌های متفاوتی دسته‌بندی کنیم.
مثلاً بعضی الگوریتم‌ها در گروه (O(n قرار می‌گیرند، یعنی مدت زمانی که این الگوریتم‌ها باید صرف کنند تا به جواب برسند با مقدار ورودیشان تناسب دارد. اما گروه دیگری (O(n^2 هستند. یعنی هرچه ورودی بزرگ‌تر باشد، زمان تولید خروجی به‌صورت مربعی بالا می‌رود.
مثلاً الگوریتم «جست‌وجوی ترتیبی» در گروه اول قرار دارد، در حالی که «الگوریتم مرتب‌سازی انتخابی» از نوع دوم است. خالی از لطف نیست ببینیم این بحث خاص و مهندسی چه کاربردی می‌تواند در زندگی روزمره و درک مسائل فنی جامعه داشته باشد.

حل مسائل پیچیده صنعت و جامعه

این سؤال برای اغلب ما پرسشی آشنا است: «چرا با وجود داشتن مهندسان باهوش، ایرانیان در تولید انبوه وسایلی مانند اتومبیل و کامپیوتر نمی‌توانند در حد کشورهای صنعتی تراز اول ظاهر شوند؟» چه چیزی متفاوت است؟ بعضی افراد طبیعتاً مشکلاتی از قبیل نبود زیرساخت‌های اقتصادی و صنعتی و دلایل تکنیکی از این دست را برمی‌شمارند. این دلایل البته درست هستند، ولی شاید دلایل اصلی و مادر نباشند. چیزی ماورای این دلایل عمل می‌کند که موانع اقتصادی و صنعتی را نیز پدید می‌آورد.
گروهی از این دلایل ماورایی، دلایل فرهنگی هستند. اما موضوعی که ارزش تأمل دارد، لحظه یا مقطعی است که فرهنگ مناسب یا تفکر صحیح مهندسی وارد ذهن افراد می‌شود. در تمام کشورها هم نهاد خانواده و هم نهاد آموزش عمومی در انتقال فرهنگ صحیح زیستن در جامعه مدرن نقش بسزایی دارند. اما در بعضی زمینه‌ها، مانند حوزه مهندسی، نقش دانشگاه ممتاز است. درک مفهوم درجه پیچیدگی در درس الگوریتم‌ها یکی از مواردی است که دانشگاه می‌تواند طرز فکر و فرهنگ مهندسی را در آدم‌ها ارتقا دهد. 
نکته‌ای که از آشنایی با موضوع درجه پیچیدگی الگوریتم‌ها می‌آموزیم آن است که حل مسائل پیچیده جامعه صرفاً با افزایش کمی منابع حل نمی‌شوند. مثلاً اگر جمعیت دانش‌آموزان یک شهر دو برابر شود، صرفاً دو برابر کردن تعداد مدارس برای روبه‌رو شدن با این چالش کافی نیست. انسان‌ها با یکدیگر تعامل دارند و تعامل دانش‌آموزان و مربیان در فضای مدرسه موضوع پیچیده‌ای است و مشکلات به‌صورت تصاعدی پیچیده‌تر می‌شود. 

مسئله «کار تیمی»

یک نمونه بارز از تفاوت فرهنگی ملت‌ها در کار مهندسی را می‌توان در «کار تیمی» مشاهده کرد. اغلب ما با این واقعیت ناخوشایند آشنا هستیم که در کار تیمی ـ خواه در ورزش خواه در تولید و صنعت ـ به‌خوبی کشورهای تراز اول صنعتی نیستیم. اما چرا اینطور است و راه حل چیست؟ آنچه از تجربه کار در محیط شرکت‌های فنی آموخته‌ام نشان می‌دهد بسیاری از شرکت‌ها توجیه نیستند که اضافه کردن تعداد کارمندان به‌تنهایی برای پاسخ‌گویی به افزایش حجم کار شرکت کافی نیست. اگر کارمندان نتوانند با یکدیگر همکاری کنند، مشکل حل نمی‌شود بلکه بیشتر هم می‌شود. علت این است که مسئله «کار تیمی» ـ به تعبیر علم الگوریتم ـ یک مسئله (O(n نیست. خروجی کار تیمی با جمع جبری کار تک تک افراد تیم برابر نیست. یک تیم می‌تواند آنقدر بد کار کند که افراد یکدیگر را خنثی کنند و خروجی آن تیم صفر شود. نه اینکه افراد این تیم بد باشند. شاید حتی خیلی هم باهوش باشند. اما روشی که یک تیم نامؤثر برای همکاری به کار می‌برد، ساده‌انگارانه است و به همین دلیل درجه پیچیدگی خیلی بالایی دارد. برای موفقیت یک تیم به روش بهینه‌ای نیاز است که با پیچیدگی فضای تیمی مقابله کند نه اینکه آن را حتی بیشتر کند. این روش‌های مؤثر وجود دارند و می‌شود آن‌ها را به خدمت گرفت. مثلاً در کار تیمی در حوزه مهندسی نرم‌افزار متد Agile کاملاً شناخته شده است. اما شرکت‌های بسیاری را می‌توان دید که این متد یا مشابه آن را به کار می‌بندند و باز هم ناموفق هستند. علت این است که مدیران این شرکت‌ها به این متدها قلباً اعتقاد ندارند، بلکه صرفاً به‌صورت مکانیکی آن‌ها را به کار می‌گیرند. این یک موضوع فرهنگی است.

مسئله پیچیده «رانندگان زرنگ»

شاید خالی از لطف نباشد مثالی بزنم از مواقعی که عدم اعتقاد قلبی آدم‌ها به درجه پیچیدگی مسائل خودش را نشان می‌دهد. در ایران، روزهای تعطیل رسمی ترافیک جاده‌های سراسر کشور واقعاً تماشایی است. گاهی ترافیک بسیار بسیار سنگین می‌شود، در حدی که رانندگان خیلی از خودروها صبرشان طاق می‌شود و از مسیر استاندارد جاده به بیرون می‌زنند و از هر مسیر جانبی که به فکرشان می‌رسد ـ از حریم خاکی کنار آسفالت گرفته تا فواصل خالی میان بعضی از ماشین‌های دیگر ـ به آب و آتش می‌زنند بلکه از بقیه خودروها جلو بیافتند. 
وقتی مقداری جلو می‌روید، معمولاً این صحنه را می‌بینید: جایی از جاده (مثل یک تونل) باریک شده و غیرممکن است بیش از یک ماشین بتواند از آن قسمت عبور کند؛ بنابراین، تمام رانندگان «زرنگ» که از طریق مسیر غیراستاندارد خودشان را به آن نقطه رسانده‌اند ناگزیرند یکی یکی از آنجا عبور کنند، غافل از اینکه همین موضوع خودش ترافیک را دوچندان کرده به صورتی که اساساً اگر رانندگانی که قبل از آن‌ها چنین کرده بودند، از مسیر خارج نمی‌شدند اصولاً این رانندگان «زرنگ» بعدی هم به این دام گرفتار نمی‌شدند و اصلاً ترافیک اینقدر سنگین نمی‌شد. اینجا عمق بی‌باوری به قوانین رانندگی را می‌توان مشاهده کرد. در این جاده و این لحظه کمتر کسی باور می‌کند ترافیک مسئله‌ای است که یک راننده بتواند به‌صورت شخصی آن را حل کند. اصلاً مهم نیست شما چقدر زرنگ هستید. درجه پیچیدگی مسئله ترافیک به گونه‌ای است که این راه‌ حل‌های شخصی ساده‌انگارانه هستند. به همین دلیل است که در روزهای تعطیل ترافیک برخی جاده‌ها آنقدر سنگین می‌شود که همه رانندگان از زرنگ تا غیرزرنگ یک اندازه ضرر می‌کنند.
در علم مهندسی ترافیک همه این رویدادهای ترافیکی را می‌توان به ریاضی درآورد و از الگوریتم‌های کامپیوتری برای شبیه‌سازی ترافیک و طراحی مهندسی خیابان‌ها و اعمال قوانین رانندگی استفاده کرد. با وجود این، اعتقاد قلبی به‌درستی این راه حل‌ها حتی از خود آن‌ها هم مهم‌تر است. ریاضیات «درجه پیچیدگی» الگوریتم‌ها ثابت می‌کند هرچقدر هم که اصرار کنیم، بعضی راه حل‌ها هیچ‌وقت به نتیجه دلخواه نمی‌رسند و حسن نیت و زرنگی و پشتکار بیشتر باعث افزایش کارایی آن‌ها نمی‌شود.

برچسب: