常用概念

1.基本概念

一、数据结构和算法是什么

  1. 数据结构是指一组数据的存储结构
  2. 算法是操作数据的方法
  3. 数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上

二、常用的数据结构以及算法

  1. 数据结构和算法解决的是如何更省、更快的存储和处理数据的问题,因此,我们需要一个考量效率和资源消耗的方法,这就是复杂度分析方法
  2. 最常用、最基础的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
  3. 最常用的算法:递归、排序、二分法、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

三、时间复杂度

// method1
int cal1(int n){
	int sum=0;
	int i=1;
    for(; i<=n; ++i){
      sum = sum +i;
	}
	return sum;
}

// method2
int cal2(int n){
	int sum=0;
	int i=1;
	int j=0;
    for(; i<=n; ++i){
       j =1;
       for(; j<=n;++j){
		  sum = sum +i*j;
	   }
    }
	return sum;
}
  1. 我们这里只是粗略估计,假设每行代码执行时间都一样,为unit_time
  2. method1 第2、3行代码分别需要1个unit_time的执行时间,第4、5行都运行了n遍,所以需要2n*unit_time的执行时间
  3. method2 第2、3、4行代码,每行都需要1个unit_time的执行时间,第5、6行代码循环执行了n遍,需要2n * unit_time的执行时间,第7、8行代码循环执行了n2遍,所以需
    要2n2 * unit_time的执行时间。所以,整段代码总的执行时间T(n) = (2n2+2n+3)*unit_time
  4. T(n) = O(2n+2)以及T(n) = O(2n2+2n+3)
  5. 大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度
  6. 当n很大时,你可以把它想象成10000、100000。而公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了,如果用大O表示法表示刚讲的那两段代码的时间复杂度,就可以记为:T(n) = O(n); T(n) = O(n2)
    在这里插入图片描述
    四、空间复杂度
void print(int n){
	int i =0;
	int [] a = new int[n]
	for(i; i<n; ++i){
		a[i]= i * i;
	}
	for(i=n-1;i>=0;--i){
		print out a[i];	
	}
}
  1. 空间复杂度全称就是渐进空间复杂(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。
  2. 我们申请了一个空间存储变量i,但是它是常量阶的,跟数据规模n没有关系,所以我们可以忽略。第3行申 请了一个大小为n的int类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是O(n)
    常用概念_第1张图片

你可能感兴趣的:(数据结构与算法)