Если я правильно понимаю вопрос, вы сможете вычислить отображение напрямую, используя div mod. (См. объяснение операторов в C )
Например, в Python
def my_map(n,k,i):
elements_per_bin = n/k if n%k is 0 else n/k + 1 #in case n is exactly divisible by k
return i/elements_per_bin
В качестве примера, пусть n = 10, k = 3
>>> n=10
>>> k=3
>>> def f(i):
return my_map(n,k,i)
>>> range(n)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> map(f,range(n))
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2]
Итак, {0,1,2,3} -> 0, {4,5,6,7} -> 1 и т. Д.
Я предполагаю, что у вас уже есть данные из исходного массива / структуры данных где-то в памяти. Теперь вы должны иметь возможность индексировать его, вычисляя индекс массива из сопоставления (может потребоваться построить обратную функцию my_map).
Вычисление индекса - O (1), и вы используете только пространство из исходного массива.
Извините, если я неправильно понял отображение.