2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 
Сообщение29.07.2008, 20:39 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Окружность-то? Big deal! Convex hull и там перебор по всем тройкам.
(Хреново, ну дак я и не пытался оптимизировать. Обещан был полиномиальный? - извольте!)

 Профиль  
                  
 
 
Сообщение29.07.2008, 21:24 
Аватара пользователя


23/01/08
565
ewert, я и имел ввиду, что они будут внутри эллипса. Есть множество точек - требуется очертить минимальный эллипс (окружность). Наверное немножко не по теме :?.

ИСН, да, по-видимому, надо строить выпуклую оболочку, сейчас как раз читаю про алгоритм просмотра Грэхема.

 Профиль  
                  
 
 
Сообщение29.07.2008, 21:56 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Не надо никакой оболочки, можно проще. Берём три первые точки. Строим описанную окружность. И идём по всем остальным точкам. Если какая не влезает в окружность - заменяем одну из трёх (тут надо прикинуть, какую именно) на неё, и ползём перебирать сначала.
Думаю, что и это не оптимум.

 Профиль  
                  
 
 
Сообщение30.07.2008, 09:38 
Заслуженный участник


11/05/08
32166
Spook писал(а):
ewert, я и имел ввиду, что они будут внутри эллипса. Есть множество точек - требуется очертить минимальный эллипс (окружность). Наверное немножко не по теме :?.

Ну Вы ж критерия минимальности для эллипса не предложили, я и решил сделать вид, что не понял. Для окружности -- дело другое.

ИСН писал(а):
Не надо никакой оболочки, можно проще. Берём три первые точки. Строим описанную окружность. И идём по всем остальным точкам. Если какая не влезает в окружность - заменяем одну из трёх (тут надо прикинуть, какую именно) на неё, и ползём перебирать сначала.
Думаю, что и это не оптимум.

Буквально "описанная окружность" не пройдёт -- представьте себе, что точки на одной прямой. Но вот что можно.

1). Находим две наиболее удалённые друг от друга точки $\vec r_1$, $\vec r_2$ и строим на них окружность как на диаметре длины $D=\Vert\vec r_1-\vec r_2\Vert$. Проверяем, попадают ли все остальные точки в этот круг; если да, то построение закончено.

2). Если нет. Перебираем все тройки точек и пытаемся провести через них окружность; учитываем при этом только те тройки, для которых радиус окружности не превосходит $D$ (это чтоб избежать неприятностей в случаях, когда эти точки оказываются на прямой или близко к этому). Проверяем, попадают ли остальные точки в построенный круг; если нет, то эту окружность отбрасываем.

3). Из всех оставленных окружностей берём ту, что имеет наименьший радиус.

Конечно, алгоритм наверняка не оптимален.

 Профиль  
                  
 
 
Сообщение30.07.2008, 12:11 


02/07/08
322
Минимальная окружность ищется со сложностью $O(n)$. По-английский задача называется smallest enclosing circle problem, можно поискать или посмотреть здесь на английском
Более известен алгоритм решения за $O(n\log n)$, он использует диаграмму Вороного (Voronoi diagram) множества точек на плоскости и её построение за такое же время (алгоритм Форчуна - Fortune). Почитать на английском можно в статье Franz Aurenhammer, Rolf Klein - Voronoi Diagrams.

 Профиль  
                  
 
 
Сообщение30.07.2008, 16:56 
Аватара пользователя


23/01/08
565
Спасибо, думаю все это можно обобщить и на эллипс.

Добавлено спустя 9 минут 40 секунд:

Cave, а Вы разбирали этот алгоритм? Там учитываются неприятности, про которые говорил ewert?

 Профиль  
                  
 
 
Сообщение30.07.2008, 18:19 


02/07/08
322
Spook
Какие неприятности? Я что-то пропустил.
Вообще алгоритмы в информатике обычно решают поставленную задачу, несмотря ни на какие неприятности.
Я диаграмму Вороного лично не строил, но охотно верю, что это делается за указанное время. Исходя из неё решить задачу несложно, это есть в статье отдельным параграфом, прочитайте.
На эллипс конкретно этот метод не обобщается, поскольку явно используется определение окружности и её центра.

 Профиль  
                  
 
 
Сообщение30.07.2008, 19:08 
Аватара пользователя


23/01/08
565
Ну я имел ввиду такие возможные ситуации как
ewert писал(а):
...неприятностей в случаях, когда эти точки оказываются на прямой или близко к этому

то есть мне показалось, что может произойти выход за пределы разрядной сетки. Но в принципе - да,
Cave писал(а):
алгоритмы в информатике обычно решают поставленную задачу, несмотря ни на какие неприятности.
Я просто подумал, что Вы уже реализовывали этот алгоритм, вот и решил поинтересоваться. А так - статьи скачал, начал читать.

 Профиль  
                  
 
 
Сообщение30.07.2008, 21:38 


02/07/08
322
Spook
Эта "неприятность" свойственна алгоритму, предложенному тов. ewert. В принципе, этот алгоритм считается стандартным, потому что очевиден, платить приходится огромной сложностью по сравнению с возможной - $O(n^4)$.

Мне для практических нужд хватало этой сложности, тем более, что на самом деле там стоит $O(h^4)$, где $h$ - число точек в выпуклой оболочке множества.
Простой с виду и, видимо, с точки зрения реализации алгоритм со сложность $O(n^2)$ приведён в первой ссылке.

На самом деле, теоретические сложности - это, конечно, здорово и интересно, но на практике они нужны далеко не всегда и потому зачастую представляют собой просто интерес или даже спорт. Понятно, что $O(n)$ является оптимальной сложностью в нашей задаче (нужно же прочитать входные данные хотя бы), поэтому можно считать, что задача решена полностью. Однако константа в $O$ большом наверняка кроется такая, что $\log n$ при разумных значениях $n$ будет не сильно хуже, а возможно и лучше.
Во всяком случае подобные вещи наблюдаются во многих алгоритмах, ближайшие, что приходит на ум, - умножение чисел метотом Карацубы (два $n$-битовых числа можно умножить "в столбик" за время $O(n^2)$, а метод Карацубы позволяет это сделать за $O(n^{\log_2 3)$; впрочем, используя быстрое преобразование Фурье эта задача решается за время что-то вроде $O(n\log n\log\log n)$), поиск $k$-порядковой статистики за линейное время (то есть поиск $k$-го по величине элемента массива; тривиальное решение - отсортировать весь массив за время $O(k\log k)$ и найти искомый элемент оказывается практически наилучшим), Фиббоначиевы кучи (отдельная тема, в двух словах не рассказать). Всё это познавательно, но не всегда практично.

 Профиль  
                  
 
 
Сообщение01.08.2008, 17:55 
Аватара пользователя


23/01/08
565
Cave писал(а):
На эллипс конкретно этот метод не обобщается, поскольку явно используется определение окружности и её центра.

А можем ли мы, когда построили окружность минимального радиуса, путем сужения ее вдоль какой-либо диагонали, преобразовать ее в эллипс минимальной площади?
А если с учетом того, что его оси параллельны осям координат и (не знаю существенно ли это) считаются с точностью до пятого знака после запятой? Интуитивно кажется, что можно, например, найти наиболее удаленную от центра точку и сделать эллипс, проходящий через нее.

 Профиль  
                  
 
 
Сообщение01.08.2008, 19:06 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Дальше всё хуплохо. И центр-то не центр (соотв., минимальной окружности и минимального эллипса), и минимальная окружность-то не всегда превращается в минимальный же эллипс только сжатием. Контрпримеры лежат на поверхности, что называется, только руку протяни.
Это даже если нам гарантируют что-то-там про параллельность осям.

 Профиль  
                  
 
 
Сообщение01.08.2008, 19:18 
Аватара пользователя


23/01/08
565
:D . Эх, жалко. Хотя в принципе, можно просто перебирать по 4 точки, как ewert писал для окружности.

 Профиль  
                  
 
 первый подход к ЭВМ после перерыва.
Сообщение07.08.2008, 10:50 


29/09/06
4552
По 4 точки? Может, по 5 (ведь кр. втор. пор. через 5 точек проводится)? Гиперболы сразу выкидываем?

 Профиль  
                  
 
 
Сообщение09.08.2008, 08:41 
Аватара пользователя


23/01/08
565
Алексей К. писал(а):
По 4 точки? Может, по 5 (ведь кр. втор. пор. через 5 точек проводится)? Гиперболы сразу выкидываем?
В этом случае, по-моему, все-таки 4, так как уравнение невырожденного эллипса, оси которого параллельны осям декартовой системе координат имеет вид $$\frac{(x-x_c)^2}{a^2}+\frac{(y-y_c)^2}{b^2}=1$$.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Shadow


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group