第十一章 算法复杂度

11.1 大O表示法 

        它用于描述算法的性能和复杂程度。分析算法时,时常遇到以下几类函数:

11.1.1 理解大O表示法

        如何衡量算法的效率?通常是用资源,例如CPU(时间)占用、内存占用、硬盘占用和网络
占用。当讨论大O表示法时,一般考虑的是CPU(时间)占用。
        让我们试着用一些例子来理解大O表示法的规则。

1. O(1)

function increment(num){return ++num
}

        假设运行increment(1)函数,执行时间等于X。如果再用不同的参数(例如2)运行一次
increment函数,执行时间依然是X。和参数无关,increment函数的性能都一样。因此,我们
说上述函数的复杂度是O(1)(常数)

2. O(n)

function sequentialSearch(array,item){console.log(item)var cost = 0for(var i =0;i<array.length;i++){    //{1}cost++if(item === array[i]){console.log('cost for sequentialSearch with input size ' +array.length+ ' is '+cost)return i}}console.log('cost for sequentialSearch with input size ' +array.length+ ' is '+cost)return -1
}

        如果将含10个元素的数组([1, ..., 10])传递给该函数,假如搜索1这个元素,那么,第一次判断时就能找到想要搜索的元素。在这里我们假设每执行一次行{1} ,开销是 1。
        现在,假如要搜索元素11。行{1}会执行10次(遍历数组中所有的值,并且找不到要搜索的
元素,因而结果返回 -1)。如果行{1}的开销是1,那么它执行10次的开销就是10,10倍于第一种
假设。
        现在,假如该数组有1000个元素([1, ..., 1000])。搜索1001的结果是行{1}执行了1000
次(然后返回-1)。
        注意,sequentialSearch函数执行的总开销取决于数组元素的个数(数组大小),而且也
和搜索的值有关。如果是查找数组中存在的值,行{1}会执行几次呢?如果查找的是数组中不存
在的值,那么行{1}就会执行和数组大小一样多次,这就是通常所说的最坏情况。
        最坏情况下,如果数组大小是10,开销就是10;如果数组大小是1000,开销就是1000。可以
得出sequentialSearch函数的时间复杂度是O(n),n是(输入)数组的大小。

3. O(n2)
用冒泡排序做O(n2)的例子:

function swap(array, index1, index2){var aux = array[index1];array[index1] = array[index2];array[index2] = aux;
}function bubbleSort(array){var length = array.length;var cost = 0;for (var i=0; i<length; i++){ //{1}cost++;for (var j=0; j<length-1; j++ ){ //{2}cost++;if (array[j] > array[j+1]){swap(array, j, j+1);}}}console.log('cost for bubbleSort with input size ' + length + ' is ' + cost);
}

        如果用大小为5的数组执行bubbleSort,开销是 5的二次方。如果用大小为10的数组执行
bubbleSort,开销就是 10的二次方。数组大小为n,开销就是n的二次方。

11.1.2 时间复杂度比较

1. 数据结构

2. 图

3. 排序算法

4. 搜索算法

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

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

相关文章

时序预测 | Python实现GRU电力需求预测

时序预测 | Python实现GRU电力需求预测 目录 时序预测 | Python实现GRU电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用该…

docker:安装docker项目的问题记录

windows下拉取的项目&#xff0c;会导致sh文件带的换行符不一致导致报错。原来的docker文件源过期&#xff0c;需要网上找新的源来替换。缺少未知的配置文件&#xff0c;比如.env或者其他文件。需要其他同事告知&#xff0c;readme里面没有文档说明是坑。加减agt-get install时…

同义词替换在论文降重中的实际效果评估 快码论文

大家好&#xff0c;今天来聊聊同义词替换在论文降重中的实际效果评估&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换在论文降重中的实际效果评…

CAN 七、CAN编程实战_阻塞发送中断接收

1、开发环境 (1)KeilMDK&#xff1a;V5.38.0.0 (2)STM32CubeMX&#xff1a;V6.8.1 (3)MCU&#xff1a;STM32F407ZGT6 (4)CAN盒&#xff1a; 2、实验目的 略 3、原理图 略 4、STM32CubeMX配置 略 5、KeilMDK软件编写 略

【总结】C语言中bit和sbit的区别

1&#xff0e;bit和sbit都是C51扩展的变量类型。 bit和int char之类的差不多&#xff0c;只不过char8位, bit1位而已。都是变量&#xff0c;编译器在编译过程中分配地址。除非你指定&#xff0c;否则这个地址是随机的。这个地址是整个可寻址空间&#xff0c;RAMFLASH扩展空间。…

用单片机控制步进电机的程序

结合按键程序&#xff0c;我们设计这样一个功能程序&#xff1a;按数字键 1&#xff5e;9&#xff0c;控制电机转过 1&#xff5e;9 圈&#xff1b;配合上下键改变转动方向&#xff0c;按向上键后正向转 1&#xff5e;9 圈&#xff0c;向下键则反向转 1&#xff5e;9 圈&#x…

PMI相关证书的获取步骤及注意内容

近几年很多行业的从业人员都在考取PMI项目管理相关证书&#xff0c;可在中国大陆地区参加考试的认证主要有&#xff1a;PMP, PgMP, PMI-RMP, PMI-ACP, PMI-PBA, CAPM。PfMP, PMI-SP尚未在中国大陆地区开放考试。 现整理该类证书的相关获取步骤及注意内容 一、证书获取步骤 S…

RHEL8_Linux下载ansible

本章内容主要介绍RHEL8中如何安装ansible ansible时如何工作的在RHEL8中安装ansible 1.ansible工作原理 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c;ansible就是这样的一种自动化管理工具。 1&…

docker离线安装redis

1、导入镜像 docker load -i redis.tar其中redis.tar为在有互联网的机子上导出的镜像 2、创建redis.conf&#xff08;见附件&#xff09; 3、启动命令 docker run -p 63791:6379 --name myredis -v /Home/redis/myredis/redis.conf:/etc/redis/redis.conf -v /Home/redis/my…

将html的radio单选框自定义样式为正方形和对号

将html的radio单选框自定义样式为正方形和对号 背景&#xff1a; 如何能把html的<input type"radio" name"option">改成自定义的样式呢&#xff1f;比如想要把他变成正方形&#xff0c;选中的时候是对号。默认的样式太丑了 默认样式&#xff1a; 自…

2023前端面试题总结:JavaScript篇完整版

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript基础知识 JavaScript有哪些数据类型&#xff0c;它们的区别&#xff1f; Number&#xff08;数字&#xff09;: 用于表示数值&#xff0c;可…

LLM Agent发展演进历史(观看metagpt视频笔记)

LLM相关的6篇重要的论文&#xff0c;其中4篇来自谷歌&#xff0c;2篇来自openai。技术路径演进大致是&#xff1a;SSL (Self-Supervised Learning) -> SFT (Supervised FineTune) IT (Instruction Tuning) -> RLHF。 word embedding的问题&#xff1a;新词如何处理&…

【二分查找】自写二分函数的总结

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的基础知识点 二分查找算法合集 自写二分函数 的封装 我暂时只发现两种&#xff1a; 一&#xff0c;在左闭右开的区间寻找最后一个符合条件的元素&#xff0c;我封装成FindEnd函数。…

测试:Selenium相关问题

如何开展自动化测试框架的构建&#xff1f; 1. 确定测试框架类型 首先&#xff0c;需要根据项目的复杂性和需求选择合适的测试框架类型。例如&#xff0c;线性测试框架适用于简单应用程序的测试&#xff0c;而模块化测试框架更适合测试复杂应用中不同部分之间的相互作用和依赖…

设计模式的应用——《职责链模式》

设计模式的应用——《职责链模式》 一、职责链模式基础知识&#xff08;What、Why、How&#xff09;1、什么是职责链模式&#xff1f;2、如何使用职责链模式&#xff1f;——它的原理和实现3、为什么用职责链模式&#xff1f; 二、什么场景下使用它&#xff1f;——职责链模式在…

Linux---进程概念

目录 一、冯诺依曼体系结构 二、操作系统 1.关于下三层的理解 2.关于上三层的理解 三、进程 1.进程(也叫做任务)对应的标识符---pid 2.fork---用代码创建进程(系统接口) 1&#xff09;初步认识一下fork 2&#xff09;fork函数的返回值 3&#xff09;fork的原理 问题1…

虚拟机性能监控、故障处理工具

虚拟机性能监控、故障处理工具 二、基础故障处理工具4.2.1 jps&#xff1a;虚拟机进程状况工具4.2.2 jstat:虚拟机统计信息监视工具4.2.3 jinfo:Java配置信息工具4.2.4 jmap:java内存映像工具4.2.5 jhat:虚拟机堆转储快照分析工具4.2.6 jstack&#xff1a;Java堆栈跟踪工具4.2.…

四舍五入浮点数

1.题目如下&#xff1a; 2.方法一&#xff1a; 直接取出小数部分第一位来判断。 1. 先乘以10。 2. 强制类型转换为整型&#xff0c;去掉小数部分。 3. 再模10&#xff0c;相当于取出原数的小数第一位。 代码实现&#xff1a; int way1(double n) {int a (int)(n * 10);int b…

c#的event使用(1)

在C#中&#xff0c;事件是一种用于在类或对象之间进行通信的机制。当某个特定的事件发生时&#xff0c;与该事件相关联的方法&#xff08;称为事件处理程序&#xff09;将被调用。 下面是使用C#事件的基本步骤&#xff1a; 定义事件&#xff1a;在类中定义一个事件成员变量&a…

后端开发——统一处理异常Spring MVC机制

一、Spring MVC的统一处理异常机制 在Spring MVC中&#xff0c;存在统一处理异常的机制&#xff0c; 具体表现为&#xff1a;无论是哪个处理请求的过程中出现异常&#xff0c;每种类型的异常只需要编写一段处理异常的代码即可&#xff01; 统一处理异常的核心是定义处理异常的…