Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два множества 
:(
    Опции темы
MFSham
Дата 21.3.2006, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Имеется следующая задачка:
Даны 2 множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы треугольник с вершинами в этих точках покрывал все точки второго множества и имел минимальную площадь.

Я себе ход решения представляю следующим образом:
1) Пусть первое множество состоит из n элементов. Нам нужно пересмотреть всевозможные комбинации с тремя точками из этого множества. Т.о. количество всевозможных вариантов - число сочетаний из n по 3.
2) Пусть выбраны некоторые три точки. У нас имеются их координаты. Строим треугольник по этим трем точкам.
3) Проверяем поочередно все точки на вхождение в область построенного треугольника.
4) Если все входят, то высчитываем площадь по формуле(например Герона). Смотрим, является ли площадь минимальной. Если да, то заносим данные имеющиеся на данном этапе.
5) Таким образом проверяются все точки.

Может кто видит чего попроще?
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
darkart
Дата 21.3.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: нет
Всего: 31



Сугубо IMHO(но можно попробовать)
I)упорядочить треугольники по площади(1 сочетание - вычисляем S, 2 сочетание - вычисляем S, находим его место и т.д.). Работает, если достаточно памяти для хранения. Первый треугольник содержащий 2 мн-во - твой.
II)Не знаю на счет реализации, но можно найти контур 2 мн-ва, т.е. составить мн-во(из точек 2-го мн-ва) внутри которого и/или на котором лежат все точки 2 мн-ва. И проверять на вхождение в треугольник только их.
ЗЫЖ повторяю сугубо IMHO.
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 21.3.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Сначала для множества 2 можно построить описывающий выпуклый многоугольник - это позволит отбросить внутренние точки как множества 2, так и множества 1.

Затем строим треугольники, охватывающие этот многоугольник - для каждой выбранной пары точек из множества 1 перебираем возможные третьи точки, тестим на то что многоугольник полностью внутри, если так - считаем площадь, если она меньше чем у текущего - запоминаем новый охватывающий треугольник.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MFSham
Дата 21.3.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: нет
Всего: 3



Тут тогда возникает еще два вопроса:

1) Каким образом(по какому принципу) строить описывающий выпуклый многоугольник?
2) Как проверять, входит ли точка в этот многоугольник?
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
SoWa
Дата 22.3.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Цитата(MFSham @ 21.3.2006, 22:59 Найти цитируемый пост)
2) Как проверять, входит ли точка в этот многоугольник?

Это тебе к поиску.

Цитата(MFSham @ 21.3.2006, 22:59 Найти цитируемый пост)
1) Каким образом(по какому принципу) строить описывающий выпуклый многоугольник?

Это из пункта 2 выходит.
пройди все точки а потом исключай.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
maxim1000
Дата 22.3.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(MFSham @ 21.3.2006, 21:59 Найти цитируемый пост)
1) Каким образом(по какому принципу) строить описывающий выпуклый многоугольник?

можно таким образом:
(тут я предполагаю, что ни одна тройка точек не лежит на одной прямой)
1. выбираем какую-нибудь точку, про которую мы точно можем сказать, что она будет "с наружи", например, можно взять точку с самой большой x-координатой (если таких несколько - то любую)
2. дальше надо провести через нее линию, от которой все остальные точки будут находиться по одну сторону (если мы выбирали так, как описано в первом пункте, но подойдет вертикальная прямая)
3. находим следующую (соседнюю) вершину выпуклого многоугольника: смотрим на пары (a,b) (a - наша выбранная точка, а b - перебираем все, которые есть) и считаем угол между направлением a->b и направлением прямой из пункта 2, выбираем ту b, для которой этот угол наименьший
...
дальше берем за начальную точку b, за начальное направление вектор (b-a) и повторяем процедуру для нахождения третьей точки границы
...
так перебираем всю границу

вместо сравнения углов эффективнее будет сравнивать их синусы, а их можно посчитать через векторное произведение...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.