组合或其他方法?

时间:2011-07-02 15:39:50

标签: algorithm string probability combinatorics counting

我最近读过this problem,首先,我想到了一种组合方法,但似乎没有人 - 在参赛者中 - 提交了这样的解决方案。使用组合学的解决方案是否可行?如果没有,解决方案是什么? 问题简单地说是:给定一个M字的字典,其中任何两个字可以连接在一起并且可能彼此重叠一些字母,找到可以从字典中形成多少长度为N的字符串。 组合方法的下行限制为M!,然后对于每两个连续的单词,您应该尝试将它们相交。这就是我的想法。我怀疑它是否有效。请帮帮忙?

2 个答案:

答案 0 :(得分:1)

不要将组合数据与暴力混淆。这显然是一个组合计数问题,但时间限制也排除了任何暴力解决方案。

我认为你可以用dinamic编程来解决这个问题。例如,假设我们的子字符串是“CAT和TCAT”,我们需要覆盖100字的单词

如果我们以“CAT”开头,我们剩下97封信 如果我们从“TCAT”开始,我们剩下96封信。

因此,如果f(n)是大小为n匹配的解的个数,我们将得到f(100)= f(97)+ f(96)。

但是,请注意,这显然过于简单且不够 - 您还需要覆盖字符串重叠的情况,并确保不会对同一解决方案进行两次计算。

答案 1 :(得分:0)

如果忽略重叠,则这是子集求和问题。并且考虑到重叠,如果用它们的连接替换重叠组合,你将获得一组没有重叠可能性的单词,之后如果用它们的长度替换字符串然后想要找到加起来的总和到N,这正是子集和问题。