首页 > 其他分享 >第一章——时间复杂度理解

第一章——时间复杂度理解

时间:2024-11-29 19:56:09浏览次数:6  
标签:语句 函数 复杂度 第一章 算法 理解 时间 赋值

第一章——算法的时间复杂度

1.知道什么是时间复杂度

如何看算法的好坏,我们需要评价运行过程中所占用的计算资源

计算资源包括时间空间,我们现在主要考虑占用时间资源

时间资源简单说就是计算机处理的时间

计算机处理包括两大类(计算储存

这里我们先把程序设计语言中的语句分类一下

定义语句:(例如C语言中的 int a)不占用时间复杂度

控制流语句:顺序,条件分支,循环迭代,只是起到一个组织语句的作用,并不进行处理

赋值语句:求一个表达式的值,然后赋值给一个变量。是一个对算法进行很好度量的指标

所以求算法的时间复杂度就是看计算机关于计算和存储的语句(赋值语句)有多少条

赋值语句多算法时间就长

2.具体怎么求时间复杂度T(n)

我们看一段简单代码

def sum_of_n(n):
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

第二行对total进行了赋值,只执行一次

第三行for循环为控制流语句,这里计算时间复杂度只计算控制流语句下面的语句,不计算语句本身(没有计算和赋值过程我们都不计算),也就是n*(for语句中语句的条数)

这里的时间复杂度用T(n)函数表示也就是T(n)=1+n

使用这个sun_of_n(n)函数时需要一个n,这里的n我们成为问题的规模

问题的规模:是指影响到这个程序运行时间的指标

我们求算法的时间复杂度函数也就是求运行时间与问题的规模(n)之间的函数关系

有时候决定算法时间复杂度的不仅是问题规模(n)具体数据也会影响算法运行时间

算法也有最好,最差,平均情况,平均状况体现了算法的主流性能

3.大O表示法(数量级函数)

基本操作数量函数T(n)的精确值并不是很重要,重要的是T(n)当中起决定性因素的主导部分

通俗来说就是对时间影响远远大于其他的那部分(这为数级)

例如:上面例子中的n与1相比较,当n越来越大,1显得无足轻重,我们就可以把这个1去掉,只保留n作为主导部分

用大O表示法表示上面的时间复杂度为O(n)

T(n)=5n**2+10n+100

当n越来越大的时候,10n和100常数对时间影响越来越小,n方的系数5对n方的增长速度来讲也没有影响,最终数量级函数为O(n**2),理解为n方 量级的时间复杂度

这里是几个数量级函数

1 常数
log(n) 对数
n 线性
n*log(n) 对数线性
n**2 平方
n**3 立方
2**n 指数

标签:语句,函数,复杂度,第一章,算法,理解,时间,赋值
From: https://www.cnblogs.com/byteboss/p/18577418

相关文章

  • 【C++进阶篇】C++继承进阶:深入理解继承的复杂性
    文章目录须知......
  • 如何使用git fetch与git pull,在团队协作中二者有什么区别,具体案例分析并深入理解
    gitfetch与gitpullgitpull和gitfetch都是用于从远程仓库获取更新的命令,但它们的功能和使用场景有所不同。理解这两个命令的区别以及如何有效地在团队协作中使用它们,对于提高工作效率和减少合并冲突至关重要。gitfetch作用:gitfetch会从远程仓库下载所有新的数......
  • 第一章——绪论
    第一章——绪论1.数据结构的概括1.1什么是数据结构​ 数据生活中数据通常用于描述客观事物(文字,数字,特定字符)。在计算机中,数据是指所以能输入到计算机中储存并被计算机程序处理的符号的集合(声音,图像,视频等被编码后)。​数据元素(元素,节点,记录)是数据的基本单位,在计算机程......
  • 深入理解Java中的类与对象
            在Java编程领域,类与对象是基石般的重要概念。为了清晰阐释其内涵、应用及相较于传统数据处理方式的优势,我们不妨从一个养猫的实际问题切入,逐步深入探究类与对象的世界。一、养猫问题引发思考        张老太养了两只猫咪,一只叫小白,3岁,毛色洁白;另一只......
  • 【计算机科学】深入理解队列:有序的数据之道
    在编程世界中,数据结构是解决问题的核心工具,而队列则是其中的基础模块之一。无论是任务调度、缓存系统还是算法设计,队列的先进先出(FIFO)特性使其成为高效解决问题的利器。本篇文章将从零开始,带你理解队列的概念、实现思路、典型应用及其背后的逻辑。本篇文章需要读者具有链......
  • 对Tomcat和servlet更深层次的理解
    对于Tomcat和Servlet的更深层次理解,我们可以从以下几个方面进行探讨:1.Tomcat架构Tomcat是一个开源的JavaWeb服务器,它基于JavaServlet和JavaServerPages(JSP)技术。Tomcat的架构设计了四种容器,分别是Engine、Host、Context和Wrapper,它们之间是父子关系。Engine代表整个Tomca......
  • 说出至少十条你理解的html规范
    文档类型声明:HTML文档必须以开头,声明文档类型为HTML5。这有助于浏览器正确解析和渲染页面。lang属性:<html>标签应该包含lang属性,用于指定文档的主要语言。例如:<htmllang="zh-CN">表示中文。这有助于屏幕阅读器、搜索引擎和其他工具理解文档内容。字符编码:使用<m......
  • 说出至少十条你理解的css规范
    好的,以下是至少十条我理解的CSS规范(前端开发):选择器特异性(Specificity):CSS选择器的特异性决定了哪个样式规则将应用于特定元素。特异性从高到低依次为:内联样式>ID选择器>类选择器、属性选择器和伪类>元素选择器和伪元素。继承(Inheritance):某些CSS属性......
  • 轻松理解操作系统 - 一文讲明 共享内存
    大家好,我是菲英。在前面呢,我们了解了进程间通信模块的管道机制和消息队列机制:管道机制是什么?消息队列是什么?本期,我们就继续来了解进程间通信模块的共享内存机制。首先,为什么它是最快的进程间通信机制?因为,它是多个进程的一块虚拟内存映射到同一块物理内存区域来实现数据共......
  • JS的异步函数的理解
    异步函数是JavaScript语言中的一个重要特性,它使得编写异步代码变得更加直观和易于管理。以下是对异步函数的深入理解:1. 概念理解异步函数是使用async关键字声明的函数。当这样的函数被调用时,它返回一个Promise对象。这使得异步函数在语法上看起来与普通同步函数非常相似,但它......