一、 算法入门

博主在市面上发现了很多,很多有关书算法的书籍,但是真正能够让初学者易懂的算法书籍,只是一点点,以下我讲以

Aditya Bhargava写的一本关于算法的入门书籍,为参考,这本书非常的优秀,浅显易懂,图文并茂!带你走进算法的世界,要知道,作为一名优秀的程序员,不会算法是不行滴。

书籍的地址,可以给博主留言,也可以加我QQ或者微信,欢迎你和我一起来探讨,编程世界的秘密

二、 算法简介

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

算法是计算机的灵魂

  • 我们学习算法可以干些什么呢?
具体说来,我们可以实现编写跟着用户的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简单易学

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

三、对于算法的效率

  1. 通过前面的学习,我们可能绝对这个二分查找好像并没有多块啊,但是如果你要查找40亿个数据,使用二分查找你只需要35次

\[log_240(亿)= 35
\]

\[log_2100 \approx7
\]

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

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

  1. 我们可以这样子去理解,所谓的大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表示法的运行速度

五、总结

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

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

\[二分算法:O_(log_2n)
\]

  • 算法的运行时间不是s为单位,而是以其运算的增速角度来度量的
  • 运算时间可以用大O来表示

算法入门——二分查找,旅行商问题,大O表示法的更多相关文章

  1. 【算法】二分查找法&大O表示法

    二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...

  2. 分治算法(二分查找)、STL函数库的应用第五弹——二分函数

    分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...

  3. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...

  4. JS算法之二分查找

    二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是 多维数组,只要有序,就可以用二分查找来优化. 二分查找是一种「分治」思想的算法,大概流程如下: 1.数组中排在中 ...

  5. Java查找算法之二分查找

    二分查找是一种查询效率非常高的查找算法.又称折半查找. 一.算法思想 有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功. 一个情景:将表中间位置 ...

  6. Python 算法之二分查找

    二分查找 二分查找又称折半查找 优点是比较次数少,查找速度快,平均性能好 缺点是要求待查表为有序表,且插入删除困难 折半查找方法适用于不经常变动而查找频繁的有序列表. 猜数字游戏 1.生成一个有序列表 ...

  7. Java实现四大基本排序算法和二分查找

    Java 基本排序算法 二分查找法 二分查找也称为折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜 ...

  8. python算法之二分查找

    说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...

  9. 数据结构与算法之PHP查找算法(二分查找)

    二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...

随机推荐

  1. 【DSP】TMS320F28335的GPIO

    --> 关于TMS320F28335的GPIO的基础操作 TI的c2000系列DSP大多数的外设信号与通用输入/输出 (GPIO) 信号复用. 这使得用户能够在外设信号或者功能不使用时将一个引脚 ...

  2. Docker系列五: docker-compose部署Docker容器

    Docker使用Dockerfile来实现对现有镜像的修改来创建新的镜像, 那docker-compose则完成镜像的自动部署, 可以实现多个容器同时部署 Dockerfile可以让用户管理一个单独的 ...

  3. scala编程(八)——函数和闭包

    当程序变得庞大时,你需要一些方法把它们分割成更小的,更易管理的片段.为了分割控制流,Scala 提供了所有有经验的程序员都熟悉的方式:把代码分割成函数.实际上,Scala 提供了许多 Java 中没有 ...

  4. 比率(ratio)|帕雷托图|雷达图|轮廓图|条形图|茎叶图|直方图|线图|折线图|间隔数据|比例数据|标准分数|标准差系数|离散系数|平均差|异众比率|四分位差|切比雪夫|右偏分布|

    比率是什么? 比率(ratio) :不同类别数值的比值 在中文里,比率这个词被用来代表两个数量的比值,这包括了两个相似却在用法上有所区分的概念:一个是比的值:另一是变化率,是一个数量相对于另一数量的变 ...

  5. [LC] 222. Count Complete Tree Nodes

    Given a complete binary tree, count the number of nodes. Note: Definition of a complete binary tree ...

  6. 吴裕雄--天生自然 HADOOP大数据分布式处理:安装配置JAVA

    tar -xzvf jdk-8u151-linux-x64.tar.gz -C /usr/local/src sudo vim /etc/profile .编辑/etc/profile # JAVA ...

  7. java开发环境搭建(jdk安装)和经常出现问题的探讨

    面对许多java初学者环境搭建出现的问题 第一步: 1,首先在可以百度jdk进入oracle的官网也可以进入这个网站 https://www.oracle.com/technetwork/java/j ...

  8. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  9. OLED带来全新视觉体验

    2013年1月,在国际消费电子展(CES)上世界首款曲面OLED电视--LG OLED电视亮相,LG Display将曲面与OLED完美结合的面板技术让显示设备的外观和品质都达到了一个全新的高度,惊艳 ...

  10. require.ensure和require.context

    require.ensure和require.context https://www.cnblogs.com/fantasy-zxf/p/6760390.html https://www.jiansh ...