长度单词列表中字符排列列表长度的大O符号是什么?
我只是不知道如何表达,因为它会像n!对于每个单词,其中n是该单词的字符,但O(n!)只是单个单词的复杂性,而不是n个单词的列表。
此外,每个单词可能有不同的大小。
一个例子:
让我们说我有" abc"," abcd"和" abcde"。如果我必须创建每个单词的排列,我最终会得到一个长度为6,24和120的字符串列表,即" abc"的排列。将在第一个列表中,第二个单词的排列将在第二个单词中,依此类推,等等。
如果我使用置换迭代器,生成所有列表需要多长时间?
答案 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}更小(甚至更小) }}