给定 BLAST 的时间复杂度是多少?

What is the time complexity of the given BLAST?

这是 BLAST(基本局部比对搜索工具)图。如何计算它的时间复杂度?

BLAST算法步骤:

  • 正在创建查询序列长度为 W 的单词列表。

  • 在数据库中搜索W字

  • 命中序列的延长,即找到的序列,以及分配分数。这些序列将由局部比对给出。

  • 采用所谓的 HSP(高分段对)。

第一步耗时O(n),其中n是序列中元素的数量。

第二步是对第一步中创建的词(上界n)进行另一个循环,所以时间O(n)

第三步分配命中分数。这只能逐个字母地完成,因此时间复杂度为 O(n*m),其中 m 是查询词中的字母数。作为上限,我们可以说时间是 O(n^2)

第四步简单循环得到分数,所以一直O(n)。

总之,该算法可以同化为 O(n^2),在 m << n 的情况下,我们可以说 O(n*m)。下限是 O(n).