算法概念与入门

什么是算法:能解决问题的指令集合都可以称为算法

算法的重要概念:

public void test(){
           int i = 3;
           i +=i;
           System.out.println(i);
       }
       public void test1(){
           for (int i = 0; i < 5; i++) {
               System.out.println(i);
           }
       }
       public void test2(int n){
           for (int i = 0; i < n; i++) {
               System.out.println(i);
           }
       }
       public void test3(int n){
           for (int i = 1; i < n; i+=i) {
               System.out.println(i);
           }
       }
       public void test4(int n){
           for (int i = 1; i < n; i++) {
              for (int j = 0; j < n; j++) {
                   System.out.println(j);
              }
           }
       }

a:时间复杂度:执行这个算法指令所需要的时间

主要看有多少条语句(分号)即可,假设每条语句执行时间为1
上述代码1,所需时间就是1+1+1=3
上述代码2,所需时间就是1+5+5+5=16
上述代码3,所需时间就是1+n+n+n=3n+1
上述代码4,所需时间就是1+log2n
上述代码5,所需时间就是1+n+n+n*(1+n+n+n)=3n^2+5n+1

b:空间复杂度:这个算法所需要的内存大小,主要看创建了的 对象大小即可

c:大O

大O是一种粗算的概念,在大O里面,
高阶的会干掉低阶的,复杂度排序 
从小到大为:O(1)<O(logn)<O(n)<
O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!) <O(n^n)
上述代码1,所需时间就是O(1)
上述代码2,所需时间就是O(1)
上述代码3,所需时间就是O(n)
上述代码4,所需时间就是O(logn)
上述代码5,所需时间就是O(n^2)

入门级算法例子:著名的斐波那契数列(每个数的值等于前两个数值相加,0,1,1,2,3,5,8)

  实现这个算法有几种方法,以下为其中两种:
  1:递归方式,可以算出时间复杂度为 2^(n-1)-1即为O(2^n)
        public static int getNum(int n){
            if (n<=1){
                return n;
            }
            return getNum(n-1)+getNum(n-2);
        }
  2:非递归方式,可以算出时间复杂度为 O(n)
        public static int getNum2(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;
        }
  可见,算法2的实现是比较好的,自己也可以测一下算法执行时间,
  会发现算法1随着n的增大时间所需要的越来越多,而算法2所需时间都是很小,谁优谁劣一眼便知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值