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

Вниз

Нужна струкнура данных,   Найти похожие ветки 

 
Romkin   (2002-01-21 11:50) [5]

Т.Кормен, Ч.Лейзерсон, Р.Ривест. Алгоритмы: построение и анализ.
Как раз там описан метод для поиска наименьшего расстояния между точками, кол-во действий O(n*Log2(n)).
Алгоритм, правда, рекурсивный, так что насчет памяти - как запрограммируешь, но все равно прилично.
Идея такая:
Исходные данные: два массива X & Y, содержащие координаты (x,y)(записи типа TRecord вполне). Массивы упорядочены по возрастанию координат, соотв. x & y.
1. Делим множество точек пополам вертикальной линией (находим медиану массива X) на два L & R. Точки на линии - как хочешь респределяем по половинам. Получаем соотв Xr, Yr & Xl & Yl, также упорядоченные
2. Находим минимальные расстояния между точками половин (рекурсивно, те тоже дробя их пополам и тд), Dr & Dl соотв.
Находим минимальное расстояние из этих двух: D.
3. На основе Y создаем массив Yd, содержащий точки, расстояние по х которых от линии не более D (упорядоченный по y). Проходя по этому массиву снизу вверх, вычисляем для каждой точки расстояние до 7 следующих (обоснование семи - в книге).
Соответственно, минимальное из этих расстояний - минимальное для двух половин. Если гарантируется, что точки не совпадают, имхо, можно ограничится 5 точками.
Все делается рекурсивно, первоначально массивы удобно упорядочить QuickSort (demos\threads). Потом надо делить так, чтобы постоянно получались уже упорядоченные. Впрочем, поскольку по условию задачи входной массив почти упорядочен, QuickSort подходит плохо, упорядочивать лучше другими алгоритмами.



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

Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.005 c
3-8760
weak
2002-01-04 12:48
2002.02.04
Dataset not in edit or insert mode


3-8776
roman001
2002-01-05 21:15
2002.02.04
SQL


3-8792
vygantas
2002-01-08 12:41
2002.02.04
D6 и MySQL


7-9013
Orpheus
2001-10-24 12:34
2002.02.04
Проблемка


7-9011
stalker17
2001-10-20 16:00
2002.02.04
COM порт





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