算法导论第三课(fibonacci,二分查找,归并排序)

3.1 乘方实现

A:实现方法
乘方实现有两种方法,一个是使用O(N)的时间复杂度还有种方法可以使用递归的方式,递归的公式如下


在这里插入图片描述

通过两种方式的实现,可以进行比较两种方法的时间复杂度

B:时间复杂度
第二种方法的递归表达式如下

在这里插入图片描述

通过主定理可以算出第二种的时间复杂度为O(lgn)

C:两种方法的时间比较
在这里插入图片描述
结果分析:
从上面可以看出当次方比较小的时候,第一种方法即时间复杂度为O(N)的算法是比较优的,而当次方比较大的时候,O(lgn)的算法是比较优的。

代码:

package com.sunliang.lecture_03;

public class powerANumber {
	
	/**
	 * 算法导论第三课:关于一个数的次方:
	 * 
	 * 
	 */

	public static void main(String[] args) {
		
	    //计算两种方法的时间的不同
		int cycle = 1000000000;
		long startTime = System.currentTimeMillis();
		for(int i =1;i>1); //最好使用移位操作会比较快
	    result = result * result;
	    if((n & 1)==1) {//如果是奇数
	    	result = result * x;
	    }
	    return result;
	}
}

3.2 merge sort

归并排序的递归公式为


在这里插入图片描述

通过主定理可以得出算法复杂度为O(nlgn)

3.3 binary search

二分查找的递归公式为


在这里插入图片描述

通过主定理的case 2可以得出算法复杂度为O(lgn)

3.4 fibonacci Number

下一个文档继续将fibonacci数

你可能感兴趣的:(算法导论)