《算法图解》学习笔记—第1章 算法简介

前言

算法是一组完成任务的指令,任何代码片段都可视为算法。

1.1 二分查找

二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。

应用实例:在电话簿中找一个名字以K打头的人;登录Facebook时,Facebook必须核实你是否有其网站的账户,须在其数据库中查找你的用户名;以最少的次数猜到一个1~100之间的数字。
在这里插入图片描述
对于包含n个元素的列表,用二分查找最多需要 l o g 2 n log_2^n log2n步,而简单查找最多需要 n n n步。二分查找的Python代码如下:

def binary_search(list,item):
    low=0
    high=len(list)-1

    while low <= high:
          mid = (low + high) /2 #如果(low + high)不是偶数,Python自动将mid向下取整
          guess = list[mid]
          if guess == item: #找到了元素
             return mid
          if guess > item: #猜的数字大了
             high = mid - 1
          else:            #猜的数字小了
             low = mid + 1
     return None           #没有指定元素

1.2 大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快。
仅知道算法需要多长时间才能运行完毕还不够,还需知道运行时间如何随列表增长而增加。这正是大O表示法的用武之地。
大O表示法指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O( n n n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。
大O 表示法指出了最糟情况下的运行时间。
在这里插入图片描述

一些常见的大O运行时间

  • O( log ⁡ n \log n logn),也叫对数时间,这样的算法包括二分查找。

  • O( n n n),也叫线性时间,这样的算法包括简单查找。

  • O( n ∗ l o g n n * log n nlogn),这样的算法包括快速排序——一种速度较快的排序算法。

  • O( n 2 n^2 n2),这样的算法包括选择排序——一种速度较慢的排序算法。

  • O( n ! n! n!),这样的算法包括旅行商问题的解决方案——一种非常慢的算法。
    在这里插入图片描述

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

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

  • 算法的运行时间用大O表示法表示。

  • O( l o g n log n logn)比O( n n n)快,当需要搜索的元素越多时,前者比后者快得越多。

  • 大O表示法不考虑乘以、除以、加上或减去的数字。下面这些都不是正确的大O运行时间:O( n n n + 26)、O( n n n - 26)、O( n n n * 26)、O( n n n / 26),它们都应表示为O( n n n),通常不考虑常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值