الگوریتم کارگر

در علوم رایانه و نظریهٔ گراف، الگوریتم کارگِر  یک الگوریتم تصادفی برای محاسبهٔ برش کمینه از یک گراف هم بند است. این الگوریتم توسط
دیوید کارگر
اختراع و در سال ۱۹۹۳ برای نخستین بار چاپ شد.

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

مسئلهٔ جهانی برش کمینه 
یک برش  در یک گراف بدون جهت  افرازی از رأس‌های  به دو مجموعهٔ غیر تهی و مجزای  است.

مجموعه برش  یک برش، از یال‌های  بین دو بخش برش تشکیل می‌شود. اندازه (یا وزن) یک برش در یک گراف بدون جهت تعداد اعضای مجموعه برش، یعنی تعداد یال‌های بین دو بخش، است،
.

 روش انتخاب برای هر رأس چه متعلق به  و چه  وجود دارد، اما دو مورد از این انتخاب‌ها  یا  را تهی می‌کنند و برش تولید نمی‌کنند. در میان انتخاب‌های باقی‌مانده، تعویض نقش‌های  و  برش را تغییر نمی‌دهد، بنابراین هر برش دو بار شمارش می‌شود؛ پس  برش متمایز وجود دارد.
مسئلهٔ برش کمینه می‌خواهد برشی با کوچک‌ترین اندازه در میان این برش‌ها بیابد.

برای گراف‌های وزن دار با یال‌هایی با وزن مثبت  وزن برش، حاصل جمع وزن‌های یال‌های بین رئوس در هر بخش است

که با تعریف بدون وزن برای  مطابقت دارد.

یک برش گاهی یک «برش جهانی» نامیده می‌شود تا از یک «برش -» برای زوج داده شده‌ای از رئوس، که شرط اضافهٔ  و  را دارد، تمایز داده شود. هر برش جهانی یک برش - برای یک  است. بنابراین، مسئلهٔ برش کمینه می‌تواند با یکی یکی پیش رفتن در میان همهٔ انتخاب‌های  و حل مسئلهٔ برش - کمینهٔ حاصله با استفاده از قضیهٔ جریان بیشینهٔ برش کمینه و یک الگوریتم با زمان چندجمله‌ای برای مسئله بیشینه جریان، مانند الگوریتم فورد-فالکرسون، در زمان چندجمله‌ای حل شود، گرچه این رویکرد بهینه نیست. یک الگوریتم تعیین‌کننده برای مسئلهٔ برش کمینه با زمان اجرای  وجود دارد.

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

الگوریتم تلفیق مرتباً یال‌های تصادفی را در گراف تلفیق می‌کند تا زمانی که فقط دو رأس باقی بماند که آنگاه فقط یک برش یکتا وجود دارد.

    procedure contract():
    while 
        choose  uniformly at random
        
    return the only cut in 

وقتی گراف با استفاده از لیست‌های مجاورت یا ماتریس مجاورت نمایش داده می‌شود، یک عمل یکتای تلفیق یالی را می‌توان با تعدادی بروزرسانی با زمان اجرای خطی روی داده ساختار، با زمان اجرای کل ، پیاده‌سازی کرد. از سوی دیگر، این روند را می‌توان به منزلهٔ اجرای الگوریتم کروسکال برای ایجاد درخت فراگیر کمینه در گرافی که یال‌هایش بر اساس یک جایگشت تصادفی  وزن‌های  دارند دید. حذف سنگین‌ترین یال این درخت به ایجاد دو مؤلفه می‌انجامد که یک برش را توصیف می‌کنند. به این روش، روند تلفیق را می‌تواند مانند الگوریتم کروسکال در زمان   پیاده‌سازی کرد.

بهترین پیاده سازی‌های شناخته شده، به ترتیب از زمان و فضای  یا زمان  و فضای
 استفاده می‌کنند.

احتمال موفقیت الگوریتم تلفیقی 

در گراف  با  رأس، الگوریتم تلفیقی با احتمال  یک برش کمینه برمی گرداند. در میان  برش گراف، حد اکثر  برش کمینه وجود دارد، بنابراین این احتمال بسیار بهتر از انتخاب یک برش به صورت تصادفی است.

برای مثال، گراف دوری روی  رأس، دقیقاً  برش کمینه دارد، که از انتخاب هر دو یال به دست می‌آید. روند تلفیق با احتمال برابر هر یک از این یال‌ها را می‌یابد.

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

احتمال  که الگوریتم تلفیق روی یک گراف  رأسی از   اجتناب کند، در رابطهٔ بازگشتی  با  صدق می‌کند که می‌توان آن را به صورت زیر بسط داد:

تکرار الگوریتم تلفیق 

با تکرار  بار الگوریتم تلفیق با انتخاب‌های مستقل تصادفی و برگرداندن کوچک‌ترین برش، احتمال پیدا نکردن برش کمینه عبارتست از:

زمان اجرای کل برای  بار تکرار برای گرافی با  رأس و  یال برابر است با:
.

الگوریتم کارگر_اشتاین 
یک بسط الگوریتم کارگر، توسط دیوید کارگر و کلیفورد اشتاین  به بهبود مرتبهٔ زمانی حالت قبل منجر می‌شود.
ایدهٔ اصلی این است که رویهٔ تلفیق تا زمانی که گراف به  رأس برسد انجام شود.

    procedure contract(, ):
    while 
        choose  uniformly at random
        
    return 

احتمال   که این رویهٔ تلفیق از یک برش خاص   در یک گراف  رأسی اجتناب کند چنین است:

این عبارت از  است و از  حول
 کمتر می‌شود. به ویژه احتمال این که یک یال از  تلفیق شود تا پایان افزایش می‌یابد. این انگیزهٔ ایدهٔ تغییر به یک الگوریتم کندتر پس از تعداد معینی گام‌های تلفیقی است.

    procedure fastmincut():
    if :
        return mincut()
    else:
        
         contract(, )
         contract(, )
        return min {fastmincut(), fastmincut()}

تجزیه و تحلیل 
احتمال  را احتمال پیدا کردن یک مجموعهٔ برش خاص  توسط الگوریتم در نظر بگیریم آنگاه  با رابطهٔ بازگشتی زیر داده می‌شود:

که راه حل آن   است. زمان اجرای سریع‌ترین برش کمینه در

در راه حل  صدق می‌کند.

برای رسیدن به احتمال خطای ، الگوریتم می‌تواند  بار تکرار گردد، با زمان اجرای کل  این یک مرتبهٔ زمانی با بهبود زیاد روی الگوریتم اصلی کارگر است.

یافتن همهٔ برش‌های کمینه 
قضیه: با احتمال زیادی می‌توان همهٔ برش‌های کمینه را در زمان اجرای  یافت.

اثبات: از آنجا که می دانیم ، بنابراین پس از اجرای این الگوریتم به تعداد   بار، احتمال از بین رفتن یک برش کمینهٔ خاص چنین است:

.

و حداکثر  برش کمینه وجود دارد، بنابراین احتمال از دست دادن هر برش کمینه چنین است:

وقتی n به اندازهٔ کافی بزرگ باشد، احتمال شکست به نحو قابل ملاحظه‌ای کم خواهد بود. ∎

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

پانویس

منابع 
 

الگوریتم‌های گراف
همبندی گراف