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


17

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

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

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

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

  1. Якщо , повернення .BL=∅B
  2. Інакше виберіть навмання.X∈L
  3. Нехай .B′←MSW(L−{X},B)
  4. Якщо тоді поверніть B ' .X⊆⟨B′⟩B′
  5. MSW(L,B″)B″B′∪{X}

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

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

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


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


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

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

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

ми можемо мати ; і зауважте, що :е ∉ ⟨ з , d ⟩MSW({c,d},{a,b,e})={c,d}e∉⟨c,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}
  • Зауважте, щоX∉⟨B′⟩
  • Тож нехай є основоюB″B′∪{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}
  • Зауважимо , що X∉⟨B′⟩
  • Тож нехай є основою B ′ ∪ { X } = { b , c , d }B″B′∪{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.   Якщо :X∉⟨B⟩
  5.     Нехай - основа B ∪ { X } .BB∪{X}
  6.     Поверніться до кроку 2.
  7. Повернення .B

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

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


Довідково

[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′′)X∈LX∈B′′B′XB⊆MSW(L,B)

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


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

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

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

B⊆⟨MSW(L,B)⟩

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