اَبا اِباد

پیچیدگی الگوریتم

پیچیدگی الگوریتم

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

واقعا هم وقتی آدم فکر می‌کند کارش خیلی انرژی می‌برد. شما اگر بخواهید ده کتاب را به ترتیب حرف اول عنوان آن‌ها مرتب کنید، خب اولین کتاب را برمی‌دارید و آن را هرجایی داخل قفسه‌ می‌گذارید. سپس کتاب دوم را برمی‌دارید و می‌بینید که آیا حرف اول عنوان آن، در حروف الفبا، قبل از کتاب اولی‌ست یا بعد از آن و بر این اساس کتاب دوم را قبل یا بعد آن کتاب قرار می‌دهید. همین فرآیند را برای کتاب سوم تکرار می‌کنید. اما در مورد کتاب سوم، شما باید حرف اول عنوان آن را، با کتاب اول و کتاب دوم مقایسه کنید. حالا فرض کنید کتابخانه‌ای دارید که ده هزار کتاب دارد و شما تا به اینجا نه هزار کتاب را به ترتیب حروف الفبا داخل قفسه‌ها چیده اید. حالا رسیده اید به کتاب نه هزار و یکمی و عنوان این کتاب “تسلی‌بخشی‌های فلسفه” است.

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

به تعداد مراحلی که الگوریتم شما باید تکرار کند، پیچیدگی الگوریتم یا complexity آن گفته می‌شود. در اینجا پیچیدگی الگوریتمی که به کار بردیم، ده هزار به توان دو است. یعنی در بدترین حالت، الگوریتم ما باید صد میلیون بار این فرآیند را تکرار کند.

البته خوشبختانه آن بابای کتابدار اینقدر بدشانس نیست که نیاز باشد تک تک کتاب‌ها را مقایسه کند. اما ما وقتی به زبان ریاضیاتی فکر می‌کنیم، دوست داریم بدترین حالت را مقایسه کنیم. چون ما در ریاضیات آکسیوماتیک فکر می‌کنیم و دوست داریم چیزی اثبات کنیم که کلی باشد و استثنا برندارد. به همین خاطر، پیچیدگی در بدترین حالت یا worst case complexity را اثبات می‌کنیم و می‌گوییم این الگوریتم، در بدترین حالت اینقدر پیچیده است. البته خوشبختانه برای این مساله، الگوریتم‌های با پیچیدگی کمتری نیز ارائه شده است.

– اَبا اِباد

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *