1.基本概念
数据的逻辑结构:集合、线性结构,树、图、
数据的物理结构(存储结构):顺序存储、链式存储、索引存储、散列存储(哈希存储)
(1)逻辑结构独立于物理结构,逻辑结构不能唯一确定物理结构;比如栈(抽象数据类型)可以采用链式存储也可以顺序存储。
(2) 采用链式存储时,各节点的存储单元不一定连续,但节点内部存储单元是连续的(疑问的地方)
2.记
常见渐进时间复杂度————“常对幂指阶”
3.题
(1)两个长度分别为m和n的升序链表,要将其合并为一个降序链表,则在最坏的情况下的时间复杂度是——O(max(m,n))
最坏的情况就是将两个链表的各个元素挨个比较,小的放前面,大的放后面,最终比到两个链表的最后一个元素时,后面剩的直接逆序插入。
?为什么不是min(m,n)
因为后面有逆序插入的元素也需要时间
(2)下列程序段的时间复杂度为:
int sum=0;
for(int i=1; i<n; i*1=2)
for(int j=0; j<i; j++)
sum++;
内层循环与外层循环有关联,假设外层循环执行k次,内层循环对应执行1,2,4,8,2k-1次,总执行T=1+2+4+……+2k-1=2k-1,又因为n<T<2n,所以综上,T=O(n)
(3)递归类程序一般使用公式推导得出时间复杂度
T(n)=1;(n=1)
T(n)=2T(n/2)+n;(n>1)
求时间复杂度?
设n=2k,则T(2k)=2T(2k-1)+2k
T(2k)=22T(2K-2)+2K+2K
T(2k)=2kT(1)+k*2K=2k(1+k)
再代换回去得
T(n)=n(1+logn)
因此T(n)=nlogn;