java基础--计算时间复杂度

步骤:
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)

 

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

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果您的Java基础较差,想要快速提升自己,以下是几个建议: 1. 学习基础知识:从基础开始,逐渐深入学习Java的语法、概念和原理。可以通过看书、观看教学视频、参加线下/线上培训等方式进行学习。 2. 实践编程:在学习的过程中,要多实践,写一些简单的小程序,加深对Java语法和原理的理解,同时也能够增强对编程的熟练度。 3. 参与开源项目:在GitHub等平台上寻找一些Java开源项目,可以从中了解到优秀的编码风格和实践经验,也可以通过贡献代码的方式参与到项目中,不断提升自己的技能水平。 4. 寻找导师或师兄:在技术圈内找一些Java开发经验较为丰富的导师或师兄,可以向他们请教、讨论问题,获得指导和建议,更好地学习和成长。 总之,要提高Java编程水平,需要勤奋学习、多实践、不断总结和反思,才能够不断提升自己。 ### 回答2: 要快速提升Java基础知识,可以采取以下方法: 1. 学习基础概念:理解Java的核心概念,如面向对象编程、类、对象、继承、多态等。可以通过阅读相关教材或者参加线上课程来系统地学习。 2. 刻意练习:通过编写Java程序来巩固所学知识。可以从简单的小程序开始,逐渐增加难度和复杂度。在编程过程中遇到问题时,可以查阅相关资料和解决方案,以加深理解。 3. 参与开源项目:找一些开源项目,参与到其中,可以通过贡献自己的代码来学习和提升。在代码审核和协作过程中,可以接触到更高级的Java概念和技术,同时也可以从他人的经验中学习。 4. 参加Java相关培训或工作坊:参加线下或线上的Java培训课程或工作坊,通过专业的指导和实践来加深理解和学习。 5. 阅读优秀的Java开发书籍:选择一些经典的Java书籍进行阅读,比如《Java编程思想》、《Effective Java》等。这些书籍可以帮助你理解Java的原理和实践,提升编程能力。 6. 参与社区讨论:加入一些Java开发者社区或者论坛,与其他开发者交流经验和问题。在这些讨论中,经常会遇到一些有挑战性的问题,可以借此机会学习和提升。 7. 实践项目经验:通过参与一些小项目或者个人开发,实践所学的知识。在实际项目中,会遇到各种各样的情况和需,可以锻炼解决问题和应对挑战的能力。 总之,提升Java基础需要坚持学习和实践,通过多种途径来加深理解和掌握。同时要保持积极的学习态度和持续的学习动力,才能够在较短时间内快速提升自己。 ### 回答3: 要快速提升Java基础,以下几点可以帮助你: 1. 学习资源:寻找一些针对初学者的Java教材、视频教程或在线课程。这些教材通常会从简单到复杂地介绍Java的各个方面,帮助你逐步增强基础知识。 2. 练习编码:编写实际的Java程序是提升基础的有效方法。尝试完成一些简单的编程任务,如写一个九九乘法表、计算一个数列的和等。通过实践,你可以更好地理解和掌握Java的语法和编程概念。 3. 参与开源项目:参与开源项目是锻炼Java编程技能的好机会。选择一些初级或适合新手的开源项目,并贡献你的代码。通过与其他开发者交流、审查和改进代码,你可以学到很多实际开发中的技巧和经验。 4. 刻意练习:针对自己的薄弱点进行有针对性的练习。在学习过程中,记录下容易混淆或不理解的概念,然后针对这些问题进行重点练习。通过反复练习,你可以加深对这些概念的理解和掌握。 5. 寻帮助:如果遇到困难或不理解的地方,不要害怕寻他人的帮助。可以通过问答社区、参加线下培训班或找到有经验的Java开发者请教,他们会给予指导和解答你的问题。 6. 实践项目:找一些小的实际项目来锻炼你的Java技能。通过独立完成项目,你可以更全面地应用你所学的知识,并发现并解决实际开发中遇到的问题。 7. 持续学习:Java是一个庞大而不断发展的编程语言,随着时代的发展,它的新特性和技术也在不断涌现。因此,要持续学习才能跟进最新的发展。阅读Java相关的书籍、博客、文章以及参加技术交流会议,可以帮助你不断扩展自己的知识面。 通过以上方法,你可以有效地提升自己的Java基础并不断提高自己的编程水平。要记住坚持和实践才是关键,将学到的知识应用于实际项目中,才能真正巩固和提高自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值