【TypeScrpt算法】算法的复杂度分析

算法的复杂度分析

什么是算法复杂度?

不同的算法,其实效率是不一样的
让我举一个案例来比较两种不同的算法在查找数组中给定元素的时间复杂度
[1,2,3,4,5,6,7,...9999,n]

顺序查找

这种方法从头到尾遍历整个数组,依次比较每个元素和给定元素的值。
如果找到想等元素,则返回下标,如果遍历整个数组都找不到就返回-1。

function sequenSearch(array:number[],target:number) {let result = -1for (let i = 0;i<array.length;i++) {array[i] === target ? result = i : undefined}return result
}

最长时间复杂度:n
平均的时间复杂度: n / 2
image.png
该算法时间复杂度是O(n)

二分查找

这种算法假设数组是有序的,每次选择数组中间的元素与给定元素进行比较。
如果找到想等元素,则返回下,如果给定的元素比中间元素小,则在数组左半部分继续查找;如果给定的元素比中间元素大,则在数组右半部分继续查找。
这样每次查找都会将查找的范围减半,知道找到想等的元素或者查找范围为空。

function binarySearch(array: number[], target: number) {let left = 0;let right = array.length - 1;while (left <= right) {let mid = Math.floor((left + right) / 2);const midTarget = array[mid];if (midTarget === target) {return mid;} else if (midTarget < target) {left = mid + 1;} else {right = mid - 1;}}return -1;
}

最长时间复杂度:log(n,2)
平均的时间复杂度: log(n,2) / 2
image.png
该算法时间复杂度是O(log n)

大O表示法(Big O notation)

大O表示法(Big O notation)英文翻译为大O符号(维基百科翻译),中文通常翻译为大O表示法(标记法)。

  • 这个记号则是在德国数论学家爱德蒙·兰道的著作中才推广的,因此它有时又称为兰道符号(Landau symbols)。
  • 代表“order of …”.……阶)的大O,最初是一个大写希腊字母“O”(omicron),现今用的是大写拉丁字母“O”。

时间复杂度

分析算法时间效率举例

  • 举个例子,解决一个规模为n的问题所花费的时间(或者所需步骤的数目)可以表示为: T(n)=4n2-2n+2

  • n增大时,n2项开始占据主导地位,其他各项可以被忽略;

  • 举例说明:当n=500

  • 4n2项是2n项的1000倍大,因此在大多数场合下,省略后者对表达式的值的影响将是可以忽略不计的。
    进一步看,如果我们与任一其他级的表达式比较, n2的系数也是无关紧要的。
    这样,针对第一个例子T(n) = 4n2- 2n+2,大O符号就记下剩余的部分,写作:
    T(n) ∈ o(n2)

    T(n)= o(n2)
    我们就说该例子算法具有**n2**阶(平方阶)的时间复杂度,表示为**O(n2)**

常用函数阶

介绍

image.png

案例

image.png

图表

image.png

空间复杂度

空间复杂度指的是程序运行过程中所需要的额外存储空间。

空间复杂度也可以用大O表示法来表示;
空间复杂度的计算方法与时间复杂度类似,通常需要分析程序中需要额外分配的内存空间,如数组、变量、对象、递归调用等。

分析算法空间效率举例

举个栗子:
对于一个简单的递归算法来说,每次调用都会在内存中分配新的栈帧,这些栈帧占用了额外的空间。

  • 因此,该算法的空间复杂度是o(n),其中n是递归深度。
    而对于迭代算法来说,在每次迭代中不需要分配额外的空间,因此其空间复杂度为o(1)。
    当空间复杂度很大时,可能会导致内存不足,程序崩溃。
    在平时进行算法优化时,我们通常会进行如下的考虑:

  • 使用尽量少的空间(优化空间复杂度);

  • 使用尽量少的时间(优化时间复杂度);

  • 特定情况下:使用空间换时间或使用时间换空间;

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

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

相关文章

SAP-查看业务变更记录

一、通过事务码查询修改记录 1、输入TCODE&#xff1a;AUT10&#xff0c;输入时间和事务处理代码&#xff0c;全部搜索输入*。 2、点击刷新&#xff0c;对已输入的条件进行重置。 3、在左侧下菜单&#xff0c;选择要查询的事务记录&#xff0c;双击&#xff0c;会带入“事务处…

【nlp】3.2 Transformer论文复现:1. 输入部分(文本嵌入层和位置编码器)

Transformer论文复现:输入部分(文本嵌入层和位置编码器) 1 输入复现1.1 文本嵌入层1.1.1 文本嵌入层的作用1.1.2 文本嵌入层的代码实现1.1.3 文本嵌入层中的注意事项1.2 位置编码器1.2.1 位置编码器的作用1.2.2 位置编码器的代码实现1.2.3 位置编码器中的注意事项1 输入复现…

探索结构体的奥秘

目录 &#x1f342;结构体 1&#xff0c;结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.6.1 如何计算 1.6.2 为什么存在内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2&am…

3.7寸墨水屏蓝牙卡证

超薄机身&#xff0c;厚度不足一厘米&#xff0c;轻松佩戴无负重感。 无需基站&#xff0c;服务器&#xff0c;手机APP直接更新~ 独创快速扫描技术&#xff0c;智能感应标签 超长待机&#xff0c;超低功耗&#xff0c;Type C接口充电&#xff0c;一次充电可续航一年&#xf…

极智开发 | 随机初始化onnx模型权重的方法

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 随机初始化onnx模型权重的方法。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq onnx 模型一直是在算法部署中…

增量有余、后劲不足,星途汽车10月份销量环比下降3.9%

撰稿|行星 来源|贝多财经 近日&#xff0c;奇瑞集团发布了10月销量月报。报告显示&#xff0c;奇瑞集团于2023年10月销售汽车20.03万辆&#xff0c;同比增长50.8%&#xff0c;单月销量首次突破20万辆&#xff1b;2023年前10个月的累计销量为145.36辆&#xff0c;同比增长41.6…

C语言运算符详解

详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法&#xff0c;并讨论了运算符的优先级。 1、表达式与算术运算符 在C语言中&#xff0c;表达式是一个类似数学中的算式&#xff0c;表达式由变量、字面值、常量、运…

【坑】JDK21虚拟线程不支持run方法

【坑】JDK21虚拟线程不支持run方法 run // do nothing java.lang.VirtualThread Overridepublic void start() {start(ThreadContainers.root());}Overridepublic void run() {// do nothing}

2023年,人工智能在医疗行业领域的应用场景

本期行业洞察将带领大家了解人工智能在医疗行业领域的应用&#xff0c;主要了解在患者治疗和运营中的应用、人工智能作为预防工具以及大型医院目前如何使用人工智能。未来的智慧医疗时代已经悄然到来。 人工智能在患者治疗和机构运营中的应用 人工智能有望彻底改变医疗护理的…

csapp archlab part 1

part A [rootedb3963640a6 misc]#./yas sum.ys [rootedb3963640a6 misc]# ./yis sum.yo./yas 和 ./yis 是汇编语言编译器和模拟器的命令行工具。 ./yas 是一个汇编语言编译器&#xff0c;它将汇编语言代码转换为可执行的二进制文件。./yas sum.ys 将sum.ys文件编译成了sum.yo可…

计算机毕业设计项目选题推荐(免费领源码)Java+ssm+MYSQL酒店大数据资源管理系统的设计与实现02029

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对酒店大数据资源管理系统等问题&#xff0c;对…

发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述

文章作者&#xff1a;Libai 欢迎来到云计算世界&#xff0c;这里有无数的机会和无限的应用程序增长。 在当今的数字时代&#xff0c;企业可能会发现管理基础架构和扩展应用程序具有挑战性。 传统的本地解决方案需要大量的硬件、软件和维护前期投资。 要满足不断增长的需求&…

3D Slicer使用与体绘制

3D Slicer默认不进行体绘制&#xff0c;右上角的三维重建窗口只显示一个空的立方体框。要进行体绘制&#xff0c;先切换到体绘制设置窗口&#xff1a; 在体绘制设置窗口中&#xff0c;选择进行体绘制的DICOM序列&#xff0c;然后将体绘制开关打开&#xff08;眼睛标志&#xff…

Omniverse合成数据生成【城市交通场景】

智慧城市是城市生活的未来。 然而&#xff0c;它们可能给城市规划者带来各种挑战&#xff0c;尤其是在交通领域。 为了取得成功&#xff0c;城市的各个方面—从环境和基础设施到商业和教育—必须在功能上整合。 这可能很困难&#xff0c;因为单独管理交通流量是一个复杂的问题…

Navicat 技术指引 | 适用于 GaussDB 的查询编辑器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

智能导视电子指路牌是什么?

SVIP-3800系列智能电子指路牌也称智慧指路灯杆&#xff0c;智能指路牌&#xff0c;导航立柱&#xff0c;多功能指示牌&#xff0c;多功能路标&#xff0c;智能指路机器人&#xff0c;智能导视指路牌&#xff0c;问路导航机器人&#xff0c;智能路牌&#xff0c;叁仟智慧路牌、智…

数据结构-leetcode(设计循环队列)

1.学习内容&#xff1a; 今天 我们讲解一道能够很好的总结所学队列知识的题目---设计循环队列 622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 2.题目描述&#xff1a; 让我们设计一个队列 要求是循环的 这和我们的双向链表有些类似 让我们按要求设计出这些相对…

Navicat 技术指引 | GaussDB 数据查看器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

220V转12V固定输出12V非隔离芯片WT5106WT5105

220V转12V固定输出12V非隔离芯片WT5106WT5105 今天给大家介绍一款实用芯片&#xff0c;WT5106。它是一款高效率高精度的非隔离降压开关电源恒压控制驱动芯片。 WT5106适用于85VAC~265VAC全范围输入电压的非隔离Buck、Buckboost拓扑结构&#xff0c;小家电、电机驱动、继电器驱…

量子计算争霸战加码?美国将拨款30亿美元发展量子计算

&#xff08;图片来源&#xff1a;网络&#xff09; 美国众议院科学、太空和技术委员会认为&#xff0c;如果不采取措施加速量子计算系统的发展&#xff0c;美国将落后于俄罗斯和中国。 因此&#xff0c;该小组的领导人——主席Frank Lucas&#xff08;共和党&#xff09;和高…