当前位置:嗨网首页>书籍在线阅读

04-线性搜索

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.1.2 线性搜索

基因需要执行的一项基本操作就是搜索指定的密码子,目标就是简单地查找该密码子是否存在于基因中。

线性搜索(linear search)算法将按照原始数据结构的顺序遍历搜索空间(search space)中的每个元素,直到找到搜索内容或到达数据结构的末尾。其实对搜索而言,线性搜索是最简单、最自然、最显而易见的方式。在最坏的情况下,线性搜索将需要遍历数据结构中的每个元素,因此它的复杂度为O(n),其中n是数据结构中元素的数量,如图2-2所示。

14.png

图2-2 在最坏情况下,线性搜索将需要遍历数组的每个元素

线性搜索函数的定义非常简单。它只需要遍历数据结构中的每个元素,并检查每个元素是否与所查找的数据相等。代码清单2-6所示的代码就对 GeneCodon 定义了这样一个函数,然后尝试对 my_gene 和名为 acggatCodon 对象调用这个函数。

代码清单2-6 dna_search.py(续)

def linear_contains(gene: Gene, key_codon: Codon) -> bool:
    for codon in gene:
        if codon == key_codon:
            return True
    return False
acg: Codon = (Nucleotide.A, Nucleotide.C, Nucleotide.G)
gat: Codon = (Nucleotide.G, Nucleotide.A, Nucleotide.T)
print(linear_contains(my_gene, acg))  # True
print(linear_contains(my_gene, gat))  # False

注意  上述函数仅供演示。Python内置的序列类型( listtuplerange )都已实现了 __contains__() 方法,这样就能简单地用 in 操作符在其中搜索某个指定的数据项。实际上, in 运算符可以与任何已实现 __contains__() 方法的类型一起使用。例如,执行 print(acg in my_gene) 语句即可在 my_gene 中搜索 acg 并打印出结果。