История изменений
Исправление slovazap, (текущая версия) :
Вот в этом и вопрос - как считать смещения;-) Собственно я уже догадался, но получается довольно сложный рекурсиный алгоритм расчета смещения - мб обычный метод половинного деления будет быстрее.
Нет, никаких рекурсивных алгоритмов там не должно быть - это будет медленнее хэша. Если я, опять таки, правильно понял что примерно нужно, то нужна просто сумма арифметической прогрессии. Т.е. для примера, двумерный случай:
Полная матрица NxN адресуется m[y*N + x]
, а если нужно хранить только её диагональную половину, то m[y*N - (y*y-y)/2 + x]
Теперь это надо обобщить на твой многомерный.
Можно не думать, если не лень потом переделывать.
Нет, нужно просто не думать, и переделывать не нужно будет. Тебе кто-то какую-то фобию коллизий привил, забудь про неё. Если у тебя там вдруг и случится несколько коллизий, ты этого вообще никак не заметишь.
Исходная версия slovazap, :
Вот в этом и вопрос - как считать смещения;-) Собственно я уже догадался, но получается довольно сложный рекурсиный алгоритм расчета смещения - мб обычный метод половинного деления будет быстрее.
Нет, никаких рекурсивных алгоритмов там не должно быть - это будет медленнее хэша. Если я, опять таки, правильно понял что примерно нужно, то нужна просто сумма арифметической прогрессии. Т.е. для примера, двумерный случай:
Полная матрица NxN адресуется m[y*N + x]
, а если нужно хранить только её диагональную половину, то m[y*N - (y*y+y)/2 + x]
Теперь это надо обобщить на твой многомерный.
Можно не думать, если не лень потом переделывать.
Нет, нужно просто не думать, и переделывать не нужно будет. Тебе кто-то какую-то фобию коллизий привил, забудь про неё. Если у тебя там вдруг и случится несколько коллизий, ты этого вообще никак не заметишь.