V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
allencpp
V2EX  ›  问与答

问一道非常白痴的算法问题,我一时间脑子不转了

  •  
  •   allencpp · 2016-10-18 23:25:20 +08:00 · 1387 次点击
    这是一个创建于 2960 天前的主题,其中的信息可能已经有所发展或是发生改变。
    譬如 A,B 两个字母,可以重复出现 N 次,有多少排列组合的结果?
    譬如 N=1 重复出现一次,那就是 AB 和 BA 2 种
    N=2 重复出现两次,那就是 AABB,BBAA,ABAB,BABA,ABBA,BAAB 6 种(如果我没算错)
    N=3 以此类推 AAABBB , BBBAAA 。。。。。

    求这种行为的 N 的算法
    neosfung
        1
    neosfung  
       2016-10-19 10:30:54 +08:00
    很简单的问题
    假设现在有 2N 个空洞,让你随机挑 N 个空洞放球,求问多少种组合。
    那就是 C(2N,N)
    allencpp
        2
    allencpp  
    OP
       2016-10-19 14:54:36 +08:00
    @neosfung 如果要把组合全部罗列出来,如何实现呢。。。?
    SoloCompany
        3
    SoloCompany  
       2016-10-20 00:46:28 +08:00
    @allencpp 排列组合是概率论最基本的概念了吧
    C(N,M) (N>M) 求 M 个无序的球放在长度为 N 的位置上的可能数量
    第 1 个球有 N - M 种可能的位置
    针对这 N - M 中可能位置
    在放好第 1 个球后(假设位置为 i ),第 2 个球就只剩下 N - M - i 个可选位置
    以上其实就是个数学归纳法,也就是说可以递归实现

    程序完全可以遵循上面的过程进行模拟
    遍历完所有 C(N,M) = N!/M!(N-M)! 种可能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1067 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:14 · PVG 03:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.