Будут 2 дерева (буду писать как координата, номер точки). По х: 2,3 1,1

5,2
По у:
2,3
1,2 5,1

Теперь пытаюсь искать ближайшую по х точку по дереву (о, а получается узлы дерева мне тоже надо проверять что ли?)

От (0,0) до третьей точки расстояние 2√2, пока она ближайшая (вообще тут должно было сработать условие d<3 и точка уже в этом кластере, можно дальше не считать. Но попробую чтоб лучше покрутить алгоритм в голове)
Идём в лист. В левый получается. Считаем расстояние до точки 1. Это √26. Пока ближайшей осталась третья. Дерево по х кончилось, точку 2 мы не проверяли, экономия

Теперь опускаемся по дереву у:
Снача с третьей точкой сравниваем, ну это уже было. Ближайшая не меняется
Дальше опускаюсь по дереву, с точкой 2 сравниваю: расстояние √26, лидер всё ещё точка 3

Точка (0,0) в кластере, добавляю её в деревья:
По х:
2,3
1,1 5,2
0,0
По у:
2,3
1,2 5,1
0,0

12 ответов

46 просмотров
Павлик-Ливаткин Автор вопроса

Кажется я переизобрёл кд-дерево 😔

То есть ты собираешься проверять все вершины на пути к ближайшему? А как выбирать в какую ветку спускать: в левую или в правую? Если не посещать обе, то вполне можно пропустить ближайшую

Антон Novikov
То есть ты собираешься проверять все вершины на пу...

Или ставка именно на то, что по отдельности деревья сломать можно, но вместе они точно найдут правильный ответ? Мой пример был для того чтобы показать, что ближайшая точка не обязательно является ближайшей по x или ближайшей по y

Павлик-Ливаткин Автор вопроса
Антон Novikov
То есть ты собираешься проверять все вершины на пу...

Да, я это не предусмотрел, но похоже надо узлы при спуске тоже проверять

Павлик-Ливаткин Автор вопроса
Антон Novikov
Или ставка именно на то, что по отдельности деревь...

Ну я как раз и хотел чтобы оценили будет такая идея работать или нет

Павлик-Ливаткин Автор вопроса
Антон Novikov
Или ставка именно на то, что по отдельности деревь...

Наверное я не прав и спуск по дереву не гарантирует что по пути будет ближайшая из возможных точек

Павлик Ливаткин
Ну я как раз и хотел чтобы оценили будет такая иде...

Кстати, а насколько большое d? Интересует даже не d, а плотность точек. Насколько много точек может быть в одном кубике d x d x d? Кажется, что это можно назвать каким-нибудь k и использовать в асимптотике

Павлик-Ливаткин Автор вопроса
Антон Novikov
Кстати, а насколько большое d? Интересует даже не ...

вообще не понятно сколько брать чтобы можно было кузов как отдельный кластер выделить. пока неплохо работает d^2=30_000 я сравниваю квадраты расстояний

Павлик-Ливаткин Автор вопроса
Антон Novikov
Кстати, а насколько большое d? Интересует даже не ...

ну ориентировочно в d*d*d может быть до 961 точки

Ещё есть идея прорядить точки раза в 4 и даже за O(n^2) искать слегка увеличив d

Антон Novikov
Ещё есть идея прорядить точки раза в 4 и даже за O...

А-н-нет, потом же всё равно нужно будет искать куда относятся остальные точки

Павлик-Ливаткин Автор вопроса
Антон Novikov
Ещё есть идея прорядить точки раза в 4 и даже за O...

ну я на хэштаблице с делением координат нацело как раз прореживал. но я потом не пытался точки вставлять. при вставке кластеры могут объединяться начать. пока не обдумал как с этим быть, но кажется все подходы стремятся к nlogn и нет готовых реализаций под то что мне нужно

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта