普林斯顿公开课 算法1-5:算法理论

普林斯顿公开课 算法1-5:算法理论

本节主要解说的是算法的复杂度。

算法性能

算法的性能分为三种:

  • 最佳情况:计算时间最短的情况

  • 最差情况:计算时间最长的情况

  • 平均情况:随机输入的期望开销

以二分查找为例

最佳情况是1,由于第一次就有可能找到须要找的整数。

最差情况是logN

平均情况是logN

算法复杂度

算法复杂度用于定义问题的难度,另外也有助于开发最优化的算法,算法复杂度能够通过分析最坏情况来降低输入数据对算法性能的影响。

为了简化问题难度的表示方法,算法复杂度降低了算法分析的细节,忽略常数系数。

最优算法

所谓的最佳算法就是在不论什么情况下都能保证执行时间在理论范围内,并且没有更好的算法可以超越。

算法复杂度表示方法

常见的表示方法有比方O(N^2)表示算法最大可能的复杂度,Ω(N^2)表示最小可能的复杂度,Θ(N^2)表示算法复杂度的增长情况。

举例

问题描写叙述:推断一个数组中有多少个0。

以暴力方法为例。

这个问题中性能上限就是指某个特定的算法能实现的复杂度。

算法下限就是经过数学方法的证明,最优算法的复杂度是Ω(N)。由于数组中每一个元素都有可能是0,必需要循环整个数组才干得出结果。

最优算法:这个问题中暴力算法就是最优算法,所以最优算法的复杂度为Θ(N^2)。

算法的开发步骤

  1. 开发一个算法

  2. 证明最低下限

假设开发出的算法复杂度和证明得出的最低复杂度不相符的话,能够去寻找新的算法。也有可能是证明出错,当然证明出错的情况是比較少见的。

1970年代是算法设计的黄金年代。

误区

关于算法复杂度有下面误区:

  • 太在乎最坏情况。事实上实际应用中最坏情况基本上不会出现。

  • 试图通过提高复杂度的常数系数来提高性能。

  • 将大O当成近似复杂度,事实上真正的近似复杂度称之为波浪记法。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119119.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpwind升级php7,【原创文章】升级phpwind为https「建议收藏」

    phpwind升级php7,【原创文章】升级phpwind为https「建议收藏」闲来无事,看到刀客城和金刀客博客还是http协议,浏览器总是提示不安全,对于有点强迫症的我来说,看不下去,正好今天有点时间,就整了一下。phpwind好像没多少人用了,但是对于一个简单的坛子来说够用了,升级为https也挺简单,只是一开始没有找到路。首先到https://cloud.baidu.com/申请免费ssl证书,一个地址可以申请3个免费Symantec域名型DV证书。然后传到服务器…

    2026年1月30日
    2
  • linux phy调试方法_php执行shell命令

    linux phy调试方法_php执行shell命令enumphy_state{ PHY_DOWN=0, PHY_STARTING,//1 PHY_READY,//2 PHY_PENDING,//3 PHY_UP,//4 PHY_AN,//5 PHY_RUNNING,//6 PHY_NOLINK,//7 PHY_FORCING,//8 PHY_CHANGELINK,//9 PHY_HALTED,//10…

    2025年5月25日
    3
  • JS中判断数组中是否包含某个元素indexof兼容性兼容性

    JS中判断数组中是否包含某个元素indexof兼容性兼容性1.前几天写了一个JS游戏,其中,判断数组中是否包含某个元素,开始使用如下方法判断if(appearAnimals.indexOf(randIndex)==-1){}目前主流的浏览器都能正常显示,但是遇到IE9以下版本就不行,通过逐行排查,才发现是indexOf的兼容性问题。IE9以前的版本都不支持此方法,现在写一个兼容的方法如下:if(!Array.indexOf){

    2022年10月19日
    4
  • ExtJS学习———–Ext.String,ExtJS对javascript中的String的扩展[通俗易懂]

    ExtJS学习———–Ext.String,ExtJS对javascript中的String的扩展

    2022年2月1日
    46
  • 打造自己的HelloDrone 无人机APP过程《0》

    打造自己的HelloDrone 无人机APP过程《0》目录文章目录目录摘要1.项目设置1.设置一个基本的AndroidStudio项目2.添加客户端库3.实现TowerListener的监听事件4.初始化ControlTower并绑定activity的生命周期5.实现无人机监听事件6.无人机实例化并在tower上注册摘要本节主要记录开发自己的HelloDrone无人机的过程,本节是第一节欢迎批评指正!参考资料:博客参考dronekit-android源码Tower源码usb-serial-for-android库1.项目设置1.设

    2022年8月15日
    8
  • 通俗解释hash碰撞是什么以及如何解决

    通俗解释hash碰撞是什么以及如何解决Hash如何存数据hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。如下图:这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。Hash碰撞hash碰撞指的是,两个不同的值(比如张三、李四的学号)经过hash计算后,得到的hash值相同,后来的李四要放到原来的张三的位置,但是数组的位置已经被张三占了,导致冲突。解决方法hash碰撞的解决方式是开放寻址法和拉..

    2022年6月16日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号