|
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 77
|
|
Разделяй и властвуй, поиск пары ближайших точек19.10.2022, 13:32. Показов 4485. Ответов 25
Метки нет (Все метки)
Задание:
1. Требуется реализовать алгоритм поиска пары ближайших точек в 2-мерном пространстве (функция closest_pair). На вход функция принимает массив точек (каждая точка задается двумя вещественными координатами x и y), на выходе она должна вернуть пару ближайших (по расстоянию) точек; порядок точек в паре значения не имеет. 2. Реализовать алгоритм наивным способом: полный перебор всех возможных пар точек и выбор ближайшей пары. 3. Реализовать алгоритм с помощью метода “разделяй и властвуй” (см. описание ниже; для требующейся в алгоритме сортировки нужно использовать эффективную реализацию, например, std::sort). 4. Замерить время работы двух реализаций на массивах случайных точек разного размера (N=10, 100, 1000 и т.д.) (использовать одинаковые входные данные для каждой реализации). Сравнить время работы двух алгоритмов, сделать выводы. Общая схема метода “разделяй и властвуй”: 1)Разбиение задачи на подзадачи меньшего размера 2)Решение подзадач (зачастую тем же алгоритмом через рекурсию или тривиальным способом в случае вырожденной подзадачи) 3)Получение (сборка) решения всей задачи из решений подзадач Псевдокод алгоритма поиска пары ближайших точек методом “разделяй и властвуй” (points - массив вещественных точек в 2D) closest_pair(points): Если число точек меньше или равно 3, решить задачу тривиальным способом (полный перебор) и вернуть результат. Иначе: Отсортировать точки в points по x-координате. Разбить отсортированные точки на две равные по числу точек половины - PLeft и PRight. pl = closest_pair(PLeft), pr = closest_pair(PRight) - пары ближайших точек в левой и правой половине соответственно. d = min(dist(pl), dist(pr)), dist - расстояние между точками в паре (стандартное расстояние между координатами в R2). pb = closest_pair_between(PLeft, PRight, d) - пара ближайших точек между половинами PLeft и PRight. Из pl, pr и pb выбрать пару с минимальным расстоянием и вернуть как результат. closest_pair_between(PLeft, PRight, d): Найти Xm - границу между PLeft и PRight по x-координате (Xm = (PLeft.last.x + PRight.first.x)/2). Построить PStripe - массив из тех точек из PLeft и PRight, которые отстоят по х-координате от Xm менее чем на расстояние d. Отсортировать точки в PStripe по y-координате. Найти пару ближайших точек в PStripe. Для этого для каждой точки в PStripe достаточно рассматривать только следующие за ней в массиве точки до тех пор, пока расстояние между ними по y-координате менее чем d. Вернуть результат.
0
|
|
| 19.10.2022, 13:32 | |
|
Ответы с готовыми решениями:
25
Перевести код поиска пары ближайших точек c C++ на С# Возвести число A в степень N методом разделяй и властвуй Поиск пары ближайших точек |
|
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 77
|
|
| 03.11.2022, 16:50 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 77
|
|
| 04.11.2022, 06:07 [ТС] | |
|
SmallEvil,
Не помогло
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 04.11.2022, 09:56 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.09.2021
Сообщений: 77
|
|||||||||||||||||||||
| 04.11.2022, 11:10 [ТС] | |||||||||||||||||||||
|
подскажите как исправить ошибку:
вызвано исключение и открывает другую библиотеку
0
|
|||||||||||||||||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||
| 04.11.2022, 11:16 | ||
|
Описание ошибки говорит о том, что у вас сборка не работает.
Проверяйте то, как вы собираете.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||||||||
| 04.11.2022, 11:28 | ||||||||
b как был пуст изначально, так и остался пуст. А вы в него лезете по индексу i. Все падает. Что это все значит? Откуда должен был взяться некий "набор средних точек" в векторе b? В коде никто в него никакого "набора средних точек" не кладет.Более того, возникает подозрение, что работать планировалось с массивом points. А вместо него вы почему-то лезете в какой-то пустой и никому не нужный b...Также здесь: PStripe будут элементы [0] и [1]? Почему вы решили, что циклы выше гарантированно найдут как минимум две точки?
1
|
||||||||
| 04.11.2022, 11:28 | |
|
Алгоритм поиска пары ближайших точек Разделяй и властвуй Метод «разделяй и властвуй» Реализовать алгоритмы для задачи о поиске пары ближайших точек Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|