看完这个问题。我想知道是否有可能使用 O(1) 空间我们可以使用双散列之类的方法生成具有均匀分布的序列 [1...n] 的随机排列?
我用序列 [1,2,3,4,5] 的一个小例子尝试了这个,它可以工作。但它无法用于更大的集合。
int h1(int k) {
return 5 - (k % 7);
}
int h2(int k) {
return (k % 3) + 1;
}
int hash(int k, int i) {
return (h1(k) + i*h2(k)) % size;
}
int main() {
for(int k = 0; k < 10; k++) {
std::cout << "k=" << k << std::endl;
for(int i = 0; i < 5; i++) {
int q = hash(k, i);
if(q < 0) q += 5;
std::cout << q;
}
std::cout << std::endl;
}
}