时间复杂度

如何计算时间复杂度 Timecomplexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数. 时间复杂度常用大O表述,不包括这个函数的低阶项和首项系数。个人理解为。 阅读详情

背景

今天妈妈让我写一个求出100以内的质数的小小小小小小小小小小小小小程序,我很快就写完了(几秒钟),但妈妈说我这个不够简洁,我心想:“我这个代码就几行,怎么不够简洁呢?”原来是因为讨厌的时间复杂度的原因,所以她才说我的代码不简洁。

一开始我写的代码是: 

a = []
for i in range(2,100+1):
    for j in range(2,i):
        if i % j == 0:
            break
    else:
        a.append(i)

#不要先说我这个代码有问题,你觉得有问题的话你到python里试一下,或者在评论区提醒一下

如果给你们1分钟时间让你们写一个像我这样的小程序可能你们也会这样写(连思考都不用),

但是毕竟是双层循环,而且单层循环次数很多。

然后我想起了我做了一个测试卷,上面就有判断质数的小程序。

我们就赶紧找了一下,别看它的代码很长,它的方法很好,它时间复杂度迅速减少

他的代码是:

def getPrime(n):
    for x in range(2,n+1):
        x_sqrt = math.sqrt(x)
        for prime in primeList:
            if prime > x_sqrt:
                primeList.append(x)
                break
            if x%prime==0:
                break
        else:
            primeList.append(x)
    return primeList

他用的是开根号比较大小。

而我又写了一段:

a = []
for i in range(2,200):
    for j in a:
        if i % j == 0:
            break
    else:
        a.append(i)

是用原来的质数来除这个数,这样循环会少一些。但是我这个方法还是没有它的方法便捷。

比如:

我又写了那一段代码中range,写成range(2,30)

测试卷上写的(是一个函数),导入一下就行了,getPrime(30)

然后都print一下。

结果:

 看似结果都一样,但是时间复杂度不一样,我们从37开始看,测试卷上的37只需要求下平方根(6.0827……大约就是6)质数列表(primeList)遍历到7的时候,他就会判断成37是质数(7>6)

而我写的需要到31才能判定37是质数。

由此可见,我们的时间复杂度是不一样的,他的运行效率快,我运行效率比较慢。

                                大家一定要简化算法,让时间复杂度少一点

时间复杂度解析 根据算法换算时间复杂度 常见时间复杂度及其之间的关系 一、引入 先看一道题,如果 a+b+c=1000,且 a2+b2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 二、两种解答方式 算法是独立存在的一种解决问题的方法和思想。 第一种解答方式: import time start_time = time.time() for a in range(0, 1001): for b in range(0, 1001)... 阅读详情

相关推荐

时间复杂度分析

在上一篇文章中我们提到了时间复杂度大O分析法的使用,这次继续来探究时间复杂度的分析 我们先来看一下下面这段代码 这段代码的作用是在数组中寻找x的位置,找到了直接返回位置,没有找到的话返回-1,用上一篇文章所学到的知识,可以很清楚的看出来,这段代码的时间复杂度为O(n) 但是这段代码明显还有优化的空间,如果我们在数组中间寻找到x的话,就不需要把整个数组都循环一边了,所以可以优化为下面这段代码。 ...

无心的博客 2744

Python判断整数是否为素数(质数)的低复杂度方法,含源码

在数学定义中,素数(质数)即为除了1和该数自身外,无法被其他整数整除的数。且1不为素数(质数)。

ZZR2631574030的博客 1685

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案

本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。

weixin_29047919的博客 304

低时间复杂度素数筛选---埃氏筛选(只有模板不讲原理!)

#include <stdio.h>int main(){    int a[1001];  memset(a, 0, sizeof(a));    int i,j;    for(i=2;i<=1000;i++)    {        if(a[i]==0)        {           for(j=i+i;j<=1000;j+=i)              ...

shezjoe的博客 675

(35)远程识别(又称无人机识别)(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(35) 远程识别(又称无人机识别)》。

无人机开发(开源Ardupilot) 4万+

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

究竟什么是时间复杂度,怎么求时间复杂度,看这一篇就够了

时间复杂度 将复杂度讲的清清楚楚!

代码随想录 2万+

【实战指南】EC-Engineer中ESI配置与PDO Mapping全流程解析

本文详细解析了EC-Engineer中ESI配置与PDO Mapping的全流程操作,包括环境准备、ESI文件导入技巧、在线配置细节及故障处理。特别强调了WinPcap驱动的兼容性问题和PDO Mapping的最佳实践,帮助工程师高效完成EtherCAT总线配置,适用于工业自动化领域的伺服控制与运动协同场景。

weixin_28730927的博客 397

十分钟搞定时间复杂度(算法的时间复杂度)

算法复杂度算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间复杂度一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n)

swadian2008的博客 5万+

nRF52382低功耗蓝牙应用开发之入门教程-软件烧录

准备工作在上一篇文章讲过了,这里就讲讲nRFgo studio的使用 硬件准备: J-link:2线 供电:3.3V 如下图打开nRFgo studio界面介绍, 2、如果J-link正常,如下图 3、如果蓝牙芯片正常 4、烧录过程,如果蓝牙芯片之前有烧录过程序,需先点擦除,再点烧录 5、烧录代码路劲,例如 F:\nRF\SDK\nRF5_SDK_15.2.0_...

LinQiPing233的博客 1945

Matlab:Matlab 软件学习之Matlab内置的各种系统的简介、案例应用(基于Simulink模糊控制仿真/二阶瞬态震荡电路案例)之详细攻略

选择左上角要编辑变量的图标,给定当前变量的论域Range,设置隶属函数类型type(八种隶属函数类型以供选择),最后选中某个隶属度函数(选中为红色),移动绘图区的每个隶属度函数的三个端点(竖向为权重)。(1)、首先在模糊规则编辑器左边选择一个输入变量,并选中它的一个语言值(隶属函数),然后编辑器右边选择一个输出变量,并选中它的一个语言值(隶属函数),然后将这种关系添加到模糊规则中。制定完成后,会形成模糊规则矩阵,系统会根据模糊输入量(如r1、r2),经过模糊规则(如45条),进而确定输出量(Y1、Y2)。

走向CTO之路 1123

什么是时间复杂度

开门见山 解决问题 算法的时间复杂度,是一个用于度量一个算法的运算时间的一个描述,本质是一个函数,根据这个函数能在不用具体的测试数据来测试的情况下,粗略地估计算法的执行效率,换句话讲时间复杂度表示的只是代码执行时间随数据规模增长的变化趋势。 常用大O来表述,这个函数描述了算法执行所要时间的增长速度,记作f(n)。算法需要执行的运算次数(用函数表示)记作T(n)。存在常数 c 和函数 f(n),使得...

qq_41297896的博客 3万+

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+

时间复杂度详解2——时间复杂度的计算

对于两层循环时间复杂度的计算,我们完全可以将这个循环视作一个单层循环,然后它的循环体是另一个循环。这样子计算起时间复杂度就很简单了实际上无论多少层循环,我们只需一层一层分开来计算就行了,最后只需将最内层的语句的执行次数全加起来就好了例一: 要计算这个嵌套循环的时间复杂度,我们首先要分析每个循环的执行次数。外层循环 从 到 ,因此会执行 次。对于每一个 的值,内层循环 的执行次数从 到 。具体来说:因此,内层循环的总执行次数是 ,这是一个等差数列的和,其和为 (\frac{(n+1)(n+2)

2301_80224556的博客 5837

python爬虫项目(六十八):爬取电商平台用户购买历史数据,分析消费行为

本文详细介绍了如何爬取电商平台用户购买历史数据,并分析其消费行为。通过爬虫技术、数据存储、分析和可视化等步骤,可以深入了解消费者的行为特征。未来,随着数据分析技术的不断发展,利用人工智能和机器学习方法对消费行为进行更深层次的分析,将成为电商平台提升竞争力的重要手段。

斌擎科技 2768

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

算法的时间复杂度

一.如何计算 1.时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 2.一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))。随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越...

kkyh28的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

时间复杂度介绍

时间复杂度是指一个算法在运行过程中所需要的时间与输入规模之间的关系。通常用大O符号(Big O)表示,用以描述算法最坏情况下的运行时间增长率。

niubikls的博客 2885

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【数据结构】时间复杂度(加法乘法规则、渐近时间复杂度、循环时间复杂度总结

在实际求解中,只留表达式中最高阶的部分,丢弃其他部分。2.只需挑一个基本操作分析它的执行次数与n的关系即可。最坏时间复杂度、平均时间复杂度、最好时间复杂度。1.顺序执行的代码只会影响常数项,可忽略。3.如果有多层嵌套循环,只需关注。1.找到一个最深层的基本操作;

m0_61628700的博客 3684

关于时间复杂度的详解

-宝宝为啥听不懂他们在讨论的时间复杂度 0.0 -我怎么知道这个算法运行得比那个算法快 0.0 -我究竟会不会超时0.0 -我为什么还会超时0.0 -时间复杂度怎么算0.0 在别人还不会求时间复杂度的时候而你会了是不是很酷 在别人都会求时间复杂度的时候而你不会是不是很尴尬 千里之行始于足下 希望这篇文章能祝你一臂之力=w=   此篇详解,希望能帮助各位稍微解决一下不解=w= ...

Eirlys的博客 3万+

搞懂时间复杂度、时间复杂度

文章目录写在前面1、数学中的log什么意思?2、用T(n)表示程序执行次数3、用O(n)表示时间复杂度4、时间复杂度大小比较 写在前面 时间复杂度是用来干什么的? 时间复杂度可以用来衡量算法的执行效率。 1、数学中的log什么意思? 预备知识:数学中的log什么意思? log表示对数。如果a的b次方等于n,那么 在上面的式子中,我们可以看出log最后等于的是b,b表示a的多少次方,b是一个量级、a是一个系数,而时间复杂度中只考虑量级,所以我们写的时候常常忽略a,直接写 log n。 2、用T(n)表示程序

这里的分享,都是干货 3582

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全栈 7718
上一篇: python算法思维导图
下一篇: 快来整蛊你的室友——超级整蛊软件
B757-300
博客等级 码龄4年 259粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值