首页 > 编程语言 > 详细

1.算法复杂度

时间:2020-05-21 00:48:52      阅读:77      评论:0      收藏:0      [点我收藏+]

什么是算法?

算法是用于解决特定问题的一系列的执行步骤,使用不同算法,解决痛一个问题,效率可能相差非常大.

求第 n 个斐波那契数

package zh.algorithm;

public class Fibonacci {
    // 方法1:递归
    public static int fib(int n) {
        if (n <= 1)
            return n;
        return fib(n - 1) + fib(n - 2);
    }

    // 方法2:循环
    public static int fib2(int n) {
        if (n <= 1)
            return n;
        int first = 0;
        int second = 1;
        for (int i = 0; i < n - 1; i++) {
            int sum = first + second;
            first = second;
            second = sum;
        }
        return second;
    }

    public static void main(String[] args) {

//        System.out.println(fib(0));
//        System.out.println(fib(1));
//        System.out.println(fib(2));
//        System.out.println(fib(3));
//        System.out.println(fib(4));
//        System.out.println(fib(5));
//         Output:0 1 1 2 3 5
        System.out.println(fib2(64));// Output 1640636603
    }

}

如何评判一个算法的好坏

方法1:比较不同算法对同一组输入的执行处理时间(事后统计法),缺点

  • 执行时间严重依赖硬件以及运行时各种不确定的环境因素
  • 必须编写相应的测算时间代码
  • 测试数据的选择难以保证公正性

方法2:从以下维度来评估算法的优劣:

  • 正确性,可读性,健壮性(对不合理输入的反应能力和处理能力)
  • 时间复杂度(time complexity):估算程序指令的执行次数(执行时间)
  • 空间复杂度(space complexity):估算所需占用的存储空间

大O表示法

一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度,可以忽略常数,系数,低阶.

  • 9 >> O(1)
  • 2n+3 >> O(n)
  • n2+2n+6 >> O(n2)
  • 4n3+3n2+22n+100 >>O(n3)
  • log2n,log3n,log8n >>logn

复杂度排序

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

1.算法复杂度

原文:https://www.cnblogs.com/doupi/p/12927390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!