Я не уверен, что понимаю контекст вашего вопроса - я не изучал последовательное хеширование.
Вопрос почти сводится к тому, «как сортировать без сортировки».
Другой подход может быть следующим:
iter = seed() #initialize to the bottom of the hash keys
for(i = 0 to partitionbound)
{
iter = nextIter(iter);
}
Это в линейном времени. Тем не менее, он не требует априорных знаний о пространстве клавиш, за исключением того, что есть некоторый порядок, которому следует nextIter.
Если вы разделяете [0, 2 ^ 128] -> {values}, например, вы занимаетесь распределенными вычислениями или что-то еще, вам повезло больше, поскольку целые числа хорошо структурированы.
Я бы предложил немного глупую идею иметь 4 32-битных целых числа в структуре и написать свою собственную подпрограмму bigint, которая решает, что вам нужно решить.
Если у вас есть свобода не использовать C ++, в Common Lisp есть встроенные bigints. Я нашел это удобным.
Если у вас есть представимые ключи ...
Тем не менее, при поиске некоторых равных по размеру k разделов в некотором пространстве a с n элементами я подхожу к такой проблеме:
if( n % k)
{
return "not equal-sized partition!"
}
//could be forking/threading, whatever.
for(int i = 0; i < n; i+=k)
{
process(i, i+k-1);
}
process(bottom, top)
{
sort(a[bottom], a[top]);
return a[top]; //you'll have to figure out where to dump the results.
}