从N个记录的文件中随机选择M个记录

时间:2016-05-23 05:53:54

标签: algorithm random probability

需要从具有N个记录(N> M)的文件中随机选择M个记录(表示文件中的每个记录具有相同的选择概率)。想知道是否有任何只能读取文件的解决方案?

我想到的唯一方法是以概率M / N选择每条记录,但这种方式可能导致小于M或M记录。

任何更明智的想法都会受到赞赏。

的问候, 林

2 个答案:

答案 0 :(得分:3)

您可能需要的是油藏采样算法(link)。

不仅受助者获得了具有相同概率的M个记录,而且您只需要读取输入一次而且您不需要事先知道N.

复杂性是O(N)。

答案 1 :(得分:0)

选择M 唯一的随机数,将它们放入数组中,对它们进行排序,然后一次读取该文件。当你在文件的i条记录中读到时,如果i在数组中,请保留它,否则丢弃它。这需要O(M)内存并且正在运行时间O(N + M log M)