算法图解 - chapter 1 (读书笔记)

405 阅读1分钟

算法

算法简介

算法是一组完成任务的指令。当数据量比较大的时候,算法的优劣对程序的性能好坏极为重要

衡量算法性能 - 大 O 表示法

  1. 算法的速度指的并非时间,而是操作数的增速

  2. 谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加

  3. 算法的运行时间用大 O 表示法表示

  4. 大 O 表示法指出了最糟情况下的运行时间

  5. O(logn) 比 O(n) 快,当需要搜索的元素越多时,前者比后者快得越多

二分查找

目的: 查找某个数是否存在于数组中

算法: 前提条件:a 为数组,first 和 last 分别指向数组的头尾,mid 指向数组的中间项,value 为要查找的数

如果 first > last, 返回 None(没有找到元素),否则循环执行以下程序:

mid = (first + last) // 2

  1. 如果 a[mid] > value ,查找区间变为[first, mid-1]
  2. 如果 a[mid] < value ,查找区间变为[mid+1, last]
  3. 如果 a[mid] = value ,返回 mid

代码:

def BinarySearch(a, value):
    first = 0
    last = len(a) - 1
    while first <= last:
        mid = (first + last) // 2
        guess = a[mid]
        if guess < value:
            first = mid + 1
        elif guess > value:
            last = mid - 1
        else:
            return mid
    return None

二分查找的时间复杂度:O(logn)