【发布时间】:2021-12-15 04:28:50
【问题描述】:
这些天我正在查看Algorithms in C, Parts 1-4 中的skiplist 代码,当将新值插入skiplist 时比我想象的要复杂。在插入过程中,代码应确保新值以1/2^i的概率插入到级别i,并通过以下代码实现:
static int Rand()
{
int i, j = 0;
uint32_t t = rand();
for (i = 1, j = 2; i < lg_n_max; i ++, j += j)
if (t > RANDMAX / j)
break;
if (i > lg_n)
lg_n = i;
return i;
}
我不知道Rand函数是如何保证这一点的,你能帮我解释一下吗,谢谢。
【问题讨论】:
标签: c algorithm probability skip-lists