![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
Добрый вечер! Задано множество точек на плоскости. Необходимо найти две такие точки, что разница между количеством оставшихся точек, лежащих по разные стороны от прямой, соединяющей две искомые точки, была минимальной.
|
![]() |
![]() |
![]() |
#2 |
Регистрация: 28.11.2009
Сообщений: 6
|
![]()
Уважаемый модератор. Извините, я не студент и не учащийся. Тему переименовал. Алгоритм нужен для решения другой, более крупной задачи
Странно. "Более крупная задача" не потребует знания элементарных вещей? В любом случае в раздел для студентов... Модератор. Последний раз редактировалось mihali4; 14.12.2009 в 23:59. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.06.2009
Сообщений: 310
|
![]()
Перебираем все пары точек.
Для каждой пары (х1,у1) (х2,у2) считаем: 1) уравнение прямой, проходящей через эти точки. По формуле: (х-х1)*(у2-у1)=(х2-х1)*(у-у1). Получаем уравнение типа a*x+b*y+c=0 2) для каждой другой точки плоскости считаем, по какую сторону от прямой она лежит. Её координаты подставляются в уравнение прямой и смотрится результат. Если <0 , то по одну сторону; если >0 , то по другую сторону. 3) вычисляем разницу между количеством точек и сравниваем с минимальной. В конце получается пара искомых точек |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
|
![]()
Как-то пропустил тему раньше, вот сегодня заметил, что за задачу тут подняли. Довольно интересная. Бредобрутфорсное решение хоть и рабочее, но для серьезных задач не подходит. Если правильно понял задание, то задача полностью описывается через тета-множества. Следовательно, ее решение должно работать за O(n^2) или еще быстрее. Сяду думать, как решать, а то "общее" решение за квадрат или за n*log(n) не подходит для некоторых "коварных" случаев.
З.Ы. Уже придумал, как делать за О(n*n*log(n)) для общего случая и за O(n*log(n)) для точек, среди которых никакие 3 не лежат на одной прямой. Просветите, как зе квадрат сделать, а то не получается. Последний раз редактировалось LeBron; 16.12.2009 в 18:06. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
точки на плоскости (*Х*З*) *PASCAL* | tipson | Помощь студентам | 10 | 09.07.2009 10:28 |
Описание трассы движения точки на плоскости | Эмиль_C++ | Общие вопросы C/C++ | 104 | 15.06.2009 00:45 |
Нахождение трассы движения точки на плоскости | Эмиль_C++ | Общие вопросы C/C++ | 4 | 20.04.2009 14:26 |
Задача: заполнение плоскости объектами, максимально плотно | rosi4 | Помощь студентам | 1 | 15.11.2008 13:42 |
точки плоскости, заданные своими координатами, попадают в круг с радиусом R | Jondeer | Общие вопросы C/C++ | 6 | 16.06.2008 00:06 |