![]() |
1
4
我想不出一种方法来随机地完成整个文件,而不必以某种方式维护已经写入的内容的列表。我想如果我必须做一个内存高效的洗牌,我会扫描文件,为新的行建立一个偏移列表。一旦我有了这个新行偏移列表,我将随机选择其中一个,将其写入stdout,然后将其从偏移列表中删除。 我不熟悉Perl或Python,但可以用PHP演示。
我能想到的另一个选择是,如果扫描文件中的新行是绝对不可接受的,那就是(我不会将这一行编码出来):
|
![]() |
2
3
下面的算法是 线性的 输入文件中的行数。 Preprocessing:
主要的
所以总的复杂性是线性的(因为
|
![]() |
3
0
您可以为n个字符串创建一个数组,并将文件的前n行读取到此数组中。对于其余的部分,您读取一行,随机选择数组中的一行,并将该字符串替换为新读取的字符串。此外,还可以将字符串从数组写入输出文件。这样做的好处是,您不需要对文件进行两次迭代。缺点是它不会创建一个非常随机的输出文件,特别是当n很低时(例如,该算法不能在输出中移动最后一行超过n行)。 编辑 在python中仅举一个例子:
|
![]() |
CXB · 洗牌-无重复JAVA 7 年前 |
![]() |
Eltorrooo · 为什么哈希集中的顺序从未改变?[副本] 7 年前 |
![]() |
Muiter · Foreach循环在输出时被洗牌[重复] 7 年前 |
![]() |
Sparrky · 我如何从无序函数中获取输出并围绕DOM元素移动? 7 年前 |
![]() |
Paul · 如何在php shuffle中组合两个数组 7 年前 |
![]() |
Sergio Manchado · 在两个列表之间随机移动元素 7 年前 |
![]() |
Joe · 无序排列内爆数组(HTML复选框到数组)[重复] 7 年前 |
![]() |
Roald · 围绕NA值对向量的部分顺序重新排序 7 年前 |