数据结构作业

一,思维导图



二,概念笔记

1,在计算时间复杂度的时候一般有:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(2n)<O(n!)

2,在计算平均时间复杂度时对P(i)*T(i)求和,其中P(i)是概率,T(i)是每个i的时间复杂度。

3,存储密度等于节点中个元素所占的储存量除以结点所占的储存量,存储密度越大储存空间的利用率越高。

4,每次出栈只能出栈栈顶元素,栈可以称为后进先出表,队列的插入与删除操作只能在各自的一端进行,对可以被成为先进先出表。

5,栈空:s->top == -1; 栈满:s->top == MaxSize-1;

6,队空:q->front == q->rear; 队满:q->rear == MaxSize-1;

7,环形队在储存器中的地址是连续编号的,并不是环。

8,串的模式匹配有两种算法:BF与KMP,其中BF是采用穷举的方法挨个寻找时间复杂度较高,而KMP算法通过计算next[j]的值改变主串指针的回溯方式,来减少回溯次数。

三,疑难问题及其解决方案

1,递归算法的时空间复杂

void (int a[],int n,int k) 
{
	int i;
	if (k == n-1) {
		for (i=0; i<n; i++) {
			cout<<a[i];
		}
	}
	else {
		for (i=k; i<n; i++) {
			a[i] = a[i] + i*i;
		}
		fun(a,n,k+1);
	}
}

T(n,k) = n ; (k == n-1)

T(n,k) = n-k + T(n,k+1); (其他情况)

S(n,k) = 1; (k == n-1)

S(n,k) = 1 + S(n,k+1); (其他情况)

当我们遇到计算递归算法的时空间复杂度时,先列个解析式再逐步解决。

2,KMP算法next值计算

第一位一定是0,其他位置取以满足t0.....tk-1=tj-k....tj-1的最大值。

posted @ 2020-03-28 21:29  熊正雄  阅读(223)  评论(0编辑  收藏  举报