数据结构作业
一,思维导图
二,概念笔记
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的最大值。