【发布时间】:2010-07-29 23:34:55
【问题描述】:
有什么好的算法可以在不预先读取整个文件的情况下打乱文件中的行?
我猜它看起来像这样:从头开始逐行读取文件,在每个点存储该行并决定是否要打印到目前为止存储的行之一(然后从存储中删除)或者什么都不做,继续下一行。
有人可以验证/证明这一点和/或发布工作(perl、python 等)代码吗?
相关问题,但不关注内存效率算法:
【问题讨论】:
-
所有行的大小都一样吗?
-
不过,这不会产生非常随机的输出 - 它会保证“shuffled”文件的前几行都来自原始文件的前几行。是否要求真的在您阅读整个文件之前开始洗牌?还是您只是想避免一次将整个文件读入内存(因此只要您不一次将整个文件都保存在内存中,扫描文件就可以了)?
-
@torak:不,线条的长度不同。
-
@Dean:嗯,这取决于用于决定打印之前存储的一个或等到稍后再打印的标准。该概率必须使您提到的错误不会发生。是的,关键是避免一次将整个文件保存在内存中。 (如果算法确实必须在某些概率非常低的病理情况下将整个文件读入内存,我会说这是可以接受的。)
-
在不知道行数的情况下,我认为它实际上是不可行的。如果没有这些知识,您如何确定一条线占据给定位置的概率。
标签: algorithm file random shuffle