500 选 200 怕内存不够用吗?来继续死磕排列组合,附带我的分享和提问

Power Query wangwb ⋅ 于 2020-05-09 13:40:56 ⋅ 最后回复由 wangwb 2020-05-09 15:41:56 ⋅ 2053 阅读

终极目标:快速找出一个大数的排列组合结果个数
以下是我目前做到的程度

第一行下方的数字表示该数选1-9的结果个数                                   

规律 n选0=1
n选1=n
n选n=1
n选(n-1)=n
n选x=(n-1)选x+(n-1)选(x-1)
n选x=(n-1)选(x-1)+(n-2)选(x-1)+…+(x-1)选(x-1)
n选0到n选n=2^n
对称性 n为奇数时: 2^n/2= n选0到n选 intergerdivid(n,2)
n为偶数时:(2^n-n选(n/2))/2=n选0到n选n/2-1 也等于n选(n/2+1)到n选n
已知:n选0=1,n选1=n,n选n=1
理论上来说,根据n选x=(n-1)选x+(n-1)选(x-1),知道了2选1,2选2,就知道了3选1到3选3,进而就知道了4选1到4选4,也就知道了n选1到n选n。
反过来推也是可以的,n选x=(n-1)选x+(n-1)选(x-1) ,是一个巨大的树状结构,一分2,2分4,4分8.。。

至于为什么n选0到n选n 结果为2^n次方,可以举个例子
如,有7个瓶子,只有一个瓶子里有毒药,现在只有3只小白鼠,如何用这3只老鼠去检验出毒药瓶子?
对于不了解2进制的人来说,肯定是先一个个去凑,每只老鼠单独喝几瓶,经过各种排列组合得到结果,当然,如果只是停留在傻傻的排列组合阶段,是很难凑出结果的,多看几遍题目会发现, 原来就是求 3只老鼠有多少种死法,一种死法对应一个瓶子,多少种死法就能排查多少个瓶子, 那3的排列组合最大数就是 3选1+3选2+3选3=7,刚好7个瓶子一一对应,最终肯定能找到哪个瓶子是毒药。   如果是2进制的解法直接2的3次方=8,8大于7所以3只老鼠就够用。
瓶子  老鼠1 老鼠2 老鼠3

1 1 0 0
2 0 1 0
3 0 0 1
4 1 1 0
5 1 0 1
6 0 1 1
7 1 1 1
0 0 0
file

我的问题是, 如何将这些规律性的东西写成一个迭代公式?或者循环递归之类的?从而达到无论多大的数 都可以根据这个迭代求排列组合数的结果, 而不需要用 acc+transformmany 去算具体过程,因为数量太多 计算时长长且几亿个结果也无法导出。

file

成为第一个点赞的人吧 :bowtie:
回复数量: 9
  • deadzlq 无我,亦无期
    2020-05-09 14:30:03

    参考PQ M函数 Number.Combinations

    file

  • 小熊
    2020-05-09 14:45:08

    @deadzlq 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

  • wangwb
    2020-05-09 14:56:59

    说错了,我对这个不感兴趣,excel里也有combin公式没必要跑到pq里做,我感兴趣的是弄成迭代之类

  • wangwb
    2020-05-09 15:17:46

    @deadzlq 或者说要的是combin的底层逻辑,光这个公式excel里面早就知道了啊,不然写这么大堆结果就是个这公式那有点逗啊

  • deadzlq 无我,亦无期
    2020-05-09 15:28:39

    :+1: 谢谢分享

  • wangwb
    2020-05-09 15:31:29

    @deadzlq ?啥意思

  • wangwb
    2020-05-09 15:32:34

    @小熊 你搞懂了?

  • 小熊
    2020-05-09 15:36:08

    @wangwb 我懂你的意思了,你其实就是想自己用更低级的计算实现高级的排列组合计算,或者说你想弄明白微软自带公式实现的原理

  • wangwb
    2020-05-09 15:41:56

    @小熊 不然整这个表格干嘛

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter