需要从具有N个记录(N> M)的文件中随机选择M个记录(表示文件中的每个记录具有相同的选择概率)。想知道是否有任何只能读取文件的解决方案?
我想到的唯一方法是以概率M / N选择每条记录,但这种方式可能导致小于M或M记录。
任何更明智的想法都会受到赞赏。
的问候, 林
答案 0 :(得分:3)
答案 1 :(得分:0)
选择M
唯一的随机数,将它们放入数组中,对它们进行排序,然后一次读取该文件。当你在文件的i
条记录中读到时,如果i
在数组中,请保留它,否则丢弃它。这需要O(M)
内存并且正在运行时间O(N + M log M)
。