Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
2-1167993756
Marat
2007-01-05 13:42
2007.01.28
непонятки с памятью


15-1168324917
zdm
2007-01-09 09:41
2007.01.28
Со всеми прошедшими и наступающими!!!


15-1167641289
vidiv
2007-01-01 11:48
2007.01.28
Помогите найти песню


2-1168090790
Volfram
2007-01-06 16:39
2007.01.28
WriteBuffer в InDy 10


2-1168499525
Roma L
2007-01-11 10:12
2007.01.28
SQL Server





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский