搜索、排序和复杂度分析

本文是《数据结构(Python语言描述)》Fundamentals of Python:Data Structure(作者Kenneth A. Lambert,译者李军)一书第三章的读书笔记。

1. 评估算法的性能

选择算法时,必须解决时间(运行速度)/空间(内存)的平衡问题。


评估算法的方式

2.搜索算法

2.1搜索最小值

def indexof_min(lyst):
    ''' Return the index of the minimum item'''
    minindex = 0
    current_index = 1
    while current_index < len(lyst):
        if lyst[current_index] < lyst[imnindex]:
            minindex = current_index
        current_index += 1
    return minindex

这个搜索最小值的算法复杂度是O(n)。对于一个大小为n的list, 它必须进行n-1次比较,才能找到最小值的位置。n-1次比较不会随着问题规模的放大而变化,也就是说是线性的,复杂度为O(n)。当然Python的内置函数min()的功能与此相同,这个自定义的函数肯定不会比min()更好用。

2.2搜索匹配项

# 顺序搜索(sequential search)或称线性搜索(linear search)

def line_search(target, lyst):
    positionn = 0
    while position < len(lyst):
        if target == lyst[position]:
            return position
        position += 1
    return -1

上面所说的搜索最小值的算法最好、最坏和平均情况是相同的,为达到目的,必须所有项都要比较一次。而顺序搜索(判断一个元素是否在集合中)最好的情况是O(1),平均和最坏情况都是O(n)。

2.3有序列表的二叉搜索

对于那些没有按照任何特定的顺序排列的数据,顺序搜索是必要的。当搜索已经 排序的数据时,可使用二叉搜索(又称二分搜索)。

def bi_search(target, sorted_list):
    left = 0
    right = len(sorted_list) - 1
    while left <= right:
        mid = (left + right) // 2
        if target == sorted_list[mid]:
            return mid
        elif target < sorted_list[mid]
            right = mid - 1
        else:
            left = mid + 1
    return -1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,045评论 0 13
  • 1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容...
    孙怀阔阅读 12,648评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,237评论 0 52
  • 每个人都想靠自己的一技之长衣食无忧,也想通过职业规划实现人生逆袭。 但你真的会定位吗?你知道你擅长什么、热爱什么吗...
    娟子爱写作阅读 193评论 0 2