Проблема с бесконечной рекурсией KDTree buildBalancedTreeC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с бесконечной рекурсией KDTree buildBalancedTree

Сообщение Anonymous »

Я пытался ускорить свое дерево KD, реализовав балансирующие и ограничивающие рамки, но теперь оно даже не может построить дерево, и я не понимаю, почему.
Пример ввода
Вот как я предоставляю ввод:

Код: Выделить всё

n and dim = {3, 2} points: {0, 0} {3, 3} {3, 0}
Проблема
Когда я пытаюсь построить дерево, кажется, что функция переходит в бесконечную рекурсию, и программа зависает. Я подозреваю, что проблема кроется в моей функции buildBalancedTree.
Код
Вот реализация функции buildBalancedTree:

Код: Выделить всё

std::unique_ptr KDTree::buildBalancedTree(
std::vector
& points,
int depth,
std::vector min_bound,
std::vector max_bound) {

if (points.empty()) {
return nullptr;
}

int axis = depth % points[0].point.size();

std::sort(points.begin(), points.end(), [axis](const Point& a, const Point& b) {
return a.point[axis] < b.point[axis];
});

size_t medianIndex = points.size() / 2;
Point medianPoint = points[medianIndex];

// Update bounds for left and right subtrees
std::vector left_max = max_bound;
left_max[axis] = medianPoint.point[axis];

std::vector right_min = min_bound;
right_min[axis] = medianPoint.point[axis];

auto node = std::make_unique(std::move(medianPoint), min_bound, max_bound);

node->left = buildBalancedTree(
points, depth + 1, min_bound, left_max
);
node->right = buildBalancedTree(
points, depth + 1, right_min, max_bound
);

return node;
}
Мои мысли
Я считаю, что бесконечная рекурсия возникает потому, что я передаю один и тот же вектор точек как в левую, так и в правую сборку поддерева. Однако я не уверен, как правильно разбить вектор точек для поддеревьев.
Как решить эту проблему? При необходимости могу предоставить полный код моей программы.

Подробнее здесь: https://stackoverflow.com/questions/792 ... sion-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с бесконечной рекурсией KDTree buildBalancedTree
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Nodriver сбои с бесконечной рекурсией в безголовом режиме при запуске Browser.get ()
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Проблема делителей положительного целого числа N с рекурсией
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Перестановки с повторами, алгоритм с рекурсией
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Рисование кругов в кругах с рекурсией с использованием модуля черепахи
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»