阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.《算法图解》

第1章 算法简介

1.2 二分查找

  • 一般而言,对于包含n个元素的列表,用二分查找最多需要\(log_2n\)步,而简单查找最多需要n步

  • 仅当列表是有序的时候,二分查找才管用

  • python猜数字代码(二分查找)

    def binarySeach (list,item):
    low = 0
    high = len(list) - 1
    while low <= high:
    mid = (low + high) // 2
    guess = list[mid]
    if guess == item:
    return mid
    if guess > item:
    high = mid - 1
    else:
    low = mid + 1
    return None myList = [1,3,5,7,9,11,13]
    print(binarySeach(myList,5))
    print(binarySeach(myList,-1))
  • 一般而言,应选择效率高的算法,以最大限度地减少运行时间或占用空间

  • 线性时间

    在计算复杂性理论,一个被称为线性时间或 Ο(n)时间的算法,表示此算法解题所需时间正比于输入资料的大小,通常以n表示。换句话说,执行时间与输入资料大小为线性比例。例如将一列数字加总的所需时间,正比于串行的长度。

    来自<百度百科>

  • 对数时间 : 二分查找的运行时间

1.3 大O表示法

  • 大O表示法是一种特殊的表示法,指出了算法的速度有多快

    大O表示法:算法的时间复杂度通常用大O符号表述,定义为\(T_{[n]} = O_{(f(n))}\)。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n)。T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。

    来自<百度百科>

  • 仅知道算法需要多长时间才能运行完毕还不够,还需知道运行时间如何随列表而增加.这正是大O表示法的用武之地
  • 大O表示法能够比较操作数,它指出了算法运行时间的增速
  • 大O表示法说的是最糟的情况.选择算法时,除考虑最糟情况下的运行时间外,还应考虑平均情况下的运行时间
  • 一些常见的大O运行时间
    • \(O _{(logn)}\),也叫对数时间,这样的算法包括二分查找
    • \(O _{(n)}\),也叫线性时间,这样的的算法包括简单查找
    • \(O _{(n^*logn)}\),这样算法包括快速排序(一种较快的排序算法)
    • \(O _{(n^2)}\),这样的算法包括选择排序(一种速度较慢的排序算法)
    • \(O _{(n!)}\),也叫阶乘时间
  • 从快到慢的顺序:

    • 算法的速度指的并非时间,而是操作数的增速
    • 谈论算法的速度时,我们说的是随着输入的增加,其运行将以什么样的速度增加
    • 算法的运行时间用大O表示法表示
    • \(O _{(logn)}\)比\(O _{(n)}\)快,当需要搜素的元素越多时,前者比后者快得越多

1.3.5 旅行商

  • 一位旅行商要前往这5个城市,同时要确保旅程最短,为此要考虑前往这些城市的各种可能.5个城市有120种不同的排列方式.推而广之,涉及n个城市,需要执行n!(n的阶乘)次操作才能计算出结果,因此运行时间为\(O _{(n!)}\).这种算法很槽糕,可别无选择.

1.4 小结

  • 二分查找的速度比简单查找快得多
  • 算法运行时间并不以秒为单位,是从其增速的角度度量的,用大O表示法表示

<算法图解>读书笔记:第1章 算法简介的更多相关文章

  1. <算法图解>读书笔记:第4章 快速排序

    第4章 快速排序 4.1 分而治之 "分而治之"( Divide and conquer)方法(又称"分治术") ,是有效算法设计中普遍采用的一种技术. 所谓& ...

  2. <算法图解>读书笔记:第3章 递归

    第3章 递归 3.1 递归 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一 ...

  3. <算法图解>读书笔记:第2章 选择排序

    第2章 选择排序 2.1 内存的工作原理 需要将数据存储到内存时,请求计算机提供存储空间,计算机会给一个存储地址.需要存储多项数据时,有两种基本方式-数组和链表 2.2 数组和链表 2.2.1 链表 ...

  4. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  5. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  6. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  7. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  8. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  9. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

随机推荐

  1. VMware 安装虚拟机系统

    Ø  简介 本文主要介绍使用 VMware 安装虚拟机系统. 1.   创建虚拟机 1)   打开VMware,创建新虚拟机 2)   选择需要安装系统的iso镜像文件 3)   选择需要安装的Win ...

  2. luogu 1291 概率期望递推

    非常好的递推 公式啥的懒得写了,直接放链接哈哈哈https://www.luogu.org/problemnew/solution/P1291 #include<bits/stdc++.h> ...

  3. JQuery基本知识、选择器、事件、DOM操作、动画

  4. ccf 201712-4 行车路线(30分超时)

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  5. windows 系统后台运行 jar 包

    windows平台下 后台运行 jar 包 1.cmd 下执行方式:后台运行  start /min java -server -Xms1024m -Xmx20480m -jar $JAR_NAME. ...

  6. vueSSR全栈(项目实战 mac)

    1.准备安装及指定版本 参考安装类中的 安装部分(node,npm,webpack) nuxt 官网下载nuxt脚手架(可以自定义版本) 需要下载MongoDB  redis 以及数据库可视化工具 具 ...

  7. sql报错注入:extractvalue、updatexml报错原理

    报错注入:extractvalue.updatexml报错原理 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue.updatexml 名称 描述 Ext ...

  8. Linux使用CFSSL自签TLS证书

    ⒈安装CFSSL wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson ...

  9. kruskal重构树学习笔记

    \(kruskal\) 重构树学习笔记 前言 \(8102IONCC\) 中考到了,本蒟蒻不会,所以学一下. 前置知识 \(kruskal​\) 求最小(大)生成树,树上求 \(lca​\). 算法详 ...

  10. Input子系统(二)【转】

    转自:http://blog.chinaunix.net/uid-25047042-id-4192368.html 上一篇中粗略的分析了下input_dev,input_handle,input_ha ...