Я хочу разделить гиперпространство на кубы. Кубы образуют дерево B +, как я могу это сделать? - PullRequest
0 голосов
/ 14 ноября 2011

Гиперпространство содержит большое количество многомерных точек.

Я стремлюсь разбить пространство на кубики.

И кубики составляют дерево B +. Я много читал о дереве B +.

Но я не знаю, как нумеровать кубы и выбрать максимальное количество ключей, которое может принять узел

есть, тогда я смогу эффективно .посмотреть соседний куб из куба.

Кто-нибудь может дать какие-нибудь идеи?

1 Ответ

0 голосов
/ 07 июня 2012

В общем случае вы можете заново представить любой n-мерный массив в виде линейной последовательности, преобразовав его в серию (n-1) -мерных массивов.

Вот простой пример. Предположим, у нас есть массив объектов 2 x 2:

a b
c d

Языки с индексами массива побуждают вас думать об этом как о вложенной структуре данных, как этот код Python:

a, b, c, d = 'abcd'
data = { 0: { 0 : a, 1 : b },  1: { 0 : c, 1 : d } }
fetch = lambda x, y: data[y][x]
assert fetch(0, 1) == c

Но вы также можете думать об этом как о плоском массиве, подобном этому:

data2 = [ a, b, c, d ]
data2_width = 2
fetch2 = lambda x, y : data2[(y * data2_width + x)]
assert fetch2(0, 1) == c

Общая идея состоит в том, что вы умножаетесь на длину измерения, чтобы получить следующую строку.

Вы можете применить эту идею рекурсивно к любому количеству измерений. Так что, если ваши размеры - tuvxyz, а длины - TUVWXYZ, то для любого объекта вы просто берете его координаты и вычисляете {(t * T * u * U * v * V * w * W * x * X * y * Y ) + z}.

Чтобы выбрать соседа по измерению u, вы добавляете или вычитаете 1 из u и снова запускаете вычисление.

...