ppt的搬运工。。。
时间复杂度:
kmp:O(n + m) 这和BF算法的一般情况差不多。
补充:希尔排序
一、选择填空
1、计算机算法
必须具备输入、输出、可行性、确定性、有穷性。
2、数组
按行存放和按列存放:
设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少?
(1)列优先 (列存储方式答案)
A[5,8] = A(0,0) + (n*(j-1)+(i-1))*L = BA + (8 * ( 8-1) + ( 5-1 )) * 3 = BA + 180
(2)行优先(行存储方式答案)
A[5,8] = A(0,0) + (m*(i-1)+(j-1))*L = BA + (10 * ( 5-1) + ( 8-1 )) * 3 = BA + 141
3、kmp的next数组
第一个元素为0; 当没有失配位前没有能够首尾匹配的元素时,则为1; 当有首尾匹配元素时,则为:匹配成功的元素数+1;
模式串 P= ‘ abaabcac ’的 next 函数值序列为 01122312 。
(4)广义表
注意长度为1,深度为2。
(5)树
满二叉树:完全对称,叶子节点只在最后一层。
完全二叉树:满二叉树从最后一个节点开始连续去掉几个节点。
完全二叉树和满二叉树中结点的序号可以唯一地反映出结点之间的逻辑关系 。
已知二叉树的前序序列和中序序列,可以唯一确定。
线索二叉树:通过左右两个指针体现出前序(或者后序或者中序)的遍历顺序,左指针指向其前驱节点,右指针指向其后继节点。 (前提是没有左孩子或者没有右孩子)
树的前序遍历等价于其对应二叉树的前序遍历
树的后序遍历等价于其对应二叉树的中序遍历
前缀码:每一个码都不是另一个码的前缀。哈夫曼树左0右1构造的就是前缀码。
(6)图
与离散数学中的简单回路相反。
深度优先:
广度优先:
这里注意,生成树是用深度优先遍历或者广度优先遍历来获取的,但最小生成树是用普利姆算法和克鲁斯卡尔算法获取的,最短路径问题是迪杰斯特拉算法。
克鲁斯卡尔算法:
普利姆算法:
归并顶点,选择顶点使得进入的边的权值最小,直到所有顶点都并进来,此时一定有n - 1条边。
需要注意的是:普利姆算法和迪杰斯特拉算法虽然都是归并顶点,但是普利姆算法每一步替换的值是整体到下一个点的最小值,而迪杰斯特拉算法每一步替换的值是起点到下一个点的最小值(单源最短路径)
(7)查找
主关键字:可以唯一标识一个记录。
顺序查找
顺序存储和链式存储都可以,无论有序还是无序都行
折半查找:
必须有序,且顺序存储。
折半查找判定树:
分块查找:
块间有序,块内无序
在二叉排序树删除节点时,如果其为叶子节点,则直接删除无影响;如果其只有左子树或右子树,则顺延就行;如果被删除节点既有左子树又有右子树,则用其前驱节点代替它,再删去原前驱节点。
哈希表
查找效率O(1),查找效率与元素个数无关。
处理冲突的方法:
二、大题
1、排序
(1)直接插入排序
时间复杂度:O(n^2) 空间效率: O(1)
(2)折半插入排序
限制:必须采用顺序存储
链表可以使用直接插入排序(这样效率更高),但不能使用折半插入排序。