Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Помогите с задачкой   Найти похожие ветки 

 
Windows ©   (2007-01-08 18:00) [0]

Расстоияние между двумя множествами точек-это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние между двумя заданными множествами точек на плоскости!

с чего начать решение этой задачи?)
если с учебника математики, то прямо так и скажите. Мне кажется, здесь чего-то не хватает в условии...


 
try   (2007-01-08 18:10) [1]

Начать с учебника математики (геометрии). В условии всего хватает.


 
Windows ©   (2007-01-08 18:14) [2]

спасибо)


 
AlexanderMS ©   (2007-01-08 18:27) [3]

Если все точки множеств заданы, значит, известны координаты точек (x, y).
Если множество недостаточно объёмное, то можно простым перебором. Надеюсь, Вам известна формула расстояния между двумя точками:
d = sqrt(sqr(x1 - x2) + sqr(y1 - y2))
(синтаксис Паскаля). Она есть в учебнике геометрии.
А так:

Вычислять расстояния между каждыми двумя точками и выбрать
наименьшее. Оно и будет искомым.



> Мне кажется, здесь чего-то не хватает в условии...


Откуда задача?


 
AlexanderMS ©   (2007-01-08 18:28) [4]


> В условии всего хватает.

Да, хотя не помешало бы уточнение.


 
ors_archangel ©   (2007-01-08 22:20) [5]


> [0] Windows, [3] AlexanderMS

Локальная оптимизация: так как во всех случаях странвниваются евклидовые расстояния, то можно использовать формулу

d = sqr(x1 - x2) + sqr(y1 - y2)               (*)

т.к. x1 < x2 => sqrt(x1) < sqrt(x2).
Предлагаю в качестве глобальной оптимизации для начала строить quadtree для всех точек вместе, мотом использовать алгоритм [3] с облекчённой формулой (*) в тех квадратах, где будут точки из обоих множеств


 
vidiv ©   (2007-01-08 22:25) [6]


> ors_archangel ©   (08.01.07 22:20) [5]

а что быстрее посчитается, это:

> d = sqr(x1 - x2) + sqr(y1 - y2)  

или это:
d2 = abs((x1-x2)*(y1-y2))

По идее по d2 тоже можно сравнивать =)


 
vidiv ©   (2007-01-08 22:35) [7]

А как, кстати, множества задаются?


 
Servelat ©   (2007-01-08 22:38) [8]

> d2 = abs((x1-x2)*(y1-y2))

Точки с одинаковой абсциссой (или ординатой) тогда находятся на условном расстоянии 0? И как тогда сравнить расстояния между парами таких точек? Как минимум поэтому данная формула не подойдет.


 
ors_archangel ©   (2007-01-08 22:40) [9]


> vidiv ©   (08.01.07 22:25) [6]

Развиваю идею: сначала производим линейное сравнение:

 d3 = min(abs(x1-x2), abs(y1-y2));

Если одна пара точек линейно ближе друг к другу, чем другая пара, то они ближе бруг к другу и в евклидовом смысле, а вот если линейно пара точек равно другой паре, то нужно сделать проверку по формуле [5] (*).


> А как, кстати, множества задаются?

Видимо, точки в двумерном пространстве, см. [0]


 
ors_archangel ©   (2007-01-08 22:45) [10]


> а что быстрее посчитается

примерно одинаково, а вот d3 быстрее d1 больше, чем в два раза, когда я тестировал 3D-вариант, в 2D, конечно, эффекта меньше будет :(


 
ors_archangel ©   (2007-01-08 22:48) [11]


> Точки с одинаковой абсциссой (или ординатой) тогда находятся
> на условном расстоянии 0? И как тогда сравнить расстояния
> между парами таких точек? Как минимум поэтому данная формула
> не подойдет.

Да.... Придётся заменить min на max



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.077 c
15-1168205660
maxmaxov
2007-01-08 00:34
2007.01.28
где в Питере можно купить редкие фильмы, кроме как на Юноне?


3-1162973372
jiny
2006-11-08 11:09
2007.01.28
Ширина заголовка строки в DbCross (frxDbCrossObject)


2-1168192483
Khabibulin
2007-01-07 20:54
2007.01.28
Засветить некоторые ячейки StringGrid а


15-1168412976
Postalll
2007-01-10 10:09
2007.01.28
Визуальные компоненты


2-1168759566
Garacio
2007-01-14 10:26
2007.01.28
из ListView в ComboBox