Як не обчислити найменше коло, що охоплює кінцевий набір кіл


17

Припустимо , що ми маємо кінцеве безліч дисків в , і ми хочемо обчислити найменший диск , для яких . Стандартний спосіб зробити це полягає у використанні алгоритму Matoušek, Шаріра і Welzl [1] , щоб знайти базис з , і нехай , найменший диск , що містить . Диск можна обчислити алгебраїчно, використовуючи той факт, що, оскільки є основою, кожен диск в є дотичним до .R 2 D L D B L D = B В Б Б Б В LR2DLDBLD=BBBBBB

( є основою з , якщо є мінімальним , так що Основа має не більше трьох елементів ;. В цілому для куль в основи має не більше елементів.)BLБ В = L R d d + 1LBB=LRdd+1

Це рандомізований рекурсивний алгоритм наступним чином. (Але дивіться ітераційну версію, яку, можливо, простіше зрозуміти нижче).

Порядок роботи : Введення : Кінцеві набори дисків , , де - основа ( ).MSW(L,B)
B B BLBBB

  1. Якщо , повернення .BL=B
  2. Інакше виберіть навмання.XL
  3. Нехай .BMSW(L{X},B)
  4. Якщо тоді поверніть B ' .XBB
  5. MSW(L,B)BB{X}

Використовується в якості MSW(L,) обчислити базис L .

Нещодавно у мене з'явилася причина реалізувати цей алгоритм. Перевіривши правильність результатів у мільйонах випадково сформованих тестових випадків, я помітив, що допустив помилку в реалізації. На останньому кроці я повертав а не .MSW(L{X},B)MSW(L,B)

Незважаючи на цю помилку, алгоритм давав правильні відповіді.


Моє запитання: Чому ця неправильна версія алгоритму, очевидно, дає тут правильні відповіді? Чи завжди це (доказливо) працює? Якщо так, чи це правда і у вищих вимірах?


Додано: кілька помилок

Кілька людей запропонували невірні аргументи про те, що модифікований алгоритм є тривіально правильним, тому може бути корисним попередження деяких помилок. Одне популярне помилкове переконання - . Наведемо контрприклад цього твердження. Дані диски як показано нижче (межа також показана червоним кольором):, б , з , д , е , б , е BMSW(L,B)a,b,c,d,ea,b,e

Диски a, b, c, d, e

ми можемо мати ; і зауважте, що :е з , d MSW({c,d},{a,b,e})={c,d}ec,d

найменше оточуюче коло c і d не містить e

Ось як це може статися. Перше спостереження полягає в тому, що :MSW({c},{a,b,e})={b,c}

  • Ми хочемо обчислитиMSW({c},{a,b,e})
  • ВиберітьX=c
  • НехайB=MSW(,{a,b,e})={a,b,e}
  • Зауважте, щоXB
  • Тож нехай є основоюBB{X}={a,b,c,e}
  • Зауважте, щоB={b,c}
  • Повернути , тобтоMSW({c},{b,c}){b,c}

Тепер розглянемо .MSW({c,d},{a,b,e})

  • Ми хочемо обчислити MSW({c,d},{a,b,e})
  • Виберіть X=d
  • Нехай B=MSW({c},{a,b,e})={b,c}
  • Зауважимо , що XB
  • Тож нехай є основою B { X } = { b , c , d }BB{X}={b,c,d}
  • Зауважте, що B={c,d}
  • Повертаємо , тобто { c , d }MSW({c,d},{c,d}){c,d}

(Для визначеності скажемо, що всі диски мають радіус 2 і по центру ( 30 , 5 ) , ( 30 , 35 ) , ( 10 , 5 ) , ( 60 , 26 ) і ( 5 , 26 ) відповідно.)a,b,c,d,e(30,5)(30,35)(10,5)(60,26)(5,26)


Додано: ітеративна презентація

Можливо, простіше подумати про ітераційне представлення алгоритму. Мені, звичайно, легше візуалізувати його поведінку.

Введення : Список дисків Вихід : Основа LL
L

  1. Нехай .B
  2. Перемішуйте випадковим чином.L
  3. Для кожного у L :XL
  4.   Якщо :XB
  5.     Нехай - основа B { X } .BB{X}
  6.     Поверніться до кроку 2.
  7. Повернення .B

Причина алгоритм завершується, між іншим, є те , що крок 5 завжди збільшує радіус - і є лише кінцеве число можливих значень B .BB

Наскільки я бачу, модифікована версія не має такої простої ітеративної презентації. (Я намагався надати цю публікацію в попередній редакції, але це було неправильно - і дало неправильні результати.)


Довідково

[1] Іржі Матушек, Міха Шарір та Емо Вельцл. Субекспоненціальна межа для лінійного програмування. Algorithmica, 16 (4-5): 498–516, 1996.


По-перше, у вашому рядку "Введення: ..." Я думаю, ви хочете "(з L)", а не "(з B)". По-друге, при поверненні MSW (L- {X}, B '') замість MSW (L, B '') ваша основа B '' визначається як основа [B 'об'єднання {X}], тому X є все ще гарантується, що буде охоплено MSW (L- {X}, B ''), навіть якщо ви вилучили його з набору.
JimN

Ні, я дійсно маю на увазі "(з B)" там, і B не обов'язково є підмножиною L в рекурсивних дзвінках. Елементи BL не обов'язково покриваються MSW (L, B), як у цьому прикладі bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c, де і B = { a , b , e } (Натисніть маленькі кнопки зі стрілками, щоб перейти до обчислення.)L={a,b,c,d}B={a,b,e}
Робін Х'юстон,

Відповіді:


1

Цей крок видалення з L перед продовженням рекурсії фактично покращує алгоритм, оскільки він видаляє вже доданий X з пулу базових кандидатів. Це завжди, доказово, буде працювати, оскільки він еквівалентний існуючому алгоритму, а також буде працювати для більш високих розмірів.XLX

Простежте за алгоритмом. Якщо ви використовуєте , є X L і X B . Припустимо, ми вибрали його ще раз на кроці 2. Незалежно від результату кроку 3, B ' завжди матиме X , оскільки рекурсивна функція має інваріантну B M S W ( L , B ) .MSW(L,B)XLXBBXBMSW(L,B)

Іншими словами, ваше вдосконалення до скорочення алгоритму до кроку 3 в частині, де вибрано X


Неправда, що взагалі. Погляньте на приклад, пов'язаний у моєму коментарі до питання. BMSW(L,B)
Робін Х'юстон

І взагалі не вірно, що з цього питання! Ви мали в виду X B " ? Підозрюю, що якщо ви спробуєте більш жорстко пояснити свій аргумент, ви побачите, що це не працює. XBXB
Робін Х'юстон,

NB. Це не вірно навіть в загальному випадку, що . BMSW(L,B)
Робін Х'юстон

BMSW(L,B)

1
B=BX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.