【问题标题】:Script to calculate the product of numbers in all possible combinations计算所有可能组合中数字乘积的脚本
【发布时间】:2014-08-05 09:17:12
【问题描述】:

我有一个 db 的数字(百分比),我想计算所有数字的每个可能组合的乘积以及它们与 100% 的差异。

例如,对于以下数字: 0.3, 0.4, 0.6, 0.7

我要计算以下内容:

  (1-0.3)*(1-0.4)*(1-0.6)*(1-0.7)
  0.3*0.4*0.6*0.7
  0.3*(1-0.4)*(1-0.6)*(1-0.7)
  (1-0.3)*(1-0.4)*(1-0.6)*0.7
  (1-0.3)*0.4*(1-0.6)*(1-0.7)
  (1-0.3)*(1-0.4)*0.6*(1-0.7)
  0.3*(1-0.4)*(1-0.6)*0.7
  0.3*(1-0.4)*0.6*(1-0.7)
  (1-0.3)*(1-0.4)*0.6*0.7
  (1-0.3)*0.4*(1-0.6)*0.7
  (1-0.3)*0.4*0.6*(1-0.7)
  0.3*0.4*(1-0.6)*(1-0.7)
  (1-0.3)*0.4*0.6*0.7
  0.3*(1-0.4)*0.6*0.7
  0.3*0.4*(1-0.6)*0.7
  0.3*0.4*0.6*(1-0.7)

我希望能够为任何 n 个数字构建这个(这里我举了一个 4 个数字的例子,但可能有成百上千个)。怎么称呼?他们有命令吗?某处有已知的脚本吗? 最后,我需要总结它们。也可以单独使用它们。

【问题讨论】:

    标签: arrays calculated-columns date-arithmetic cartesian-product


    【解决方案1】:

    我认为任何语言都没有为此预先定义的命令,但大多数语言都允许您为此编写递归函数。例如,在 Haskell 中,您可以使用:

    calculate [] = [[]]
    calculate (x:xs) = let rec = calculate xs
                           pos = map (x:) rec
                           neg = map ((1 - x):) rec
                       in pos ++ neg
    

    您可以试试here 并使用以下代码运行您的示例:

    main = print (calculate [0.3, 0.4, 0.6, 0.7])
    

    请注意,此calculate 函数将百分比列表作为输入并返回列表列表,每个列表代表所需结果中的一行。然后,此结果可用于计算您的中间结果和最终结果。

    该功能的工作原理如下。如果您的输入是一个空列表,则返回一个包含空列表的列表。如果输入有元素,则将第一个元素 (x) 与列表的其余部分 (xs) 分开,然后计算列表其余部分的结果。其结果是一个包含百分比列表的列表,该列表存储在rec 中。

    要计算结果值,请将x 附加到rec(存储在pos)中的每个列表之前,并将1-x 附加到rec(存储在neg 中)的每个列表之前。结果,我们返回一个列表,它是posneg 的串联。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多