Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 23:31   #1
Единорог
 
Регистрация: 28.11.2009
Сообщений: 6
По умолчанию Задача про точки на плоскости

Добрый вечер! Задано множество точек на плоскости. Необходимо найти две такие точки, что разница между количеством оставшихся точек, лежащих по разные стороны от прямой, соединяющей две искомые точки, была минимальной.
Единорог вне форума Ответить с цитированием
Старый 14.12.2009, 23:39   #2
Единорог
 
Регистрация: 28.11.2009
Сообщений: 6
По умолчанию

Уважаемый модератор. Извините, я не студент и не учащийся. Тему переименовал. Алгоритм нужен для решения другой, более крупной задачи

Странно. "Более крупная задача" не потребует знания элементарных вещей?
В любом случае в раздел для студентов...
Модератор.

Последний раз редактировалось mihali4; 14.12.2009 в 23:59.
Единорог вне форума Ответить с цитированием
Старый 14.12.2009, 23:44   #3
Voody
Форумчанин
 
Регистрация: 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) вычисляем разницу между количеством точек и сравниваем с минимальной.
В конце получается пара искомых точек
Voody вне форума Ответить с цитированием
Старый 16.12.2009, 17:30   #4
LeBron
Форумчанин
 
Регистрация: 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.
LeBron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
точки на плоскости (*Х*З*) *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