【问题标题】:Number of sequences over {0,1} such that sequence contains at least half ones{0,1} 上的序列数,使得序列至少包含一半
【发布时间】:2010-12-04 21:43:12
【问题描述】:

如何计算 {0,1} 上的序列数,使每个序列至少包含一半?

【问题讨论】:

  • 这听起来像是家庭作业,对吧?
  • 这不是一个真正的家庭作业问题,但它可能是相关的。

标签: algorithm runtime complexity-theory


【解决方案1】:

长度为n的序列总数为2^n。如果 n 是奇数,则它们中的一半 (2^(n-1)) 至少有一半。 即使是 n,您也必须考虑到有 n!/((n/2)!^2) 个序列正好是一半。所以在这种情况下,我认为你总共有 (1/2)*(2^n + n!/((n/2)!^2))。

【讨论】:

    【解决方案2】:

    假设序列的总长度为n,包含n/2个1的序列数为:

    n!/((n/2)!^2)

    编辑:

    对不起,我弄错了。我的意思是n!/((n/2)!^2),但不是n!/(2*(n/2)!)。我将其视为combination 问题并使用了以下公式。 (用n/2替换k

    【讨论】:

    • 注意,分母中的阶乘运算符放错了...(括号内需要)
    • 我们以 n = 2 为例。在这种情况下,您的公式得出 1。但我数了 2 个这样的序列:(0, 1) 和 (1, 0)。
    • @Henrik / @pierr 我认为 pierr 的意思是 n!/((((n/2)!)^2) 可能的解释是 pierr 沿着我提供的证明的一般范围思考,但是 添加了 (n/2)!因素而不是乘以它们。
    【解决方案3】:

    编辑:该死!我们(我)应该始终仔细阅读问题!
    下面涉及枚举 0 和 1 的数量相等的序列的数量!实际问题是0的个数应该小于等于1的个数!!!

    皮尔的公式,n!/(2*(n/2)!)几乎是正确的,实际上是,n!/((n/2)!*(n /2)!)

    但这可能需要一点解释(双关语;-))。

    n 是总长度,我们知道 n 必须是偶数,因为问题需要相同数量的 0 和 1。

    让我们专注于放置 0。对于长度为 n 的序列,我们有 n/2 个零位,用于放入序列的 n 个位置之一。我们只需要计算 0 位,因为在那之后将没有关于 1 位的选择:所有其他位置都需要一个 1。

    所以... n/2 个零位,对于 n 个位置...有 n 种方法来选择第一个位置,然后有 (n-1) 种方法来选择第二个位置 (两个位不能占据相同的位置)等。 因此,这个选择的数量是

      n! / (n/2)!
    

    例如,对于 n=6,我们有

           6 * 5 * 4 choices,  
           which, by multiplying and dividing by (3*2*1) is equivalent to
        =  6 * 5 * 4 * (3 * 2 * 1) / (3 * 2 * 1)   
        =  6! / 3!
        =  n! / (n/2)!  (a)
    

    现在...其中一些选择 [关于将第一位、第二位等放在哪里] 导致相同的组合,因为所有零位都是相同的,因此是否一个假设 x 位置的“第一个”位和位置 y 的“第二”位,或者第一个到 y 和第二个到 x,我们会有相同的组合。有 (n/2) 个!排列这些 n/2 位的方法。在 n = 6 的示例中,有 3 种方法可以选择“第一位”位的位置,2 种方法选择第 2 位,1 种方法选择最后一个零位。完整的公式则需要 (a) 除以 (n/2)!,即:

      n! / (n/2)! * 1/(n/2)! 
    = n! / ((n/2)! * (n/2)!)
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 2020-04-05
      • 2015-09-20
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      相关资源
      最近更新 更多