【问题标题】:String possible combinations字符串可能的组合
【发布时间】:2012-08-04 14:32:36
【问题描述】:

假设一个由四个符号组成的字符串,例如s = abcd 仅考虑每个符号只有一个实例的字符串,例如 s=bacd 和 s=dacb 都是有效字符串,但 s=aabc 不是。这给出了 4!可能的组合。

现在,每个符号都可以取值

a = [0, 1]
b = [0, 1, 2, 3]
c = [0, 1]
d = [0, 1, 2]

因此,我最终可能会拥有s=cdab=0112s=abcd=0000s=abdc=1320 等。

我想计算 string 可以有多少组合(不重复)。

我已经编写了一个算法来探测所有不同的组合并丢弃重复项,但我想了解是否可以构造一个返回相同结果的公式(不是所有有效组合的列表,而只是它们的数量) .

谢谢

【问题讨论】:

    标签: combinations


    【解决方案1】:

    如果你采取横向步骤,基于你的例子

    您的成员是 a0,a1,b0,b1,b2,b3 ... d2,这意味着可能的组合是 11!

    【讨论】:

    • 不,这不是 4 的阶乘。
    • 不,不是11!任何一个。让我举一个例子。如果我有 3 个符号 a=[0] b=[0,1] c=[0,1,2] 和 s=abc,那么 s 的可能组合是 (000,001,002,010,011,012)。对于 s=acb,您有 (000,001,010,011,020,021) 等等。您丢弃重复项,并且(在此示例中)留下 16 个组合(000,001,002,010,011,012,020,021,100,101,102,110,120,200,201,210)。我找到了一个在 O(n!) 中运行的算法(在本例中为 3!),但我想知道 O(n) 或 O(1) 是否可行。
    • 好的,我现在知道了。所以 000 可能是 abc, bca, cba ... 等等。现在必须想一想,但必须有一些涉及字母数量的关系,以及每个字母可以表示的值的数量。有趣的是,也许你最好把它移到 math.overflow
    • 在您的示例中,您将 020 作为您想出的 16 个可能组合中的一种。但是,我不太明白这怎么可能是一个组合,因为“2”不在 a 或 b 的集合中。 “2”是集合 c 的最后一个元素。所以如果 020 是一个合法的组合,那么这意味着你正在寻找集合 c 的所有排列,包括集合 c 中任何值的重复。对吗?
    猜你喜欢
    • 2011-03-13
    • 2017-11-11
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多