![]() |
|
|
![]()
|
|
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: нет Всего: 4 |
Вопрос заключается в нахождении алгоритма быстрого решения такой задачи:
Дано множество точек на плоскости, которое обладает следующим свойством: среди любых четырех из заданных точек три лежат на одной прямой. Требуется найти ломаную, которая имеет минимальную длину и проходит через все заданные точки. Выходит, что все точки, кроме максимум 2-х (или вообще все) просто обязаны лежать на одной прямой. Кроме огромного числа этих точек (около 1000) и ихних координат я ничего больше не имею. Не могу сочинить быстрого алгоритма, который нашёл бы эти 2 точки (если таковые существуют). Кроме грубого перебора точек и составления уравнения основной прямой, на которой лежит большинство точек я не придумал. При этом очень много кода, так как надо учитывать "исключения", такие, как "прямая параллельна оси X или Y" и тд и поэтому всё работает медленно и не так эффективно как хотелось бы. Подскажите пожалуйста, ведь существуют более изящные и быстрые алгоритмы решения такого рода задач, чем грубый перебор. Я не знаю в какую сторону копать чтоб оптимизировать. Заранее благодарен. |
|||
|
||||
| nostromo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: 5 Всего: 10 |
Мне кажется, что кроме максимум одной. --------------------
На пыльных тропинках далеких планет останутся наши следы. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Ага. Допустим у нас есть прямая (на которой лежат все точки), а две точки не лежат на ней. Тогда берем их и еще две с прямой --- противоречие Поэтому только одна Добавлено @ 11:20 А найти эту точку кроме как перебором, ИМХО, не выйдет
От этого легко избавиться используя нормальное уравнение прямой: Ax + By + C = 0 Я бы сделал так: По первым двум точкам составил прямую и стал бы последовательно искать "лишнюю" точку. Если она среди первых двух, то это нужно отдельно обрабатывать. P.S. Я не спец по алгоритмам, я математик. Поэтому сильно не пинать |
|||
|
||||
| Linus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.8.2006 Где: Украина Репутация: нет Всего: 4 |
Извините, ошибся, действительно кроме одной. Просто думал, что здесь зарыт какой-то интересный быстрый алгоритм, может быть матричный метод, например как поиск чисел Фибоначчи, можно простым циклом, можно рекурсивно, можно через возведение матрицы в степень, но видел, что тренер на олимпиаде умудрился найти n-й элемент подобной последовательности через матрицу, составленную из логарифмов. Поэтому и решил спросить. Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |