算法入门——二分查找,旅行商问题,大O表示法
一、 算法入门
博主在市面上发现了很多,很多有关书算法的书籍,但是真正能够让初学者易懂的算法书籍,只是一点点,以下我讲以
Aditya Bhargava写的一本关于算法的入门书籍,为参考,这本书非常的优秀,浅显易懂,图文并茂!带你走进算法的世界,要知道,作为一名优秀的程序员,不会算法是不行滴。
书籍的地址,可以给博主留言,也可以加我QQ或者微信,欢迎你和我一起来探讨,编程世界的秘密

二、 算法简介
所谓的算法是一组完成任务的指令,这个任务可以是有关数学的,也可以是有关功能的实现,
算法是计算机的灵魂
- 我们学习算法可以干些什么呢?
具体说来,我们可以实现编写跟着用户的AI系统,编写推荐系统,当然了还有NP的一些问题。不过呢,准备好掉头发了吗?让我们一起来掉头发吧!!
第一个算法——二分查找
所谓的二分查找算法,是一个非常简单的入门算法,它的目的是加快数据的查找
1.让我们从需求出发
- 我这里现在有1~10的数子,我现在随机说一个数组,你去猜。我们基本上可以使用两种方法
- 一个一个的去猜,假如我说的1那么恭喜你,你一下子就猜到了。要是我说的是10?那你可能要猜10次
- 使用二分查找法,假如我说的1那么你可以猜5,我说”不对,大了“,那你又说”2”,我说“不对,大了”,如何你又猜到1,我说 “猜对了“这时候,你只需要猜3次就猜到了
- 在大量的数学论证中,我们可以用数学公式对二分查找所需要的最大次数,得出这样的一个公式
\]
它指的是如果你在n个要查找的元素中,需要找一个元素,那么你最多需要x步。
- 注意如果你连上述的公式都看不懂,那么我也许会怀疑你的高数是不是体育老师教的了。
- 需要提醒你的是,这n个元素要有顺序!,也就是说 如果是一个无序的组合,那么这个算法行不通
2. 如何用代码表示呢?(Python)
特别需要你注意的是:我们这选用python做为编程语言,python简单易学
博主比较忙,简单的代码就不敲了,复杂一些的会带着大家敲一下

三、对于算法的效率
- 通过前面的学习,我们可能绝对这个二分查找好像并没有多块啊,但是如果你要查找40亿个数据,使用二分查找你只需要35次
\]
\]
- 那么我们如何用另一种算法来表示,它运算的时间呢?
难不倒我们伟大的程序员,这里哟一种叫做大O表示法,一张图告诉你
- 我们可以这样子去理解,所谓的大O表示法,其实是 从算法运算的时间增量的角度来衡量的,它没有单位
例子1:比如下面的例子,有助于你的理解,
假设还是二分查找和普通的算法,查找一次需要用到1毫秒ms,从n个中找一个元素,n=100时,普通算法需要的时间是100ms,而二分查找需要的时间约等于7ms,当n=1000时,普通算法是10s,二分查找需要耗费14ms,
有此我们可以使用以下的公式来表示,它们运行的速度
\]
\]
我们这里的()括号里的数表示的操作数,表示执行这个算法需要操作多少步,或者说操作多少次。
例子2:现在有一个需求,在一张纸上面绘制16个各种,那么如何用大O表示法,来观察它的运行速度呢?
算法1:一个一个的去画,你需要画16次,
算法2:二分的去画,只需要画4次,这个4怎么得来的呢?我们能不能用数学表示出来呢?当然可以,看我们的公式
\]
所以在例子二中,算法1,2用大O表示法就是
\]
\]
再说一遍,我们的运行速度指是运算的时间的增量
1.我这里指出了参加的大O运行时间

再来一个简单的例子:
还是要绘制16个各种,如果现在要求绘制的1024的格子呢?我们如何用以上的5种表示法表示出来?

- 实际上,不可能如此干净的把大O运行时间转化为操作数,就目前来看,这种情况下的精度就够了,后面我们再来深入的套路大O表示法
2.总结一下
四.有趣的问题(旅行商的问题)
这是一个著名的计算机科学领域的问题,它充分的表示了最后一种大O表示法的运行速度

五、总结
- 二分查找的速度要快于简单查找
\]
\]
- 算法的运行时间不是s为单位,而是以其运算的增速角度来度量的
- 运算时间可以用大O来表示
算法入门——二分查找,旅行商问题,大O表示法的更多相关文章
- 【算法】二分查找法&大O表示法
二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...
- 分治算法(二分查找)、STL函数库的应用第五弹——二分函数
分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...
- JS算法之二分查找
二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是 多维数组,只要有序,就可以用二分查找来优化. 二分查找是一种「分治」思想的算法,大概流程如下: 1.数组中排在中 ...
- Java查找算法之二分查找
二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...
- Python 算法之二分查找
二分查找 二分查找又称折半查找 优点是比较次数少,查找速度快,平均性能好 缺点是要求待查表为有序表,且插入删除困难 折半查找方法适用于不经常变动而查找频繁的有序列表. 猜数字游戏 1.生成一个有序列表 ...
- Java实现四大基本排序算法和二分查找
Java 基本排序算法 二分查找法 二分查找也称为折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜 ...
- python算法之二分查找
说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...
- 数据结构与算法之PHP查找算法(二分查找)
二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...
随机推荐
- 48)PHP,工厂模式
为啥需要工厂模式啊: (原来是生产类的工具——————————) 工厂类的代码格式: <?php class factory{ //Instance表示“实例”,“对象” static func ...
- RPM包和YUM仓库管理
1.RPM包管理 RPMRPM Package Manger,前身Redhat Package Manger,由红帽开发用于软件包的安装升级卸载与查询有一个完整的数据库体系,每个RPM包的所有信息都固 ...
- Django获取当前时间和Linux系统时间不一致
配置文件中修改:TIME_ZONE的值改为上海,USE_TZ的值改为False,重启项目即可
- numpy模块介绍
import numpy as np np.array([1,2,3]) array([1, 2, 3]) np.array([[1,2,3],[4,5,6]]) array([[1, 2, 3], ...
- Yii框架的学习指南(策码秀才篇)1-1 如何认识Yii framework
Yii的框架和其他框架的区别在于:它是更加 快速,安全,专业的PHP框架 Yii是一个高性能的,适用于开发WEB2.0应用的PHP框架. Yii是一个基于组件.用于开发大型 Web 应用的 高性能 P ...
- JDK和Spring中的设计模式
创建型 1)工厂方法 Collection.iterator() 由具体的聚集类来确定使用哪一个Iterator 2)单例模式 Runtime.getRuntime() 3)建造者模式 StringB ...
- windows下redis的配置和jedis api的最基本的使用
redis的安装直接跳过 1.注册redis服务 在DOM窗口下,进入redis的安装目录(可以先进入安装目录,然后shift+右键,选择在此处打开powershell窗口), 输入命令: redis ...
- java基础归纳
目录 1.java的8种基本数据类型: 2.java的三大特性 3.[public.private.protected区别]-访问权限 4.重载与重写区别 5.Throwable类.Error与Exc ...
- node+express+MongoDB实现小商城服务端
https://blog.csdn.net/qq_28027903/article/details/82868313
- scarky test
