算法入门——二分查找,旅行商问题,大O表示法

1、 算法入门

博主在市面上发现了不少,不少有关书算法的书籍,可是真正可以让初学者易懂的算法书籍,只是一点点,如下我讲以
Aditya Bhargava写的一本关于算法的入门书籍,为参考,这本书很是的优秀,浅显易懂,图文并茂!带你走进算法的世界,要知道,做为一名优秀的程序员,不会算法是不行滴。
书籍的地址,能够给博主留言,也能够加我QQ或者微信,欢迎你和我一块儿来探讨,编程世界的秘密python

2、 算法简介

所谓的算法是一组完成任务的指令,这个任务能够是有关数学的,也能够是有关功能的实现,程序员

算法是计算机的灵魂算法

  • 咱们学习算法能够干些什么呢?
具体说来,咱们能够实现编写跟着用户的AI系统,编写推荐系统,固然了还有NP的一些问题。不过呢,准备好掉头发了吗?让咱们一块儿来掉头发吧!!

第一个算法——二分查找

所谓的二分查找算法,是一个很是简单的入门算法,它的目的是加快数据的查找编程

1.让咱们从需求出发

  • 我这里如今有1~10的数子,我如今随机说一个数组,你去猜。咱们基本上可使用两种方法
  1. 一个一个的去猜,假如我说的1那么恭喜你,你一会儿就猜到了。要是我说的是10?那你可能要猜10次
  2. 使用二分查找法,假如我说的1那么你能够猜5,我说”不对,大了“,那你又说”2”,我说“不对,大了”,如何你又猜到1,我说 “猜对了“这时候,你只须要猜3次就猜到了
  • 在大量的数学论证中,咱们能够用数学公式对二分查找所须要的最大次数,得出这样的一个公式

\[ x=log_2 N,2^3=8,log_28=3,log_22^3=3 \]
它指的是若是你在n个要查找的元素中,须要找一个元素,那么你最多须要x步。数组

  • 注意若是你连上述的公式都看不懂,那么我也许会怀疑你的高数是否是体育老师教的了。
  • 须要提醒你的是,这n个元素要有顺序!,也就是说 若是是一个无序的组合,那么这个算法行不通

2. 如何用代码表示呢?(Python)

特别须要你注意的是:咱们这选用python作为编程语言,python简单易学微信

博主比较忙,简单的代码就不敲了,复杂一些的会带着你们敲一下app

3、对于算法的效率

  1. 经过前面的学习,咱们可能绝对这个二分查找好像并无多块啊,可是若是你要查找40亿个数据,使用二分查找你只须要35次

\[ log_240(亿)= 35 \]
\[ log_2100 \approx7 \]编程语言

  1. 那么咱们如何用另外一种算法来表示,它运算的时间呢?学习

    难不倒咱们伟大的程序员,这里哟一种叫作大O表示法,一张图告诉你
    spa

  2. 咱们能够这样子去理解,所谓的大O表示法,实际上是 从算法运算的时间增量的角度来衡量的,它没有单位

例子1:好比下面的例子,有助于你的理解,

假设仍是二分查找和普通的算法,查找一次须要用到1毫秒ms,从n个中找一个元素,n=100时,普通算法须要的时间是100ms,而二分查找须要的时间约等于7ms,当n=1000时,普通算法是10s,二分查找须要耗费14ms,

有此咱们可使用如下的公式来表示,它们运行的速度

\[ 普通算法:O_(n), \]
\[ 二分算法:O_(log_2n) \]

咱们这里的()括号里的数表示的操做数,表示执行这个算法须要操做多少步,或者说操做多少次。

例子2:如今有一个需求,在一张纸上面绘制16个各类,那么如何用大O表示法,来观察它的运行速度呢?

算法1:一个一个的去画,你须要画16次,
算法2:二分的去画,只须要画4次,这个4怎么得来的呢?咱们能不能用数学表示出来呢?固然能够,看咱们的公式

\[ log_216=4 \]

因此在例子二中,算法1,2用大O表示法就是

\[ 普通算法:O_(n), \]
\[ 二分算法:O_(log_2n) \]

再说一遍,咱们的运行速度指是运算的时间的增量

1.我这里指出了参加的大O运行时间

再来一个简单的例子:
仍是要绘制16个各类,若是如今要求绘制的1024的格子呢?咱们如何用以上的5种表示法表示出来?

  • 实际上,不可能如此干净的把大O运行时间转化为操做数,就目前来看,这种状况下的精度就够了,后面咱们再来深刻的套路大O表示法

2.总结一下

四.有趣的问题(旅行商的问题)

这是一个著名的计算机科学领域的问题,它充分的表示了最后一种大O表示法的运行速度

5、总结

  • 二分查找的速度要快于简单查找

\[ 普通算法:O_(n),比较慢,并且元素越多越慢 \]
\[ 二分算法:O_(log_2n) \]

  • 算法的运行时间不是s为单位,而是以其运算的增速角度来度量的
  • 运算时间能够用大O来表示
相关文章
相关标签/搜索