计算时间复杂度

步骤:
1、找到执行次数最多的语句

2、语句执行语句的数量级

3、用O表示结果

计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦。

然后:

1、用常数1取代运行时间中的所有加法常数

2、在修改后的运行次数函数中,只保留最高阶项

3、如果最高阶项存在且不是1,那么我们就去除于这个项相乘的常数。比如3n^2我们取n^2

最后就可以得到你们想要的结果了。

举几个例子:

我们来看一下这个例子,用的是java,内容就是打印8条语句,问这个程序的时间复杂度是多少?

public class TS {
    public static void main(String[] args) {
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
        System.out.println("111");
    }
}
 

O(8)? 当然不是!!!按照时间复杂度的概念“T(n)是关于问题规模为n的函数”,这里跟问题规模有关系吗?没有关系,用我们的第一个方法,时间复杂度为O(1)。

 

第二个例子:(线性阶)

 
public class TS {
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1;i<=100;i++) {
            sum = sum + i;
        }
    }
}
时间复杂度为O(n)。

 

第三个例子:(平方阶)

 
public class TS {
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1;i<=100;i++) {
            for(int j=1;j<=100;j++)
                sum = sum + i;
        }
    }
}
 外层i的循环执行一次,内层j的循环就要执行100次,所以外层执行100次,那么总的就需要执行100*100次,那么n次呢?就是n的平方次了。所以时间复杂度为:O(n^2)。

平方阶的另外一个例子:

public class TS {
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1;i<=100;i++) {
            for(int j=i;j<=100;j++)
                sum = sum + i;
        }
    }
}
当i=1的时候执行n次,当n=2的时候执行(n-1)次,......

一直这样子下去就可以构造出一个等差数列:n+(n-1)+(n-2)+......+2+1

根据等差数列的求和公式:或者

求和易得:n+n*(n-1)/2整理一下就是n*(n+1)/2然后我们将其展开可以得到n^2/2+n/2。

根据我们的步骤走,保留最高次项,去掉相乘的常数就可以得到时间复杂度为:O(n^2)

第四个例子:(对数阶)

public class TS {
    public static void main(String[] args) {
        int i=1;
        int n= 100;
        while(i<n) {
            i = i*2;
        }    
}
2^x = n,所以时间复杂度为O(log2n)。

 

补充常用的时间复杂度所耗费的时间从小到大依次是:
O(1 )< O(logn) < O(n) < O(n*logn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

 

最坏情况与平均情况:
平均运行时间是期望的运行时间。

最坏的运行时间是一种保证。我们提到的运行时间都是最坏的运行时间。

 

可以通过空间来换取时间。

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

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

相关文章

领导者的资质——学习笔记(2):领导者的人格

领导者的资质——学习笔记&#xff08;2&#xff09;&#xff1a;领导者的人格在领导者的资质中&#xff0c;人格最为重要。领导者保持自己高层次的人格&#xff0c;是解决当前企业治理危机最根本性的方略。我们要时时事事思考“作为人&#xff0c;何为正确”不断自问自答&…

sql server 2008学习12 事务和锁

事务 事务的点: 1.begin tran 是事务开始的地方,也是 事务回滚的起点.也就说他会忽略这个起点之后的最终没有提交的所有语句, 2.commit tran 事务的提交 是一个事务的终点 当发出 commit tran命令时,可以认为 该事务是 持久的. 撤销已完成事务的唯一方法 是 发出一个新的事务.…

领导者的资质——学习笔记(3):领导者的十项职责

领导者的资质——学习笔记&#xff08;3&#xff09;&#xff1a;领导者的十项职责领导者必须向员工说明工作的目的意义&#xff0c;设定具体目标&#xff0c;制定相应的计划&#xff0c;怀着强烈的愿望&#xff0c;付出不亚于任何人的努力&#xff0c;表现出坚强的意志&#x…

漫画:什么是时间复杂度?

时间复杂度的意义 究竟什么是时间复杂度呢&#xff1f;让我们来想象一个场景&#xff1a;某一天&#xff0c;小灰和大黄同时加入了一个公司...... 一天过后&#xff0c;小灰和大黄各自交付了代码&#xff0c;两端代码实现的功能都差不多。大黄的代码运行一次要花100毫秒&#x…

Eclipse如何连接SQL Server 2005数据库

做管理系统当然少不了经常与数据库打交道&#xff0c;在网上搜了很多数据库版本都不小&#xff0c;大的有好几个G的&#xff0c;小的也有几百兆的&#xff0c;我这可怜的内存&#xff0c;最终找了个精简版中的精简版的Sql server2005&#xff0c;只有80几兆&#xff0c;本来只想…

NLP 最新进展

参考文献&#xff1a; •http://www.dataguru.cn/article-14237-1.html •https://zhuanlan.zhihu.com/p/46652512 •https://github.com/google-research/bert •https://allennlp.org/elmo •https://arxiv.org/pdf/1802.05365 •https://arxiv.org/abs/1810.04805

一句话评论设计模式六大原则

注&#xff1a;转自http://blog.csdn.net/jesse621/article/details/7216331 原则&#xff0c;故名思议则是本质的意思。所谓擒贼先擒王&#xff0c;研究设计模式自然要先了解设计原则&#xff0c;所有的模式都是在这些原则的基础之上发展起来的&#xff0c;有的是侧重一 个&am…

Big GAN

参考文献&#xff1a; •https://github.com/kayamin/DR-GAN •https://www.jianshu.com/p/4ee8f9284b81 •http://cvlab.cse.msu.edu/pdfs/Tran_Yin_Liu_CVPR2017.pdf •https://arxiv.org/abs/1809.11096 •https://juejin.im/entry/5c05e76c51882539c60cf2d5 •https:…

时间复杂度空间复杂度怎么算?

什么是算法 算法的定义是这样的&#xff1a;解题方案的准确而完善的描述&#xff0c;是一系列解决问题的清晰指令。巴拉巴拉的&#xff0c;虽然是一小句但还是不想看&#xff08;题外话&#xff1a;有时候吧专业名词记下来面试的时候还是挺有用的&#xff09;&#xff0c;其实…

什么样的知识,值得我们终生学习

#什么样的知识&#xff0c;值得我们终生学习&#xff1f; 原文&#xff1a;https://dwz.cn/vylyXXJi 一、引言 可能你从初中就开始抱怨&#xff1a;我学相似三角形能干什么&#xff1f;阿伏伽德罗常数有什么用&#xff1f;我一不跳楼&#xff0c;二不高空抛物&#xff0c;学自由…

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

&#xff08;一&#xff09; 真实面试题之&#xff1a;Hashmap的结构&#xff0c;1.7和1.8有哪些区别 不同点&#xff1a; &#xff08;1&#xff09;JDK1.7用的是头插法&#xff0c;而JDK1.8及之后使用的都是尾插法&#xff0c;那么他们为什么要这样做呢&#xff1f;因为JDK1…

作品展结束了,学习才真正的开始

我的作品展旅程分为两个大的部分。 一、班里的事务&#xff08;这是最重要&#xff0c;也最为艰巨的。&#xff09; 从4月15号自考结束后&#xff0c;开始真正进入作品展的筹划阶段。主要和唐欢负责作品的筛选工作&#xff0c;由于我工作经验有限&#xff0c;能力更是有限&…

数据结构第一章概论习题及答案

一、名词解释 1.数据表示 2.数据处理 3.数据 4.数据元素 5.逻辑关系 6.逻辑结构 7.结构 8.运算 9.基本运算 10.存储结构 11.顺序存储结构 12.链式存储结构 13.索引存储结构 14.散列存储结构 15.算法 16.运行终止的程序可执行部分 17.…

管理学习笔记(1)——高效团队的五大关键

高效团队的五大关键1. 安全感&#xff1a;敢于冒险&#xff0c;不会因此干到不安 2. 可靠性&#xff1a;指望他人可以准时完成高质量的工作 3. 结构与清晰度&#xff1a;目标、角色和执行计划都很清楚、明确 4. 工作意义&#xff1a;对各自来说做意义重大的工作 5. 工作影响…

算法导论-用于不相交集合的数据结构

21.2-4 对于图21-3中操作序列的运行时间&#xff0c;给出其紧确的渐近界。假定采用的是链表表示和加权合并启发式策略。 解&#xff1a;make-set&#xff0c;O(n)&#xff1b;加权合并启发&#xff0c;每次将较短链表链接到较长链表&#xff0c;即每次将长度为1的集合链接到另外…

大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 消费者

3.3.1 消费方式 consumer 采用 pull&#xff08;拉&#xff09;模式从 broker 中读取数据。 push&#xff08;推&#xff09;模式很难适应消费速率不同的消费者&#xff0c;因为消息发送速率是由 broker 决定的。 它的目标是尽可能以最快速度传递消息&#xff0c;但是这样很…

最活跃FPGA论坛推荐社区

http://forums.xilinx.com/ Xilinx User Community Forums(Xilinx用户交流社区)http://www.openhw.org/ 中国首个开放源码硬件社区http://xilinx.eetrend.com/ 电子创新网赛灵思中文社区http://bbs.elecfans.com/forum.php 电子发烧友社区&#xff08;电子技术论坛&#xff09;…

大数据技术之kafka (第 3 章 Kafka 架构深入 ) offset讲解

新版的 Kafka 使用一个选举出来的 controller 来监听 zookeeper&#xff0c;其他 node 再去和 controller 通信&#xff0c;这么做的目的是为了减少 zookeeper 的压力。bootstrap-servers 会自动发现其他 broker&#xff0c;这也是 bootstrap 的含义 前面我们讲到了消费者&…

创建线程的三种方式

第一种&#xff0c;用Thread子类创建 Thread thread new Thread(){ Overridepublic void run() {while(true){try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("1---->" Thread.currentThread().getName())…

大数据技术之kafka (第 3 章 Kafka 架构深入 ) 消费者组案例

1&#xff09;需求&#xff1a;测试同一个消费者组中的消费者&#xff0c;同一时刻只能有一个消费者消费。 2&#xff09;案例实操 &#xff08;1&#xff09;在 backupo01、backupo02 上修改/usr/local/hadoop/kafka/kafka_2.12-2.4.1/config/consumer.properties 配置 文件…