算法分析

【0】README

0.1) 本文总结于 数据结构与算法分析;旨在了解 算法分析涉及到的数学基础、时间复杂度分析法则、和其它的一些法则 和 结论;


【1】 数学基础

1.1)本书将使用以下4个定义:

对上述定义的分析(Analysis):

  • A1)第一个定义是说T(N)的增长率小于等于f(N)的增长率;
  • A2)第二个定义是说T(N)的增长率大于等于g(N)的增长率;
  • A3)第三个定义是说T(N)的增长率等于h(N)的增长率;
  • A4)第四个定义是说T(N)的增长率小于p(N)的增长率, 它不同于大O,因为大O 包含增长率相同这种可能性;

1.2)我们引入了相对增长率的概念, 并将其应用到算法分析;
1.3)比较1000N 与 N^2 的大小?
虽然N 较小时,1000N 大于 N^2 ,但 N^2 以更快的速度增长,因为N^2 最终将更大;
1.4)这种情况下,N=1000 是个转折点;
第一个定义说,最后总会存在某个点 n0, 从它以后 cf(N) 总是至少与 T(N)一样大, 从而忽略掉常数因子, 则f(N) 至少与 T(N) 一样大;
1.5)上界与下界
当我们说T(N)=O(f(N))时,我们是在保证函数T(N)是在不快于f(N)的速度增长;因此f(N)是T(N)的一个上界, 也可以说f(N)=Ω(T(N))意味着T(N)是f(N)的一个下界;
1.6)直观上说

1.7)我们需要掌握的结论为:

1.8)以上信息足以按照增长率对大部分常见的函数进行分类(如下图)
这里写图片描述
对上图的分析(Analysis):

  • A1)首先,将常数或低阶项放进大O是非常坏的习惯,不要写成T(N)=O(2N^2)或T(N)=O(N^2+N), 这两种情况下,正确的形式是 T(N)=O(N^2);
  • A2)我们总能够通过计算极限这里写图片描述 来确定两个函数 f(N) 和 g(N)的相对增长率,必要的时候可以使用洛必达法则;
  • A3)上述极限有4种可能情况:
    这里写图片描述

【2】 要分析的问题

2.1)要分析的最重要的资源一般来说就是运行时间了;
这里写图片描述 分别为输入为N时,算法所花费的平均运行时间和最坏情况下的运行时间;显然前者小于等于后者;
2.2)一般说来,若无相反的指定,则所需要的量是最坏情况下的运行时间;

  • 原因1:它对所有的输入提供了一个界限,包括特别坏的输入,而平均情况分析不提供这样的界限;
  • 原因2:平均情况的界计算起来通常要困难得多, 在某些情况下, 平均的定义可能影响分析的结果;

【3】 运行时间的计算

3.1 一个简单的例子
这里写图片描述
这里写图片描述
对以上程序进行时间分析(Analysis):

  • A1) line 5 占用一个时间单元; line8 占用一个时间单元;
  • A2) line7 每执行一次占用4个时间单元(2次乘法,1次加法,1次赋值), 而执行N 次共占用4N 个时间单元;
  • A3) line6 在初始化i、测试 i<=N 和对 i 的自增运算中隐含着开销;所有这些总开销是初始化 1个时间单元、所有的测试N+1 个时间单元、以及所有的自增运算N 个时间单元,共2N + 2;
  • A4) 所以,我们忽略调用函数 和 返回值的开销,得到总量是 6N+4 = 2 + 4N + 2N + 2; 我们可以说该函数是 O(N), 也即是说 (6N+4)的增长率 小于等于 N的增长率,确切的说是等于;

3.2 一般法则:

这里写图片描述

这里写图片描述
这里写图片描述

if(condition)S1
elseS2


对于递归的看法: 当一个递归可以被转化为循环时,其递归使用效率低得离谱;当然,也就是说,当递归被正常使用时,将其转换为一个简单的循环结构是相当困难的;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java文件端点续传效果图_Java单依赖性Dockerized HTTP端点

java文件端点续传效果图在本文中&#xff0c;我们将创建一个基于Java的HTTP端点&#xff0c;使用它创建一个可执行jar&#xff0c;将其打包在Docker中并立即在本地运行。 本文面向初学者&#xff0c;他们想要寻找一个简单的演练来在Docker中运行Java应用程序。 描述Dockerize…

立镖机器人浙江_立镖在美国获2020 NextGen供应链解决方案奖

Tompkins Robotics荣获2020 NextGen供应链解决方案提供商奖汤普金斯国际被《供应链管理评论》指定为机器人技术类获奖者2020年3月20日消息Tompkins International的业务部门 Tompkins Robotics被选为第二届年度NextGen供应链奖的获得者。汤普金斯机器人技术公司是《供应链管理…

final 实例域+final类+final方法(阻止继承)

【0】README 0.1&#xff09;本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清 “final 实例域”&#xff1b; 0.2&#xff09; 最后还增加了 阻止继承 的内容&#xff0c;涵盖了final类final方法&#xff1b; 0.3&#xff09; 引入了 内联 以及 即时编译器对…

java责任链设计模式_Java中的责任链设计模式

java责任链设计模式在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 责任链设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c…

机加工程序工时程序_团宠来袭 | 针对多品种小批量的机加工柔性生产解决方案...

“天下之至柔&#xff0c;驰骋天下之至坚。无有入于无间&#xff0c;吾是以知无为之有益。”老子指出&#xff0c;世间最柔弱的东西里面往往蓄着人们看不见的巨大力量&#xff0c;使得最坚强的东西也无法抵挡。就像水是最柔的东西&#xff0c;但却能穿透山地。柔性的力量不容小…

静态方法+工厂方法(静态方法用途)

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在了解 “静态方法”&#xff1b; 【1】静态方法相关 1.1&#xff09;静态方法是一种不能向对象实施操作的方法&#xff1b; 如&#xff0c;Math.pow(x, a)&#xff0c; 在运算时&#…

一致吗 驱动_iPhone 12无线充电真的香吗?

2020年10月14日凌晨1点&#xff0c;苹果发布会又来了&#xff0c;开场就是苹果CEO库克在总部贾伯斯剧院闪亮登场&#xff01;没错&#xff01;各位果粉心心念念的 iPhone 12 它走来了&#xff01;如之前爆料所言&#xff0c;本次发布会共推出了4款机型&#xff1a;iPhone 12 mi…

spring boot注释_Spring Boot中的@SpringBootConfiguration注释

spring boot注释Spring Boot中的 SpringBootConfiguration注释是一个类级别的注释&#xff0c;它指示此类提供了应用程序配置。 通常&#xff0c;具有main&#xff08;&#xff09;方法的类最适合此注释。 我们通常使用SpringBootApplication批注&#xff0c;该批注会自动继承…

selenium自动化测试_Selenium测试可实现有效的测试自动化

selenium自动化测试尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然具有大量的用户基础。 在部署之前&#xff0c;企业正在关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然大部分是手动过程…

画时序图 visual_时序图的初步了解

1、划清边界&#xff0c;识别交互的语境所谓划清边界&#xff0c;就是要界定好自己所要画的时序图的范围&#xff0c;“学生在教务系统中查询其课程的成绩”就是所要绘制的时序图的交互内容&#xff0c;不用往上延伸到用户登录&#xff0c;也不要往下延伸到下载成绩单。识别交互…

java 初始化块

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在分享初始化块 or 静态初始化块的调用过程&#xff1b; 【1】初始化块相关 1.1&#xff09;前面讲过了 两种初始化数据域的方法&#xff1a; 在构造器中设置值 在声明中赋值&#xff…

简短介绍_中秋节的来历由来简短20字30字 中秋节的起源50字100字简介

中秋节是我国的传统佳节。按照史籍的记实&#xff0c;“中秋”一词最早呈此刻《周礼》一书中。小编整理了中秋节来历的简单介绍&#xff0c;既有二三十字的简要版&#xff0c;也有100字左右的介绍&#xff0c;让我们一起了解中秋节的起源吧。中秋节的来历由来简短20字中秋节起源…

java中的lombok_如何在Java中使用Lombok删除样板设置器吸气剂

java中的lombok你好朋友&#xff0c; 一次又一次反对Java的观点之一是&#xff0c;我们必须写很多样板 我们简单的POJO类的setter和getter形式的代码&#xff0c;不必要地增加了 我们代码的长度。 为了解决这个问题&#xff0c;有一个名为Project Lombok的开源项目可以解决这…

super 和 this 关键字的比较+调用构造器(this)+动态绑定

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在加深对 super 和 this关键字 的用法比较&#xff1b; 0.2&#xff09; 最后还补充了 多态和动态绑定 的定义 以及对动态绑定进行了详细分析&#xff0c;这两个定义给的非常棒&#xf…

修改表格字体颜色_word排版应用:如何创建文本样式和表格样式

样式&#xff0c;大家应该不陌生&#xff0c;在Word中是一个非常强大的功能&#xff0c;运用得好&#xff0c;可以节省很多时间和精力。但如果你不会用&#xff0c;关键时刻可以把你急哭了&#xff01;在前面的“Word样式&#xff0c;简单又实用&#xff01;”和“Word样式也有…

java流式传输对象_Java性能:面向教学与流式传输

java流式传输对象在for循环中向上或向下计数是最有效的迭代方式吗&#xff1f; 有时答案既不可行。 阅读这篇文章&#xff0c;了解不同迭代品种的影响。 迭代性能 关于如何以高性能进行迭代有很多观点。 Java中的传统迭代方式是一个for循环&#xff0c;该循环从零开始&#xf…

vue框架项目部署到服务器_在浏览器中在线尝试无服务器框架项目!

vue框架项目部署到服务器无服务器框架是无服务器工具的一致领导者。 但是&#xff0c;没有简单的方法可以在线试用无服务器框架项目。 您确实需要一个体面的开发人员设置&#xff0c;并且需要一些工作来设置sls &#xff0c; npm等。 确切地说&#xff0c;您确实做到了 –直到…

用python连接数据库_用Python连接MySQL

MySQL是当下最流行的关系型数据库管理系统之一,在用Python爬取网络数据的过程中也经常需要用到MySQL,Python中pymysql库提供了连接MySQL的接口,为Python连接和操作MySQL提供了便利.一,安装pymysql库直接使用pip工具进行安装:pip install pymysql二,连接mysql首先导入第三方库,然…

树的预备知识

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;旨在整理出 树的相关术语和概念&#xff08;哥子始终记不住树的高度和深度&#xff0c;记着记着就混淆了&#xff0c;哎&#xff0c;所以分享出来&#xff09;&#xff1b; 【1】树相关 1.1&#xff…

arduino蓝牙通讯代码_蓝牙4.0模块 无线数据传输模块 无线蓝牙串口 Arduino

产品介绍&#xff1a;蓝牙4.0模块是专为智能无线数据传输而打造的。该模块遵循BT2.1EDR/3.0/4.0(BLE)蓝牙规范&#xff0c;支持SPP 蓝牙串口协议等。本模块集成了MCU 和蓝牙芯片&#xff0c;支持UART、SPI、I2C、I2S 等接口&#xff0c;包含4 个PWM 端口和6 个12bit ADC 通道&a…