数据结构笔记

一、数据结构的三要素:逻辑结构、存储结构、运算


逻辑结构是独立于存储结构的(数据的存储结构是逻辑结构在计算机上的映射,不能独立于逻辑结构)
二、时间复杂度

算法工作:所需额外的辅助空间为一个常量,即 空间辅复杂度为O(1)( 其实可以理解为只要这个辅助空间可以用一个确定的常数来表示,与问题规模n无关,就算开辟100个空间在空间复杂度上也算作是O(1))
求时间复杂度:可以理解为求循环最深处一共执行循环的次数,记为t 次循环。
最后解出t 就为时间复杂度 , 因为t是一共执行的次数即时间复杂度
Case 1: 循环主体中变量参与循环条件判断 (善用归纳法找规律)
以一个例题来分析:
void fun(int n) {
    int i = 1;
    while( i<=n )
        i = i*2;
}
分析:

退出循环的条件是 i > n 的时候,程序结束 ,所以  i>n 时 ,即 2^t>n , 两边取对数 得  t>log_{2}^{}n ,结束的时候为 t=log_{2}^{}n,从而我们的时间复杂度即为 O(log_{2}^{}n)

Case 2:循环主体中变量与循环条件无关
非递归的方法(用累加的思想)
我直接拿一个例子来阐述我的思想:
for(i=n-1; i>=2; i--)
    for(j=1; j<=i-1; j++)
        if( A[j]>A[j+1] )
            A[j]与A[j+1]交换
算这个复杂度实质就是算A[j]和A[j+1]交换操作一共做了多少次
(最坏情况下,所有相邻元素都逆序时,最后一行语句每次都会执行)
可以用一个累加的式子来判断 : 最外层循环是 n-1 ~ 2 , 第二层循环 1 ~ i-1

这种情况可用两个累加来解决,最里面的1,是因为只有一次交换操作所以为1 ,所以计算过程如下


译者介绍:家华,从事mysqlDBA的工作,记录自己的一些总结

你可能感兴趣的:(数据结构笔记)