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

news2024/10/2 6:25:31

算法的复杂度分析

什么是算法复杂度?

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

顺序查找

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

function sequenSearch(array:number[],target:number) {
  let result = -1
  for (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.coloradmin.cn/o/1241421.html

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

相关文章

SpringBoot项目启动后自动停止了?

1 现象 2023-11-22T09:05:13.36108:00 DEBUG 17521 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT 2023-11-22T09:05:13.36208:00 DEBUG 17521 --- [ main] o.s.b.a.Applicat…

解决Slf4J依赖冲突

项目启动&#xff0c;显示类路径包含多个 SLF4J 绑定&#xff0c;将其中一个排除即可。 找依赖 打开pom.xml&#xff0c;在文件内容上&#xff0c;右键&#xff0c;选择 Diagrams -> show dependencies… &#xff0c;ctrl f 输入slf4j-simple 然后右键&#xff0c;选择s…

网站被攻击了怎么办,有什么办法防御攻击?

近年来&#xff0c;随着互联网发展&#xff0c;出现了各种各样的网站&#xff0c;web应用&#xff0c;网络极大方便了人们的生活&#xff0c;改变了人们生活方式。而随着网络的发展普及&#xff0c;网络安全问题也困扰着用户。 许多人都曾有过这样经历&#xff0c;网站上线后&…

738. Monotone Increasing Digits 968. Binary Tree Cameras

738. Monotone Increasing Digits An integer has monotone increasing digits单调递增数字 if and only if each pair of adjacent digits x and y satisfy x < y. Given an integer n, return the largest number that is less than or equal to n with monotone increa…

节能灯和led灯哪个更护眼?精选高品质的LED护眼台灯

节能灯和LED灯相比&#xff0c;我认为LED灯会更加护眼一些&#xff0c;不过想要更护眼建议选择LED的护眼台灯会更好&#xff01; 大家都知道光亮对于我们来说是非常重要的&#xff0c;尤其是夜晚的时候&#xff0c;往往要借助一些灯具来提供充足的照明。对于孩子而言&#xff0…

UML建模图文详解教程01——Enterprise Architect安装与使用

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;图示如下&#xff1a; Enterprise Architect是一个全功能的、基于…

页面添加水印效果实现

页面效果&#xff1a; 源代码&#xff1a; <div id"water-wrapper"></div> <div><div>111111111111111111111111111111111111111111111111111111111111111111111111111111111111</div><div>1111111111111111111111111111111111…

非遗之光:十八数藏柏松数字保护的璀璨之路

随着数字技术的崛起&#xff0c;非物质文化遗产的保护进入了一个新的纪元。在这个时代的先锋中&#xff0c;十八数藏以其对传统工艺的数字保护而独领风骚。这是一条璀璨之路&#xff0c;通过数字技术的应用&#xff0c;为传统工艺注入了新的活力。 十八数藏柏松将数字创新融入传…

哈希表-set、map

当需要判断一个元素是否在集合中时&#xff0c;就使用哈希法 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。 哈希表中关键码就是数组的索引下标&#xff0c;然后通过…

【django+vue】连接数据库、登录功能

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【djangovue专栏】 1.【djangovue】项目搭建、解决跨域访问 【djangovue】连接数据库、登录功能 django连接数据库1.安装MySQL驱动程序2.创建数据库3.配置settings.py文件4.创建表5.添加数据 登录功能1.django实现…

sql语法大全

1&#xff0c;创建数据库 create database 数据库名字; 2,查看所有的数据库名称 show databases; MySQL服务器已有4个数据库&#xff0c;这些数据库都是MySQL安装时自动创建的。 information_schema 和 performance_schema 数据库分别是 MySQL 服务器的数据字典&#xff08;…

【2021集创赛】基于ARM-M3的双目立体视觉避障系统 SOC设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;上海电力大学 队伍名称&#xff1a;骇行队 总决赛奖项&#xff1a;二等奖 1.摘要 随着信息技术的发展&#xff0c;AGV&#xff08;Automated Guided Vehic…

状态设计模式是什么?什么是 State 状态设计模式?Python 状态设计模式示例代码

什么是 State 状态设计模式&#xff1f; 状态设计模式是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态发生改变时改变其行为&#xff0c;使其看起来好像改变了其类。状态模式主要解决的问题是&#xff1a;当一个对象的行为取决于它的状态&#xff0c;并且在运行时…

如何写好科研论文

写好科研论文需要遵循以下步骤&#xff1a; 确定研究主题和目标&#xff1a;在开始撰写论文之前&#xff0c;你需要明确你的研究主题和目标。这有助于你更好地组织论文的内容&#xff0c;并确保你的论文能够准确地传达你的研究成果。做好文献调研&#xff1a;在撰写论文之前&a…

集团投融资大数据平台解决方案

一、项目背景 项目为集团型公司大数据平台项目&#xff0c;整个项目周期约为6个月&#xff0c;整体呈现了对外的数据大屏驾驶仓和对内的看板报表&#xff0c;减少了客户内部数据上报和报表制作的重复工作量&#xff0c;为集团数据决策奠定基础。 二、项目目标 战略层&#xff…

.net framework4.0框架下winform 实现寄宿式web api

首先Nuget中下载包&#xff1a;Microsoft.AspNet.WebApi.SelfHost&#xff0c;如下&#xff1a; 注意版本哦&#xff0c;最高版本只能4.0.30506能用。 1.配置路由 public static class WebApiConfig{public static void Register(this HttpSelfHostConfiguration config){// …

echarts 实时刷新图表

2023.11.23今天我学习了如何对echarts图表进行实时刷新&#xff0c;如&#xff1a;一分钟刷新一次&#xff0c;或是五分钟刷新一次。 代码如下&#xff1a; <template><div ref"bar" style"width:200px;height:200px"/> </template>&l…

电商API接口|电商数据接入|拼多多平台根据商品ID查商品详情SKU和商品价格参数

随着科技的不断进步&#xff0c;API开发领域也逐渐呈现出蓬勃发展的势头。今天我将向大家介绍API接口&#xff0c;电商API接口具备独特的特点&#xff0c;使得数据获取变得更加高效便捷。 快速获取API数据——优化数据访问速度 传统的数据获取方式可能需要经过多个中介环节&…

【开源】基于JAVA的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

office 365企业版安装教程

1.下载所需工具&#xff08;防火墙和防毒软件记得关闭&#xff09; 下载链接&#xff1a;所需文件 2.安装激活office 1.安装 office tool plus 2.已安装过office 先进行office的移除&#xff0c;再进行未安装office的步骤进行 3.未安装过office 1.设置部署 按照以下来进行安…