假设我有一个数据库:
k
篇l
个字词m
令牌要搜索所有文章标题中的每个标记m * k * l
我是否正确地认为这是O(n)
?
答案 0 :(得分:1)
在下文中,我将假设每个单词的长度都不超过w。
除非在某处定义n,否则谈论O(n)时间在数学上并不合适。如果你将n解释为给你的输入的总长度(写出所有文章和搜索查询所需的位数),那么你就得到n =(kl + m)w。
请注意,除非w是常量,否则您的算法不在时间O(mlk)中运行。更确切地说,它是O(mlkw)。由于n = lkw + mw,在对n的解释下,你的运行时不会是O(n)。
也就是说 - 通过使用更好的数据结构,您可以显着提高算法的运行时间。如果你构建一个包含所有单词的trie(花费时间mw),那么你可以及时查找每个单词O(w)。这意味着由于要考虑总共kl个字,因此搜索时间为O(mw + lkw),其中 是线性的。
希望这有帮助!