Python算法笔记(1)-时间复杂度、空间复杂度

Python算法笔记(1)-时间复杂度在这里插入图片描述

1.时间复杂度

时间复杂度是一个描述算法的运行时间的一个函数,它描述了算法的运行时间和输入数据的规模之间的关系,时间复杂度的表示方法用O表示,时间复杂度也用来考察输入值无限趋近无穷时的情况。

一:常量阶 O(1)

当执行次数为n时表示常量阶


def person(n):print("有%d个人" % n)
if __name__ == '__main__':person(3)

二:对数阶 O(logn)

当执行5logn次数是对数计算时


def person(n):while n>1:print("有%d个人" % n)print("他们都走了")n /= 2
if __name__ == '__main__':person(10)

在这里插入图片描述

三:线性阶 O(n)

3n次计算时是线性


def person(n):for i in range(n):print("有%d个人" % n)print("他们都走了")
if __name__ == '__main__':person(2)

四:线性对数阶 O(nlogn)


def person(n):while n > 1:print("有%d个人" % n)print("他们都走了")n*(n/2)if __name__ == '__main__':person(2)

五:n方阶 O(nⁿ)

def person(n):for i in range(1,n):print("有%d个人" % n)print("他们都走了")NP = n**nprint("n方阶是%d" %NP)if __name__ == '__main__':person(2)

六:指数阶 O(2ⁿ)

def person(n):for i in range(1,n):print("有%d个人" % n)print("他们都走了")NP = 2**nprint("n指数阶是%d" %NP)if __name__ == '__main__':person(3)

七:阶乘阶 O(n!)


def person(n):res = 1for i in range(1,n+1):res *=iprint("n阶乘阶是%d" %res)if __name__ == '__main__':person(3)

当满足公式下的运行下,当n的增加时,运行效率在指数阶和阶乘阶的运行效率会变得非常低,所以需要合理选择一个计算方式,而运行速度来看:常量阶<对数阶<线性阶<n方阶

2.空间复杂度

空间复杂度是算法在运行时间复杂度算法时所占用的空间大小的度量,一般用S(n)表示。

一:常量空间

没有特殊标记O(n),跟输入规模没有直接的关系。

def ex(n):i = 3

二:线性空间

O(n),集合大小和输入规模n成正比

def ex(n):ar = [[0]*n]

三:二维空间

当算法分配一个空间是二维列表集合时,长度与宽度输入规模成正比,O(n2次方)

def ex(n):ar = [[0]*n]*n

四:递归空间

当计算机运行程序时会调用相应的内存来存储,也就有了出栈和入栈的行为,当函数返回时,信息就会从栈中出来

def ex(n):if n>>0:ar(n-1)

在这里插入图片描述

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

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

相关文章

【NLP】基础工程:词嵌入

一、说明 词嵌入是高维向量空间中单词或短语的数字表示,其中向量之间的几何关系捕获相应单词之间的语义和句法相似性。这些表示使机器学习模型能够以更有意义的方式理解和处理自然语言。 在传统的 NLP 方法中,单词是使用稀疏的 one-hot 编码向量来表示的,其中每个单词在大词…

专治疑难系列 - 解决“npm ERR!”报错问题

‍‍&#x1f3e1;博客主页&#xff1a; Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 &#x1f310;所属专栏&#xff1a;『专治疑难系列』 &#x1f30c;上期文章&#xff1a; 专治疑难系列 - 解决打印机凭证冲突问题 &#x1f4f0;如觉得博主文章写的…

插入排序法解析

插入排序法解析 什么是插入排序法 插入排序法是一种简单但有效的排序算法&#xff0c;其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中&#xff0c;直至所有元素都被插入完成&#xff0c;从而得到一个有序序列。 具体步骤如下&#xff1a; 假设初始时&…

css实现九宫格有边框,最外层四周无边框

1.先设置9个div&#xff0c;如下&#xff1a; <div class"wrapper"><div class"cell"></div><div class"cell"></div><div class"cell"></div><div class"cell"></div&…

听GPT 讲K8s源代码--pkg(一)

在 Kubernetes 代码仓库中&#xff0c;pkg/api和pkg/apis目录都包含用于定义 Kubernetes API 对象的代码&#xff0c;但它们的作用略有不同。 pkg/api目录包含 Kubernetes 的旧版本 API 对象定义&#xff0c;这些定义在 Kubernetes 1.7 版本之前使用。这些对象定义已经过时&…

【Linux从入门到精通】gdb调式技巧大全

本篇文章会对开发工具:gdb调试器的使用进行讲解。希望本篇文章会对你有所帮助。 目录 一、gdb简单介绍 二、gdb 调试 2、1 加入调试信息 2、2 调试命令 2、2、1 gdb可执行程序——进入调式 2、2、2 l行号/函数名——显示代码 2、2、3 b行号/函数名——打断点 2、2、4 infob——…

书法vr实景授课极大丰富了艺术家的表现语言

为了加强新形势下中华优秀传统文化教育&#xff0c;探索现代科学技术与传统文化的结合。VR公司深圳华锐视点不断创新VR虚拟现实技术在传统文化方面的体验活动&#xff0c;激发学生对传统文化的学习兴趣&#xff0c;树立民族文化自信!搭建书法授课VR虚拟场景&#xff0c;为学生创…

vue3 处理elementPlus的Tree树状结构的选中和编辑数据回显

<!-- 添加角色 请求菜单:props"{ children: children, label: name }" children:后端返回的子集结构的key label&#xff1a;name后端返回的名字&#xff1a;data"menus" menus是后端返回的菜单权限列表--><el-treeref"elTreeRef":dat…

uniapp App强制更新

需要使用DClound插件市场的一个插件挺好用的&#xff01;app升级、整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场&#xff0c;wgt静默更新https://ext.dcloud.net.cn/plugin?id7286 开始贴代码 // /utils/method.js/*** 获取当前app最新版本* param number ver…

博客质量分计算——发布 version 5.0

目录 1. 背景2. 质量分 version 5.02.1 version 4 存在问题分析2.2 version 5.0 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5.0 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量…

Debezium系列之:prometheus采集debezium的jmx数据,grafana通过dashboard展示debezium的jmx数据

Debezium系列之:prometheus采集debezium的jmx数据,grafana通过dashboard展示debezium的jmx数据 一、需求背景二、实现的效果三、导出debezium jmx四、debezium jmx重要指标五、部署prometheus和grafana六、Debezium MySQL Connector的dashboard七、debezium-dashboard.json八…

【单片机】msp430f5529 万年历,数字时钟,矩阵键盘修改时间,7针OLED显示,内部温度读取

文章目录 功能实物图原理图一些程序片段矩阵键盘内部温度读取将年月日转为星期 功能 1 显示万年历&#xff0c;利用内部RTC模块 2 按键修改时间 3 显示芯片内部的温度数值 实物图 原理图 一些程序片段 矩阵键盘 https://qq742971636.blog.csdn.net/article/details/1316505…