数据结构与算法初阶知识--时间与空间复杂度

@开始数据结构之旅

是什么是数据结构

    通俗来讲,是数据的组织形式。学习数据结构,让我更快,

    更优的写出好的算法,何为好的算法呢,接下来,

    从时间复杂度,和空间复杂度来认识。
    概括一句话是:
    时间复杂度主要衡量一个算法的运行快慢,
	而空间复杂度主要衡量一个算法运行所需要的额外空间。

数据结构的时间复杂度

  Tips:   算法中的基本操作的  执行次数,为算法 的时间复杂度。

数据结构的空间复杂度

  Tips: 是对一个算法在运行过程中 临时 占用 存储空间大小的量度 。

估算用O()

	在时间复杂度里面只看执行次数;
	o(1),代表常数次
	O(N),代表最大项,执行n次,
	举个例子:
	N^2+2N+10--->2^N
	O(N^2)
	

比如:

void Func1(int N)     ** N^2+2N+10--->2^N**
{ 
	int count = 0; 
	for (int i = 0; i < N ; ++ i) 
	{  
	  for (int j = 0; j < N ; ++ j)
	      {  
	            ++count;  
	      } 
	} 
	for (int k = 0; k < 2 * N ; ++ k) 
	 { 
	   ++count;
	 }
 
int M = 10;  
while (M--) 
{
    ++count;
  }
void fun(int n) {
  int i=l;
  while(i<=n)
    i=i*2;
}
** 在这里,这不是NO(N)**
执行次数不到N,每次都2倍的缩短,设执行次数x
NN个数,原本执行n次)=2^x;
所以   x=loogN

接着来,接着理解递归时间复杂度

  int f ( unsigned int n ) {
    if (n == 0 || n==1) 
      return 1;
    else 
      return n * f(n-1);
  }
  递归n次,结果是n!,不用管!!
  ** 每次执行1次,执行 n 次**

还有二分法时间复杂度

  
int BinarySearch(int* a, int n, int x)
 {    assert(a);
 
    int begin = 0;    int end = n-1;   
     // [begin, end]:begin和end是左闭右闭区间,因此有=号    
    while (begin <= end)  
      { 
             int mid = begin + ((end-begin)>>1); 
                    if (a[mid] < x) 
                               begin = mid+1; 
                     else if (a[mid] > x) 
                                end = mid-1;       
                     else  
                          return mid;    
     }
 
    return -1; 
 }
** 二分法里面,n/2*(n-1=x 
	x就是执行次数
**
long long* Fibonacci(size_t n) {
    if(n==0)         
    return NULL;        
    long long * fibArray = (long long *)malloc((n+1) * sizeof(long long));    
    fibArray[0] = 0;    
    fibArray[1] = 1;    
    for (int i = 2; i <= n ; ++i)    
    {        
    	fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
    }
 
    return fibArray; }
	**
	malloc创建了新的空间n+1--O(N)
	**

	 int** fun(int n) {
     int ** s = (int **)malloc(n * sizeof(int *));
     while(n--)
     s[n] = (int *)malloc(n * sizeof(int));
     return s;
     **
     	此处开辟的是一个二维数组,数组有n行,
     	每行分别有1,2,3,...n列,所以是n(n + 1)/2个元素空间,
     	空间复杂度为n^2
     **
  }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值