Python3【时空复杂度】测试

Python 算法基础篇:时间复杂度和空间复杂度简介 在学习和分析算法时,时间复杂度和空间复杂度是两个关键概念。它们帮助我们评估算法的性能和资源使用情况。本篇博客将为你介绍时间复杂度和空间复杂度的概念,并通过 Python 示例代码演示它们的应用。 阅读详情

空间复杂度

  • sys.getsizeof
from sys import getsizeof
from numpy import array
from pandas import DataFrame
r = range(10)
sg = ''.join(str(i) for i in r)
ls = list(r)
st = set(r)
dt = {i: i for i in r}
t = tuple(r)
a = array(ls)
df = DataFrame(ls)
class C:pass
def f():pass
for i in ['r', 'sg', 'ls', 'st', 'dt', 't', 'a', 'df', 'C', 'f']:
    size = getsizeof(eval(i))
    print('\n%2s' % i, '\033[0;7m \033[0m' * (size // 14), size)
    # print(eval(i))

在这里插入图片描述
集合空间占用大于字典
元组空间占用小于列表

时间复杂度

Timer

from time import time
class T:
    def __init__(self):
        self.t = time()
    def __del__(self):
        t = time() - self.t
        print('\n', '\033[0;7m \033[0m' * int(t * 20), t)

for

from numpy import array
r = range(500000)
sg = ''.join(str(i) for i in r)
ls = list(r)
dt = {i: i for i in r}
st = {i for i in r}
tu = tuple(r)
a = array(r)

for j in ['r', 'sg', 'ls', 'dt', 'st', 'tu', 'a', 'a.tolist()']:
    t = T()
    for i in eval(j):pass
del t
结果时间
生成器0.09400558471679688
字符串0.38802218437194824
列表0.06100344657897949
字典0.07000398635864258
集合0.06800389289855957
元组0.06100344657897949
numpy.array0.1370079517364502
numpy.array.tolist()0.128007173538208

元组≈列表>字典≈集合>生成器>>numpy.array.tolist()>numpy.array>>>字符串

in

r = range(10000)
sg = ''.join(str(i) for i in r)
ls = [str(i) for i in r]
dt = {str(i): i for i in r}
st = {str(i) for i in r}
t1 = tuple(r)
t2 = tuple(ls)

t = T()
for i in ls:
    if i in sg:pass  # 字符串
t = T()
for i in ls:
    if i in ls:pass  # 列表
t = T()
for i in ls:
    if i in dt:pass  # 字典
t = T()
for i in ls:
    if i in st:pass  # 集合
t = T()
for i in ls:
    if i in t1:pass  # 元组(int)
t = T()
for i in ls:
    if i in t2:pass  # 元组
del t
结果时间
字符串0.2870168685913086
列表3.38619327545166
字典0.005000591278076172
集合0.004000186920166016
元组17.896451711654663
元组23.6772103309631348

集合>字典>>字符串>>列表>元组

列表、字典推导式

[]

r = range(100000)

t = T()
ls1 = [i+1 for i in r]
ls2 = [i+2 for i in r]

t = T()
ls1, ls2 = [], []
for i in r:
    ls1.append(i+1)
    ls2.append(i+2)

del t


列表推导式更快

{}

t = T()
dt = {i: i+1 for i in r}
t = T()
for i in r:
    dt[i] = i + 1
del t

0.012964963912963867
0.010970592498779297
字典推导式反而更慢

文件

from sys import getsizeof
from time import time
import os, pickle, json


class T:
    def __init__(self):
        self.t = time()

    def __del__(self):
        t = time() - self.t
        print('\n', '\033[0;7m \033[0m' * int(t * 40), t)


b = {i: i for i in range(300000)}

txt = 'a.txt'
py = 'a.py'
js = 'a.json'
pkl = 'a.pickle'

with open(txt, 'w', encoding='utf-8') as f:
    f.write(repr(b))
with open(py, 'w', encoding='utf-8') as f:
    f.write('b=' + repr(b))
with open(js, 'w', encoding='utf-8') as f:
    json.dump(b, f)
with open(pkl, 'wb') as f:
    pickle.dump(b, f)

print(getsizeof(b))
for f in [txt, py, js, pkl]:
    print(os.path.getsize(f))

t = T()
with open(txt, encoding='utf-8') as f:
    b = f.read()
t = T()
from a import b
t = T()
with open(js, encoding='utf-8') as f:
    b = json.load(f)
t = T()
with open(pkl, 'rb') as f:
    b = pickle.load(f)
del t


pickle占用空间最小,读取速度较快,力荐~~
from XX import xx 速度较慢

比较符:>!=<

几乎没什么差别

from time import time
n = 9999999
t0 = time()
[i >= 1000001 for i in range(n)]
t1 = time()
[i > 1000000 for i in range(n)]
t2 = time()
[i == 1000000 for i in range(n)]
t3 = time()
[i != 1000000 for i in range(n)]
t4 = time()
print(t1 - t0, t2 - t1, t3 - t2, t4 - t3)

0.7499642372131348 0.7569770812988281 0.7450189590454102 0.7629609107971191

20天拿下华为OD笔试之【哈希表】2025C-测试用例执行计划【Py/Java/C++/C/JS/Go六种语言OD独家2025C卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解 可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过) 阅读详情

相关推荐

【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【链表】2024E-寻找链表的中间节点【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 620

Python算法中的时间复杂度与空间复杂度,基于实例讲解

本文将通过实例带你了解Python中算法的时间复杂度和空间复杂度。

weixin_39915649的博客 1312

20天拿下华为OD笔试之【栈】2025B-荒岛求生【Py/Java/C++/C/JS/Go六种语言OD独家2025B卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 653

Python 算法高级篇:深入理解复杂度分析-时间复杂度与空间复杂度

在算法和数据结构中,了解和分析算法的效率至关重要。时间复杂度和空间复杂度是评估算法性能的两个关键指标。本篇博客将深入探讨这两个复杂度分析方法,包括它们的定义、计算方式、常见复杂度级别以及如何在 Python 中进行分析。我们将使用详细的解释和示例代码,确保你深刻理解这些关键概念。

小蓝枣的博客 2222

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【模拟】2024E-找终点【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 845

20天拿下华为OD笔试之【不定滑窗】2025C-最小矩阵宽度【Py/Java/C++/C/JS/Go六种语言OD独家2025C卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 775

python—时间复杂度

一、时间复杂度规则 1、计算时,往往只关注时间频度中最高次项,其他次要项和常数项忽略 例如: T=3*n^3+2*n^2+10000时间的复杂度: O(n^3) 2、顺序结构,时间复杂度按加法来计算 让用户输入2个列表,一个列表的长度为m另一个为n,对这2个列表分别求和 比较他们的和的大小 循环遍历,分别求和,比较大小 m步、n步 时间复杂度为O(m+n) 3、循环结构,时间复杂度按乘法来运算 T=n*n*3 4、分支结构:时间复杂度取最大值 5、没有特殊说明时,算法的时间复杂度都是指最坏的时间复杂度 最

python全栈 7761

【Py/Java/C++/C/JS/Go六种语言OD独家2025B卷真题】20天拿下华为OD笔试之【单调栈】2025B-删除重复数字后的最大数字2【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 494

Python常见操作的时间复杂度计算

在Python中,不同操作的时间复杂度可以通过大O表示法来计算。以下是常见操作的时间复杂度计算:常数时间复杂度:O(1) 无论数据规模的大小,操作都可以在常数时间内完成。例如,访问列表或字典中的元素,执行算术运算等。线性时间复杂度:O(n) 操作的执行时间与数据规模n成正比。例如,遍历一个列表,求列表或字符串的长度等。对数时间复杂度:O(log n) 操作的执行时间随着数据规模n的增加而增加,但是不是线性增长。例如,在二分查找算法中,每次操作都能将搜索范围减半。

captain 2361

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【回溯/dp】2024E-表演赛游戏分组【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 257

AD9371实战:如何用ZCU106搭建JESD204B TX时钟链(含关键参数计算)

本文详细解析了如何基于Xilinx ZCU106开发板为AD9371搭建JESD204B TX时钟链。文章从系统需求出发,逐步推导出从IQ采样率到GTH线速率的关键参数计算公式,并提供了在Vivado中配置GTH收发器(包括QPLL选择、分频比设置)的实战步骤与调试技巧,旨在帮助硬件工程师快速实现稳定可靠的JESD204B高速数据传输链路。

weixin_29164843的博客 294

排序方法:插入、冒泡、选择、希尔、归并、堆排序,时空复杂度,原理图解,python 实现

文章目录各类排序算法时空复杂度、稳定性对比1. 插入排序1.1 直接插入排序1.2 折半插入排序2. 冒泡排序3. 选择排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序完整测试代码 各类排序算法时空复杂度、稳定性对比 序号 排序算法 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定 1 插入排序 O(n2) O(n2) O(1) 是 2 冒泡排序 O(n2) O(n2) O(1) 是 3 选择排序 O(n2) O(n2) O(1) 不是 4 希尔排序 O(nlogn

ywm_up 724

Lumerical官方案例、FDTD时域有限差分法仿真学习(十三)——多模干涉耦合器(MMI)

计算通过 1×2 端口多模干涉 (MMI) 耦合器的宽带传输和光损耗。 使用设备 S 参数在 INTERCONNECT 中创建 MMI 的紧凑模型。 它还展示了如何使用 CML 编译器提取这些参数以生成紧凑模型。 一、概述 了解模拟工作流程和关键结果 低损耗光合路器和分路器是基于 Mach-Zehnder 的光调制器的基本组件,并且是集成电路的关键组成部分。通过在输入/输出波导处使用线性锥形确保输入/输出波导的模式与干涉区域之间的

weixin_45719141的博客 1万+

从‘SyntaxError: Non-ASCII character’聊起:Python 2到Python 3的编码变迁与实战避坑

本文探讨了Python 2到Python 3的编码变迁,重点解析了‘SyntaxError: Non-ASCII character’错误的根源及解决方案。通过对比Python 2的编码困境与Python 3的UTF-8默认支持,提供了现代项目中的编码防御策略和混合环境下的兼容方案,帮助开发者有效避免编码陷阱并提升系统性能。

dfu65065的博客 550

LMI线性矩阵不等式之非线性变量处理

​ 如果一个LMI线性矩阵不等式中的某项存在两个矩阵变量相乘,那么称该类情形为非线性矩阵不等式,而要直接求解时很困难的,而且LMI工具箱也无法求解非线性矩阵,所以需要通过变量替换法进行处理。 ​...

Mr.邹的博客 4552

解决LangChain4j报错HTTP/1.1 header parser received no bytes

当使用调用自己部署的大模型服务时报错: 报错信息如下:

weixin_44455388的博客 2341

MATLAB时空复杂度实战分析:从测量到优化

在工程计算中,时间复杂度和空间复杂度是衡量代码性能的核心指标。不同于C/Python的指令级分析,MATLAB因向量化、JIT编译、写时复制等机制,其复杂度需依托实证测量而非理论推导。通过timeit精准计时、memory与whos追踪内存驻留、profile定位热点行,可量化识别O(n²)隐式扩容、O(n²)广播开销等典型陷阱。这些方法直接服务于信号处理、图像分析、数值仿真等高频场景,帮助非CS背景工程师将抽象复杂度转化为命令行可执行的调优动作——真正实现‘时间复杂度怎么算’和‘空间复杂度怎么计算’的工程

weixin_30258901的博客 332

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4796

VibeThinker-3B进阶使用:Claim-Level Reliability Assessment(CLR)测试时扩展策略详解

VibeThinker-3B是一个专注于数学、代码和STEM推理任务的3B参数小型语言模型,通过创新的Claim-Level Reliability Assessment(CLR)测试时扩展策略,在可验证推理任务中实现了接近前沿大模型的性能表现。本文将详细介绍CLR策略的工作原理、实现方法和实际应用场景。 ## 🔍 什么是CLR测试时扩展策略? **Claim-Level Reliabili

gitblog_01042的博客 890

NR PUCCH(二)PUCCH format 2/3/4

继续看PUCCH2/3/4:PUCCH format 0和1所携带的信息bits少,UCI bits2bits,信息bit需要经过编码等过程下面分别来看。

ModemProtocol的博客 539

银河麒麟硬盘健康检测:smartctl/badblocks实战与坏盘预判

xfs_repair检查。S.M.A.R.T检测。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 860

20天拿下华为OD笔试之【单调栈】2025C-找朋友【Py/Java/C++/C/JS/Go六种语言OD独家2025C卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 1689

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3053

20天拿下华为OD笔试之【BFS】2025C-流浪地球【Py/Java/C++/C/JS/Go六种语言OD独家2025C卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 1578

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode 0045.跳跃游戏 II:贪心(柳暗花明又一村)

LeetCode 0045.跳跃游戏 II:贪心(柳暗花明又一村) 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i] i + j < n 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

<font color="Pink">Tisfy的博客</font> 922

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

20天拿下华为OD笔试之【固定滑窗】2025C-最左侧冗余覆盖子串【Py/Java/C++/C/JS/Go六种语言OD独家2025C卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 1214

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 自律
下一篇: 爬虫保存图文(按序)
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值