Предположим , что мы имеем конечное множество дисков в , и мы хотим вычислить наименьший диск , для которых . Стандартный способ сделать это состоит в использовании алгоритма Matoušek, Шарир и Welzl [1] , чтобы найти базис из , и пусть , самый маленький диск , содержащий . Диск может быть вычислен алгебраически с использованием того факта, что, поскольку B является базисом, каждый диск в B касается \ langle B \ rangle .
( является основой из , если является минимальным , так что Основа имеет не более трех элементов;. В целом для шаров в основы не более элементов.)
Это рандомизированный рекурсивный алгоритм следующим образом. (Но см. Ниже итеративную версию, которая может быть легче для понимания.)
Процедура :
Вход : конечные наборы дисков , , где является базой ( ).
- Если , возврат .
- В противном случае выберите наугад.
- Пусть .
- Если вернуть .
- В противном случае верните , где является базисом .
Используется в качестве вычислить базис .
Недавно у меня была причина реализовать этот алгоритм. После проверки правильности результатов в миллионах случайно сгенерированных тестовых случаев я заметил, что допустил ошибку в реализации. На последнем этапе я возвращал а не .
Несмотря на эту ошибку, алгоритм давал правильные ответы.
Мой вопрос: почему эта неправильная версия алгоритма дает правильные ответы здесь? Это всегда (доказуемо) работает? Если так, то это также верно для более высоких измерений?
Добавлено: некоторые заблуждения
Несколько человек предложили неверные аргументы о том, что модифицированный алгоритм тривиально корректен, поэтому здесь может быть полезно предотвратить некоторые заблуждения. Похоже, одно из распространенных ложных убеждений состоит в том, что . Вот контрпример к этому требованию. Для дисков как показано ниже (граница также показана красным):, б , с , д , е ⟨ , б , е ⟩
мы можем иметь ; и обратите внимание, что :е ∉ ⟨ с , d ⟩
Вот как это может произойти. Первое наблюдение состоит в том, что :
- Мы хотим вычислить
- Выберите
- Пусть
- Заметьте, что
- Итак, пусть является базисомB ′ ∪ { X } = { a , b , c , e }
- Заметьте, что
- Вернуть , то есть{ b , c }
Теперь рассмотрим .
- Мы хотим вычислить
- Выберите
- Пусть
- Заметьте, что
- Итак, пусть является базисомB ′ ∪ { X } = { b , c , d }
- Заметьте, что
- Вернуть , то есть{ c , d }
(Для определенности скажем, что все диски имеют радиус 2 и центрированы в , , , и соответственно.)( 30 , 5 ) ( 30 , 35 ) ( 10 , 5 ) ( 60 , 26 ) ( 5 , 26 )
Добавлено: итеративная презентация
Может быть проще подумать об итеративном представлении алгоритма. Мне, конечно, легче визуализировать его поведение.
Входные данные : список дисков Выход : ОсноваL
- Пусть .
- Перемешать случайно.
- Для каждого в :L
- Если :
- Пусть - базис .B ∪ { X }
- Вернитесь к шагу 2.
- Возврат .
Причина алгоритм завершается, между прочим, является то , что шаг 5 всегда увеличивает радиус - и есть лишь конечное число возможных значений .Б
Насколько я вижу, модифицированная версия не имеет такой простой итеративной презентации. (Я пытался дать один в предыдущем редактировании этого поста, но это было неправильно - и дал неправильные результаты.)
Ссылка
[1] Иржи Матушек, Миха Шарир и Эмо Вельцль. Субэкспоненциальная оценка для линейного программирования. Algorithmica, 16 (4-5): 498–516, 1996.
источник
Ответы:
Этот шаг удаления из перед продолжением рекурсии фактически улучшает алгоритм, потому что он удаляет уже добавленный из пула базовых кандидатов. Это всегда будет доказуемо работать, потому что это эквивалентно существующему алгоритму, и это также будет работать для более высоких измерений.L XX L X
Трассировка по алгоритму. Когда вы используете , есть и . Предположим, что мы выбрали его снова в шаге 2. Независимо от результата шага 3, всегда будет иметь , потому что рекурсивная функция имеет инвариант .X ∈ L X ∈ B ′ ′ B ′ X B ⊆ M S W ( L , B )MSW(L,B′′) X∈L X∈B′′ B′ X B⊆MSW(L,B)
Другими словами, ваше усовершенствование алгоритма сокращает до шага 3 в той части, где выбранX
источник