Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какие точки лежат на одной прямой 
:(
    Опции темы
Linus
Дата 14.8.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вопрос заключается в нахождении алгоритма быстрого решения такой задачи:

Дано множество точек на плоскости, которое обладает следующим свойством: среди любых четырех из заданных точек три лежат на одной прямой. Требуется найти ломаную, которая имеет минимальную длину и проходит через все заданные точки.

Выходит, что все точки, кроме максимум 2-х (или вообще все) просто обязаны лежать на одной прямой. Кроме огромного числа этих точек (около 1000) и ихних координат я ничего больше не имею. Не могу сочинить быстрого алгоритма, который нашёл бы эти 2 точки (если таковые существуют). Кроме грубого перебора точек и составления уравнения основной прямой, на которой лежит большинство точек я не придумал. При этом очень много кода, так как надо учитывать "исключения", такие, как "прямая параллельна оси X или Y" и тд и поэтому всё работает медленно и не так эффективно как хотелось бы. Подскажите пожалуйста, ведь существуют более изящные и быстрые алгоритмы решения такого рода задач, чем грубый перебор. Я не знаю в какую сторону копать чтоб оптимизировать. Заранее благодарен.
PM MAIL ICQ   Вверх
nostromo
Дата 15.8.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 5
Всего: 10



Цитата

Выходит, что все точки, кроме максимум 2-х (или вообще все) просто обязаны лежать на одной прямой.

Мне кажется, что кроме максимум одной.
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
ivashkanet
Дата 15.8.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(nostromo @  15.8.2006,  09:15 Найти цитируемый пост)
Мне кажется, что кроме максимум одной.

Ага.
Допустим у нас есть прямая (на которой лежат все точки), а две точки не лежат на ней. Тогда берем их и еще две с прямой --- противоречие smile
Поэтому только одна smile

Добавлено @ 11:20 
А найти эту точку кроме как перебором, ИМХО, не выйдет  smile Ведь все равно нужно анализировать координаты кажной точки.
Цитата(Linus @  14.8.2006,  22:49 Найти цитируемый пост)
При этом очень много кода, так как надо учитывать "исключения", такие, как "прямая параллельна оси X или Y"

От этого легко избавиться используя нормальное уравнение прямой:
Ax + By + C = 0

Я бы сделал так:
По первым двум точкам составил прямую и стал бы последовательно искать "лишнюю" точку. 
Если она среди первых двух, то это нужно отдельно обрабатывать.

P.S. Я не спец по алгоритмам, я математик. Поэтому сильно не пинать smile


PM MAIL WWW ICQ   Вверх
Linus
Дата 15.8.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Извините, ошибся, действительно кроме одной. Просто думал, что здесь зарыт какой-то интересный быстрый алгоритм, может быть матричный метод, например как поиск чисел Фибоначчи, можно простым циклом, можно рекурсивно, можно через возведение матрицы в степень, но видел, что тренер на олимпиаде умудрился найти n-й элемент подобной последовательности через матрицу, составленную из логарифмов. Поэтому и решил спросить. Спасибо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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