مسئله کوچک‌ترین دایره

انگشتی|چپ|300px

**مسئلهٔ کوچکترین دایره** یا ** کمینه دایره پوششی نقاط**، یک مسئله ریاضی است که کوچکترین دایره پوششی شامل همه نقاط صفحه اقلیدسی را محاسبه می‌کند. مسئله کوچکترین دایره پوششی در فضای n بعدی، مسئله ای است که کوچکترین کره که همه مجموعه نقاط را شامل می‌شود، محاسبه می‌کند. این مسئله در ابتدا توسط ریاضی‌دان انگلیسی James Joseph Sylvester در سال ۱۸۵۷ مطرح شد. مسئله کوچک‌ترین دایره در صفحه یک مثال از مسئله تحلیل تعیین محل است به طوری که محل یک امکان جدید باید به گونه‌ای انتخاب شود که دورترین فاصله‌ای که هر مشتری باید طی کند تا به این امکان برسد کمینه شود. مسئله پیدا کردن کوچک‌ترین دایره در صفحه در ابعاد بالاتر هم در زمان خطی قابل حل است.

## مشخصات
اغلب روش‌های هندسی برای حل این مسئله، نقاطی را در نظر می‌گیرند که روی مرز کوچک‌ترین دایره واقع شده‌اند و برپایهٔ دو اصل سادهٔ زیر می‌باشند:

۱) کوچک‌ترین دایرهٔ پوششی نقاط یکتاست.

۲) کوچک‌ترین دایرهٔ پوششی برای مجموعهٔ نقاط S، حداکثر با ۳ نقطه از S روی مرز دایره مشخص می‌شود. اگر این دایره با دو نقطه مشخص شود، در این صورت خط متصل کنندهٔ این دو نقطه باید قطر کوچک‌ترین دایرهٔ پوششی نقاط باشد و اگر با سه نقطه مشخص گردد آنگاه مثلث شامل این سه نقطه منفرجه نخواهد بود.

## راه حل‌های زمان خطی
همان طور که نیمورد مگیدو (Nimrod Megiddo) نشان داد، مسئلهٔ کوچک‌ترین دایره پوششی نقاط می‌تواند در زمان خطی حل شود و برای این مسئله در فضای اقلیدسی در هر بعد ثابتی همین زمان اجرا وجود دارد.

المو ولز(Emo Welzl) یک الگوریتم تصادفی برای کوچک‌ترین دایره پوششی نقاط با زمان اجرای (O(n ارائه داد که این الگوریتم بر پایهٔ الگوریتم برنامه خطی ریموند سیدل(Raimund Seidel) است. این الگوریتم بازگشتی، مجموعه نقاط Q و S را به عنوان آرگومان دریافت می‌کند و کوچک‌ترین دایرهٔ پوششی از اجتماع Q و S را تا زمانی که هر نقطه از Q نقطه‌ای از نقاط مرزی کوچک‌ترین دایره نهایی شود محاسبه می‌کند.
بنابراین، برای حل مسئله اصلی می‌توانیم الگوریتم فوق را برای مجموعه S که شامل نقاطی که قرار است پوشش داده شوند و Q که یک مجموعه تهی است فراخوانی کرد.
همان‌طور که الگوریتم به صورت بازگشتی فراخوانی می‌شود، مجموعه Q تا زمانی که مساوی همه نقاط مرزی دایره نشده‌است بزرگ می‌شود.

این الگوریتم نقاط درون مجموعه S و P را به صورت رندوم بررسی می‌کند و همچنین کوچک‌ترین دایره شامل اجتماع P و Q را نیزمورد بررسی قرار می‌دهد. در هر مرحله، الگوریتم بررسی می‌کند که آیا نقطه بعدی r به این دایره تعلق دارد یا نه و اگر نداشت دایره را با دایرهٔ دیگری که از فراخوانی الگوریتم با آرگومان‌های P و Q+r به دست می‌آید جایگزین می‌کند. چه دایره توسط دایره دیگری جایگزین شود و چه نشود، r جز مجموعه نقاط P محسوب می‌شود. در بررسی هر یک از نقاط، باید آزمایش‌های مداومی انجام شود که مشخص کند آیا هر نقطه به یک دایره مستقل تعلق دارد و همچنین امکان اجرای یک الگوریتم بازگشتی را دارد یا نه. می‌توان نشان داد که احتمال این که نقطه iام، یک الگوریتم بازگشتی تولید کند برابر با (O(۱/i است. به همین دلیل زمان کل اجرای مسئله خطی است.

متعاقباً، مسئله کوچک‌ترین دایره جز کلاس عمومی مسئله‌های نوع LP است که می‌تواند با استفاده از الگوریتم‌هایی چون ولز که مبتنی بر برنامه‌نویسی خطی هستند حل شود. در نتیجهٔ عضویت در این کلاس، نشان داده شد که اتکا به بُعد فاکتورهای ثابت در زمان محدود (O(n، که یک فاکتور برای تابع‌های Seidel's است، می‌تواند به زیر مجموعه‌های نمایی که اتکا روی N را حفظ می‌کنند کاهش پیدا کند.

## سایر الگوریتم‌ها

با توجه به بررسی‌های مگیدو(Megiddo) و اینکه کوچک‌ترین دایرهٔ پوششی می‌تواند با زمان اجرای خطی پیدا شود، تعداد زیادی از الگوریتم‌ها با پیچیدگی بالاتر ظاهر شدند. ساده‌ترین الگوریتم برای حل این مسئله از مرتبهٔ n۴ است به این ترتیب که تمام دایره‌های متشکل از دو نقطه و سه نقطه ممکن را در نظر گرفته و سپس بین تمام آن‌ها کمینه می‌گیرد.
* کریستال و پیرس(Chrystal and Peirce) الگوریتمی ارائه دادند که از استراتژی بهینه‌سازی محلی استفاده می‌کند به این ترتیب که دو نقطه روی مرز دایره در نظر می‌گیرد و با جایگزین کردن پی در پی جفت نقاط روی مرز، دایره را کوچک می‌کند تا به کمینهٔ خود برسد.
چاکرابرتی و چادهوری(Chakraborty and Chaudhuri) یک روش خطی برای انتخاب دایرهٔ اولیهٔ مناسب و جفت نقاط روی مرز دایره ارائه کرده‌اند. با هر گام از این الگوریتم یکی از جفت نقاط روی مرز به عنوان یک راس جدید در پوش محدب قرار می‌گیرد؛ بنابراین اگر پوش حاوی h راس باشد، این الگوریتم می‌تواند در مرتبهٔ زمانی n*h پاسخ دهد.
* الزینگا و هرن(Elzinga and Hearn) الگوریتمی را پیشنهاد دادند که یک دایرهٔ پوششی را برای زیر مجموعه‌ای از نقاط نگه می‌دارد. در هر گام الگوریتم، از نقطه‌ای که توسط حوزهٔ پوششی هنوز پوشش داده نشده‌است، برای پیدا کردن یک فضای پوششی بزرگ تر که زیر مجموعهٔ جدیدی از نقاط و البته شامل همین نقطه است، استفاده می‌شود. با اینکه این الگوریتم در بدترین حالت زمان اجرایی از مرتبهٔ h۳*n دارد، طراحان الگوریتم معتقدند که در آزمایش‌هایشان این الگوریتم در زمان خطی پاسخ می‌داده است. درنزر و شله(Drezner and Shelah) پیچیدگی این الگوریتم را بررسی کرده‌اند. کد برنامه به دو زبان برنامه‌نویسی فورترن و ،C از هرن و ویجای و نیکل(Hearn, Vijay & Nickel) در دسترس هست.
* مسئلهٔ کوچک‌ترین حوزه می‌تواند به عنوان یک برنامه از درجهٔ دو فرموله شود که با استفاده از یک سیستم محدودیت خطی و تابع‌های محدب درجهٔ دو تعریف می‌شود. بنابراین هر الگوریتم جهت دار ممکن می‌تواند جواب مسئله را بدهد.هرن و ویجای ثابت کردند که راه حل‌های ارائه شده از جکبسن و کریستال - پیرس معادل هم هستند.
* دوگان این برنامه درجهٔ دو ممکن است بتواند به صورت ضمنی فرمول بندی شود. الگوریتمی از لاوسون can be described in this way as a primal dual algorithm.می‌تواند به عنوان یک راه حل دوگان اولیه محسوب شود.
* شمُس وهای (Shamos and Hoey) یک الگوریتم با زمان اجرای n*log n ارائه کردند بر این مبنا که مرکز کوچک‌ترین دایرهٔ پوششی باید یک راس از دورترین نقطهٔ دیاگرام ورونوی از مجموعه نقاط ورودی باشد.

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

## منابع

## پیوند به بیرون
* Bernd Gärtner's smallest enclosing ball code
* CGAL the *Min_sphere_of_spheres* package of the *Computational Geometry Algorithms Library* (CGAL)
* Miniball an open-source implementation of an algorithm for the smallest enclosing ball problem for low and moderately high dimensions

رده:بهینه‌سازی ترکیبیاتی
رده:دایره‌ها
رده:مقاله‌های ایجادشده توسط ایجادگر
رده:هندسه محاسباتی