普林斯顿公开课 算法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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven中web3sdk引入问题

    maven中web3sdk引入问题

    2021年3月12日
    194
  • PyCharm设置Python版本

    PyCharm设置Python版本PyCharm默认会使用虚拟的Python解释器,即使没有安装也能够运行Python代码,但有强迫症的程序员一定不能忍受Project中存在这么多的文件目录。设置Python版本File->Settings->Project->ProjectInterpreter,设置本地安装的Python解释器版本创建Python工程创建工程时,选择Existin…

    2022年5月8日
    74
  • API之FindWindowEx和SendMessage

    API之FindWindowEx和SendMessage最近在VC6.0开发中碰到了两个函数,经过一番搜索查阅,特记录于此。

    2022年5月27日
    33
  • java propertydescriptor_Spring Integration

    java propertydescriptor_Spring Integration总结满足以下条件才会生成PropertyDescriptor(注意读写方法是否为空,spring中by_type类型注入会筛选出具有写方法不为空的PropertyDescriptor):1、参数个数必须2个以内、方法不是static2、方法没有参数:方法有readMethod没有writeMehtod1、普通get开头方法2、返回值boolean以is开头的3、有一个参数1、有一个参数且int类型,方法get开头的,没有readMethodwriteMehtod等属性2、没有返回值、

    2022年9月27日
    0
  • mybaits使用存储过程

    mybaits使用存储过程

    2022年1月2日
    46
  • matlabfor循环变量_matlab定义自变量区间

    matlabfor循环变量_matlab定义自变量区间Matlab的循环与C/C++等普通计算机语言的循环还是有很大的区别的。看下面Matlab代码:a=[123456];fori=1:6ifi==3,i=i-1;enddisp(a(i));end结果为:123456将上述Matlab转换成C++代码:#includeusingnamespacestd;intmain(){inta[6]={1,2,3,4,5,6};for(i…

    2022年10月6日
    0

发表回复

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

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