Python:廉价地生成大的统一排列
作者:互联网
我不确定这在理论上是否可行;但如果是的话,我想知道如何用Python做到这一点.
我想便宜地生成一个大的,随机的排列.例如,假设我想要在范围上排列(10 ** 9).我希望排列是统一的(即我希望数字遍布整个地方而没有任何看似结构.)我想有一个函数可以获得每个n的排列中的第n项,我想要另一个函数可用于获取排列中每个数字的索引.
最重要的条件是这样的:我想做所有这些,而不必存储排列的所有项目. (这可能是一个巨大的空间.)我希望每个项目都可以访问,但我不想存储所有项目,如Python 3中的范围.
这可能吗?
解决方法:
我能看到这种情况并且部分满足你的要求的唯一方法是,如果排列不是随机的,而是看起来是随机的,并且实际上是一个系列,如果你知道a_n-1,你可以从中生成a_n.
看看这个:http://en.wikipedia.org/wiki/Linear_feedback_shift_register
你想要的是最大长度LSFR.它会以看似随机的顺序生成0到2 ** n-1的所有数字.对于不同的n,您需要使用不同的功能.
我认为你不能有函数getIdxOf(val)和getValOf(Idx),除非你只是逐个完成生成函数.
标签:python,permutation,combinatorics 来源: https://codeday.me/bug/20190703/1365307.html