Главная страница
    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.04 c
15-1168075168
Slider007
2007-01-06 12:19
2007.01.28
С днем рождения ! 6 января


3-1162984122
topperz
2006-11-08 14:08
2007.01.28
разное содержимое комобобокса в одном столбце DbGridEh


3-1162530427
m_i_p
2006-11-03 08:07
2007.01.28
сквозная нумерация в DbGrid


1-1164191499
Uran
2006-11-22 13:31
2007.01.28
Проблеммы с кирилицей.


15-1167912546
Ксардас
2007-01-04 15:09
2007.01.28
Подскажите как отключить...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский