История изменений
Исправление bugfixer, (текущая версия) :
В двумерном нулей чуть меньше половины, дальше с ростом D все становится гораздо хуже. При N=10 вот такая картина маслом:
Возможно мы общаемся на слишком разных языках: в итоге Вы пришли к тому же что я сразу сказал - vector<double> плюс функция дающая позицию в векторе по координате в N-мерном пространстве.
Двумерный случай вообще тривиален, и никаких табличек даже не надо. Например:
int calcPos(int x, int y)
{
int diag = x + y;
int prevSize = diag * (diag + 1) / 2;
return prevSize + x;
}
Ну это просто чтобы идею продемонстрировать, не претендую ;)
Мне кажется, если подумать, то на N-мерный случай оно тоже обобщается, и самое главное - остаётся O(1).
Исходная версия bugfixer, :
В двумерном нулей чуть меньше половины, дальше с ростом D все становится гораздо хуже. При N=10 вот такая картина маслом:
Что-то в этой математике не так: я не вижу почему overhead по памяти решения «в лоб» растёт быстрее чем 2^(D-1). Либо Вы чего-то не договариваете и хранить нужно не весь «треугольник».
Ну и возможно мы общаемся на слишком разных языках: в итоге Вы пришли к тому же что я сразу сказал - vector<double> плюс функция дающая позицию в векторе по координате в N-мерном пространстве.
Двумерный случай вообще тривиален, и никаких табличек даже не надо. Например:
int calcPos(int x, int y)
{
int diag = x + y;
int prevSize = diag * (diag + 1) / 2;
return prevSize + x;
}
Ну это просто чтобы идею продемонстрировать, не претендую ;)
Мне кажется, если подумать, то на N-мерный случай оно тоже обобщается, и самое главное - остаётся O(1).