Я реализую динамическое kD-Tree в представлении массива (сохраняя узлы в std :: vector) в ширину. Каждый i
-й нелистовой узел имеет левого ребенка в (i<<1)+1
и право ребенка в (i<<1)+2
. Он будет поддерживать инкрементную вставку точек и сбор очков. Однако я столкнулся с проблемой определения необходимого количества возможных узлов для постепенного предварительного выделения пространства.Предскажите необходимое количество предварительно распределенных узлов в kD-дереве
Я нашел formula on the web, который, как представляется неправильным:
N = мин (т - 1, 2n - ½m - 1),
где т является наименьшей степенью 2 больше или равно n, число точек .
Моя реализация формулы заключается в следующем:
size_t required(size_t n)
{
size_t m = nextPowerOf2(n);
return min(m - 1, (n<<1) - (m>>1) - 1);
}
функция nextPowerOf2 возвращает мощность 2 по величине или равной п
Любая помощь будет оценена.
Вы должны сначала попытаться поделиться своими мыслями с автором блога. –
Вы пробовали с небольшим количеством баллов, чтобы узнать, где ошибка? Какова была ошибка, недостаточно предварительно выделенных объектов? Не могли бы вы поместить фактические значения .. например: я попытался с точками 'X' ...' m' рассчитывал: 'Y' и' required' возвращал значение 'Z' .. но в конце мне нужно было' W' – wendelbsilva
, так как вопрос о количестве требуемых узлов, да, ошибка - это недостаточно предварительно выделенные узлы, что приводит к segfault. Я протестировал алгоритм с фактическими значениями, он работает, однако заканчивается из хранилища. – plasmacel