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


相关推荐

  • java 设置400错误_Java项目报400错误的原因与解决方法

    java 设置400错误_Java项目报400错误的原因与解决方法java项目中400错误介绍:(推荐:java视频教程)400BadRequest:请求中的语法错误。Reason-Phrase应当标志这个详细的语法错误,比如”MissingCall-IDheaderfield”。HTTP400错误-请求无效(Badrequest)在ajax请求后台数据时有时会报HTTP400错误-请求无效(Badrequest);出现这个请…

    2022年9月26日
    1
  • Java截取String字符串的几种方法

    Java截取String字符串的几种方法方法一,指定字符,截取字符串,返回字符串数组:Stringstr=”abcd,123,123abc,fij23″;String[]strs=str.split(“,”);方法二,指定索引号,截取字符串:将字符串从索引号为5开始截取,一直到字符串末尾。(索引值从0开始):Stringstr=”abcdefghijklmnopqrstuvwxyz”;str.substri…

    2022年5月19日
    46
  • pycharm代码整体左移和右移缩进快捷键

    pycharm代码整体左移和右移缩进快捷键在使用pycharm时,经常会需要多行代码同时缩进、左移,pycharm提供了快捷方式1、pycharm使多行代码同时缩进  鼠标选中多行代码后,按下Tab键,一次缩进四个字符2、pycharm使多行代码同时左移 鼠标选中多行代码后,同时按住shift+Tab键,一次左移四个字符…

    2022年8月27日
    5
  • rabbitmq基本原理_计算尺使用的是什么原理

    rabbitmq基本原理_计算尺使用的是什么原理RabbitMQ使用以及原理解析RabbitMQ是一个由erlang开发的AMQP(AdvanvedMessageQueue)的开源实现;在RabbitMQ官网上主要有这样的模块信息,Workqueues消息队列,Publish/Subscribe发布订阅服务,Routing,Topics,RPC等主要应用的模块功能.几个概念说明:Broker:它提供一种传输服务,它的角色…

    2022年9月25日
    1
  • Linux用netstat查看服务及监听端口详解

    Linux用netstat查看服务及监听端口详解在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询netstat命令各个参数说明如下:-a或–all显示所有连线中的Socket。-A<网络类型>或–…

    2022年7月23日
    9
  • Quartus II 13.0sp1 (64-bit)使用教程「建议收藏」

    Quartus II 13.0sp1 (64-bit)使用教程「建议收藏」本人大三在学习计算机组成原理,要用到QuartusII13.0sp1(64-bit),但是下载安装完以后发现不会用,世界这么大,百度也没有任何收获,啊啊啊,昨天终于会用了,所以写了这个教程,希望对大家有用,详情见图片这里会弹出来一个框,然后(next)然后得到下面这个图这里也有一个(next)省略了,都是点一下哦然后(next)——》(finsh)module…

    2022年10月10日
    2

发表回复

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

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