算法 - 统一随机元素链表

时间:2012-02-21 19:05:29

标签: c++

如何从链表中获取统一的随机元素?通过计算列表的长度 当你计算时,生成一个随机元素。如果随机元素%列表的长度 等于0,然后选择该元素。

1 个答案:

答案 0 :(得分:1)

在开始挑选元素之前,首先需要列表的长度,因此在列表中平均需要1.5次迭代。

第一个是获取列表的长度。 然后得到一个随机数[0 ... 1]乘以列表的长度,向下舍入。 这是你必须获得的索引(你必须进行另一次迭代)。

伪代码中的

int n = list.size()  // Returns length of list
int index = (int) (random_value() * n); // random_value returns a value between 0.0 and 1.0
int* node = list.start() // goto start of list
for (int iter = 0; 0 < n; n++)
    node = node->next() // Goto next node
return node