算法 时间复杂度概念及案例

算法 时间复杂度概念及案例通过时间复杂度可以判断程序算法过程的优势和劣势,提高运行性能

大家好,又见面了,我是你们的朋友全栈君。

概念

常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。

时间复杂度为一个算法流程中,常数操作数量的指标。常用O(读作big O)来表示。具体来说,在常数操作数量的表达式中,只要高阶项不要低阶项,也不要高阶项的系数,剩下的部分,如果记为f(N),那么时间复杂度为O(f(N))。

算法的时间复杂度,用来度量算法的运行时间,记作: O(f(N))。它表示随着 输入大小N的增大,算法执行需要的时间的增长速度可以用 f(N) 来描述。

上面概念可能比较抽象,下面我们用案例的方式来举例下,一般我们是先拿到f(N),然后来算下他的时间复杂度,一般我们只保留对函数增长速度较大的函数
例如:
1、f(N)=c(c是常数),我们称时间复杂度为O(1)
2、f(N)=a*N+b(a和b是常数),我们称时间复杂度为O(N)
3、f(N)=a*N^2+b*N+c(a,b,c均为常数),我们称时间复杂度为O(N^2)
4、f(N)=a*N^2*logN+b*N+c(a,b,c均为常数),我们称时间复杂度为O(N^2*logN)

案例

    public String test() {
        System.out.println("hello world"); // 需要执行 1 次
        return "你好"; // 需要执行 1 次
    }

上面的代码执行了2次,则f(N)=2;则时间复杂度为O(1);



    public int test() {
        for (int i = 0; i < N; i++) { 
            System.out.println("hello world1"); // 需要执行 N 次
            System.out.println("hello world2"); // 需要执行 N 次
        }
        System.out.println("hello world3"); // 需要执行 1 次
    }

上面的代码执行了2N+1次,则f(N)=2N+1,时间复杂度为O(N)


public int test() {
        for (int i = 0; i < N; i++) { 
            for (int j = 0; j < N; j++) {
                System.out.println("hello world"); // 需要执行 N*N 次
            }
        }
    }

上面的代码执行了N*N次,则f(N)=N^2,时间复杂度为O(N^2)


当出现条件或者顺序执行的语句时,总是取最大的时间复杂度,或者说最差的情况

public int test() {
        //循环1:时间复杂度为O(N^2)
        for (int i = 0; i < N; i++) { 
            for (int j = 0; j < N; j++) {
                System.out.println("hello world"); // 需要执行 N*N 次
            }
        }
        //循环2:时间复杂度为O(N)
        for (int i = 0; i < N; i++) { 
            System.out.println("hello world1"); // 需要执行 N 次
        }
    }

上面代码的时间复杂度为O(N^2+N)=O(N^2)

public int test() {
        if(){
            //循环1:时间复杂度为O(N^2)
            for (int i = 0; i < N; i++) { 
                for (int j = 0; j < N; j++) {
                    System.out.println("hello world"); // 需要执行 N*N 次
                }
            }
        }else{
            //循环2:时间复杂度为O(N)
            for (int i = 0; i < N; i++) { 
                System.out.println("hello world1"); // 需要执行 N 次
            }
        }
    }

上面代码的时间复杂度为O(N^2)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146752.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一加6手机图片中的文字如何识别?[通俗易懂]

    一加6手机图片中的文字如何识别?[通俗易懂]一加6手机很多人都想买吧?买了手机的朋友手机里就有很多照片,一加6手机图片中的文字如何识别?文字识别都是识别大量的文字,减轻办公人员负担的。1在手机上输入PDF阅读器,然后开始识别相册图片的文字2打开就是这样的界面,找到倒数第2个的小功能3选择拍照识别中的相册,接下来添加图…

    2022年5月1日
    440
  • java mqtt服务器搭建「建议收藏」

    java mqtt服务器搭建「建议收藏」MQTT服务器搭建和客户端代码编写(java实现)服务器关于linux系统,可以在阿里云购买云服务器或者利用虚拟机安装CentOs系统。我用的就是阿里云的云服务器,比较方便吧安装Emqx服务器安装必要的依赖:$sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2设置稳定的仓库,比如CentOs7的例子:$sudoyum-config-manager–add-repohttps://repos.emqx.io

    2022年6月12日
    28
  • 3G标准中的TDD与FDD模式

    3G标准中的TDD与FDD模式2000年5月5日,在土耳其举行的ITU-R全会上,通过了包括中国提案在内的五种无线传输技术的规范,渲腥只贑DMA技术,两种基于TDMA技术。  (1)基于CDMA的技术规范  IMT-2000CDMADS(WCDMA、cdma2000DS)IMT-2000CDMATDD(TD-SCDMA、TD-CDMA)  (2)基于TDMA技术的技术规范  IMT-2000CDMASC(u

    2022年5月11日
    42
  • ubuntu怎么卸载docker_failed to start docker.service

    ubuntu怎么卸载docker_failed to start docker.serviceDocker卸载及安装(CentOS7)1.卸载:#停止docker服务systemctlstopdocker#查看当前所有版本安装信息rpm-qa|grepdocker#yumlistinstalled|grepdocker#docker-ce-cli-20.10.12-3.el7.x86_64#docker-ce-20.10.11-3.el7.x86_64#docker-scan-plugin-0.12.0-3.el7.x86_64#docker-ce-

    2025年10月3日
    4
  • java中sort排序_数据结构算法总结

    java中sort排序_数据结构算法总结数组Sort排序正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序int[]array={10,3,6,1,4,5,9};Arrays.sort(array);降序排序:先将数组Arrays.asList()转为集合,然后使用Collections.reverse()反转集合,注意如果是基础数据类型(不是数据包装类),不能使用Arrays.asList()方法可以使用Guava的Int..

    2022年8月12日
    11
  • 浙江八年级 python_如何看待浙江八年级将新增python编程以及数据结构等课程?…

    浙江八年级 python_如何看待浙江八年级将新增python编程以及数据结构等课程?…不是吧阿sir,这后浪来的有点快吧放观点:可以在教育中普及编程语言引导学生学习,但不能把它变成所有初中生的必修课你把VB这种过时东西扔掉,我举双手赞成;你让学有余力、对这方面感兴趣的同学在课余时间研习一下代码和算法,我对此是鼓励的;但是你把python拿过来强制所有人学,那这门课1)如果加入记分考试,那这在应试教育体系下纯粹是给学生增加负担(我们学校大一下刚学VB这种比python还要简单的语言,…

    2022年5月13日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号