![]() |
1
4
我想不出一种方法来随机地完成整个文件,而不必以某种方式维护已经写入的内容的列表。我想如果我必须做一个内存高效的洗牌,我会扫描文件,为新的行建立一个偏移列表。一旦我有了这个新行偏移列表,我将随机选择其中一个,将其写入stdout,然后将其从偏移列表中删除。 我不熟悉Perl或Python,但可以用PHP演示。
我能想到的另一个选择是,如果扫描文件中的新行是绝对不可接受的,那就是(我不会将这一行编码出来):
|
![]() |
2
3
下面的算法是 线性的 输入文件中的行数。 Preprocessing:
主要的
所以总的复杂性是线性的(因为
|
![]() |
3
0
您可以为n个字符串创建一个数组,并将文件的前n行读取到此数组中。对于其余的部分,您读取一行,随机选择数组中的一行,并将该字符串替换为新读取的字符串。此外,还可以将字符串从数组写入输出文件。这样做的好处是,您不需要对文件进行两次迭代。缺点是它不会创建一个非常随机的输出文件,特别是当n很低时(例如,该算法不能在输出中移动最后一行超过n行)。 编辑 在python中仅举一个例子:
|
![]() |
Giampaolo Levorato · 大熊猫随机分层抽样 1 年前 |
![]() |
jenstar · excel-如何使用randbetween选择整行 1 年前 |
![]() |
ssm1020 · R中循环采样中的神秘错误 1 年前 |
![]() |
C0untV · 随机数生成器返回重复值 1 年前 |
![]() |
Yago · Haskell中随机数生成的参数化界 1 年前 |
![]() |
Andrew Kornder · 选择按位操作序列 1 年前 |
|
mani ch · Python:反向猜谜游戏 1 年前 |