代码之家  ›  专栏  ›  技术社区  ›  aaronasterling

选择功率集的随机元素

  •  4
  • aaronasterling  · 技术社区  · 15 年前

    对于我现在正在研究的一个问题,我希望从给定集的powerset中得到一个合理一致的随机选择。不幸的是,这直接涉及到统计学,这是我根本没有研究过的东西(我需要纠正的是,现在我正在进入真正的编程),所以我想运行我的解决方案,一些人知道它。

    如果给定集的大小为n,则存在(n k)=n!/[克!(n-k)!]大小k的子集和功率集的总大小N被给出为从0到N的k上的(nk)之和(也被给出为2 n个 但我觉得这在这里没用。我 能够 很明显

    所以我的计划是把[0,1]分为几个区间:

     [0, (n 0)/N] 
    
     ((n 0)/N, [(n 0) + (n 1)]/N] 
    
     ([(n 0) + (n 1)]/N, [(n 0) + (n 1) + (n 2)]/N]
    
      ... 
    
     ([N - (n n)]/N, 1]
    

    在算法上,区间的构造方法是:取前一区间的最大元素作为新区间的最大下界,再加上(n j)/n得到最大元素。我希望这是清楚的。

    然后,我可以通过在[0,1]中选择一个统一的浮点并将其映射到它所属的区间的索引来计算随机子集中有多少元素。从那里,我可以选择适当大小的随机子集。

    1. 我很确定(从直观的角度来看)我的方案在 大小 子集的(相对于子集的总数统一)。这显然不是一个统一的集合{1,2,…,n}的大小)。

    2. 我正在使用一个库(python的 random.sample )为了得到给定大小的子集,所以我相信这是一致的。

    所以我的问题是,如果按照我描述的方式把这两个放在一起,使得随机大小的随机子集的选择是一致的。如果答案是大量的工作,那么我很高兴接受关于如何证明这一点的建议,并为自己做这项工作。另外,如果有更好的方法,我当然会很高兴。

    2 回复  |  直到 15 年前
        1
  •  9
  •   Greg Hewgill    15 年前

    我想你要走很长的路。当你提到电源组的大小是2的时候 n个 . 如果要选择一组大小的幂集的随机元素 n ,生成[0,2]范围内的随机整数 n个

    例如,假设S={a,b,c,d,e}。然后电源组包含2个 5个 =32个元素。生成从0到31的随机数,例如18。18的二进制表示是10010,因此您可以选择S的第一个和第四个元素,然后您的幂集的随机元素是{a,d}。

        2
  •  3
  •   starblue    15 年前

    推荐文章