Big O表示词列表排列的表示法

时间:2014-09-09 02:10:17

标签: algorithm big-o

长度单词列表中字符排列列表长度的大O符号是什么?

我只是不知道如何表达,因为它会像n!对于每个单词,其中n是该单词的字符,但O(n!)只是单个单词的复杂性,而不是n个单词的列表。

此外,每个单词可能有不同的大小。

一个例子:

让我们说我有" abc"," abcd"和" abcde"。如果我必须创建每个单词的排列,我最终会得到一个长度为6,24和120的字符串列表,即" abc"的排列。将在第一个列表中,第二个单词的排列将在第二个单词中,依此类推,等等。

如果我使用置换迭代器,生成所有列表需要多长时间?

1 个答案:

答案 0 :(得分:1)

由于BigO代表一个上限,你可以放心地说有O(k*n!)个字符串,其中n是最长输入字的长度(因为在最坏的情况下,所有字符串都会有相同的然后会有完全k*n!个排列,在一个更好的情况下,变量长度的数字将为< k*n!,但符号O(k*n!)仍然有效。

如果您有关于这些长度分布的其他信息,我们可以尝试更严格的约束: - )

@Edit:正如@Aron指出的那样,如果你没有重复的角色,这是一个非常漂亮的(我不会在这里变得非常正式)。有了重复的字符,它仍然是一个有效的上限,但更严格的界限是O(k*a^n),其中a是我们字母表的大小(26如果你使用英语,超过110,000,如果你是使用Unicode)这最终会比O(k*n!)更严格。这是因为在一个单词的每个n个插槽中,您可以放置​​一个a个字符,并注意到重复字符a可能比{{1}更小(甚至更小) }}