- 博客(12)
- 收藏
- 关注
原创 矩阵链乘法问题
分割方案为:((U1)((U2)((U3)((U4)(U5)))))(U6)每个矩阵的行数=前一个矩阵的列数。有一系列矩阵按顺序排列。最少计算次数为:286。
2024-02-12 15:57:55 268 1
原创 最长公共子串问题
用C[i][j]表示x[1...i],y[1...j]中,以x[i],y[j]结尾的最长公共子串z[1...l]的长度。则最长公共子串的长度 pmax= max{ C[i][j] } (1<=i<=n , 1<=j<=m)则最长公共子串为<x[pmax-lmax+1],x[pmax-lmax+2],...,x[pmax]>例如:x[ ]=“ABCADBB”,y[ ]=”BCEDBB”,则x,y的最长公共子串为DBB。首先对 C[i][j] 进行初始化,C[i][0] = C[0][j] =0;
2024-02-11 14:21:00 445 1
原创 最长公共子序列问题(动态规划)
就是将给定序列中零个或多个元素去掉之后得到的结果。如何求两个序列的最长公共子序列呢?我们需要求出他们之间的递推关系式。
2024-02-06 16:04:44 299 1
原创 01背包问题
有一个容量为V的背包,还有n个物体。现在忽略物体实际几何形状,我们认为只要背包的剩余容量大于等于物体体积,那就可以装进背包里。如图所示,利用一个二维数组p[i][c]来记录已经算过的结果,下次使用时直接调用即可,不用再算一次,图中实线就是我们需要算的,较之前代码复杂度大大降低。算法思想:对于每一件商品,我们都有选与不选两种选择,因此我们用递归来进行枚举。超市允许顾客使用一个体积大小为13的背包,选择一件或多件商品带走。但是我们可以再想想,可不可以不使用递归,直接求解p[i][c]。最后一个数就是最优解。
2024-01-27 15:21:24 923
原创 次序选择问题
初始数组:A[16]={21,17,37,28,13,14,22,52,40,24,48,4,47,8,42,18};这是一个次序选择问题,求解方法多种,此处介绍在快排的思想上进行改造的分治算法。情况3:k<q-p+1,在A[q+1..r]中寻找第k-(q-p+1)小元素。情况2:k<q-p+1,在A[p..q-1]中寻找第k小元素。数组A,起始位置p,终止位置r,要查找的第k小元素。情况1:k=q-p+1,A[q]为数组第k小元素。给定一个数组A,求出第k小的元素。
2024-01-24 18:30:20 538
原创 逆序对计数问题
输入一个长度长度为n的数组A[n],求出数组A[n]逆序对的总数。把数组A二分为两个子数组A[1…n/2],A[n/2 + 1…求解S2∶仅在A[n/2+1…n/2]和A[n/2 +1…求解S1∶仅在A[1…n/2]中的逆序对数目。求解S3∶跨越子数组的逆序对数目。分而治之:逆序对计数问题。数组A[n]逆序对的总数。长度为n的数组A[n]
2024-01-23 16:01:08 365 1
原创 二叉树的基本操作
树的先序遍历,中序遍历和后序遍历都是使用递归的思想来实现的,只不过访问左子树、根节点和右子树的顺序不同,而层次遍历则利用队列来完成,即每一个根节点出队,都会使得它的左孩子和右孩子入队。树的销毁需要利用后序遍历,逐级销毁左子树、右子树、根节点,如果按照先序和后序的话,那么根节点销毁后会找不到其左或右子树。求树的高度,利用递归算法,计算左右子树的高度,取上述两者的最大值加1,即为二叉树在根节点处的高度。二叉树的创建根据先序遍历的思想,空的左子树或右子树结点用“.”来表示。① 或者为空二叉树,即n = 0。
2024-01-21 15:15:22 326 1
原创 南航数据结构课设——排序算法时间
利用随机函数产生10个样本,每个样本有50000个随机整数(并使第一个样本是正序,第二个样本是逆序),利用直接插入排序、希尔排序,冒泡排序、快速排序、选择排序、堆排序,归并排序、基数排序8种排序方法进行排序(结果为由小到大的顺序),并统计每一种排序算法对不同样本所耗费的时间。堆排序:O(nlog2n) 冒泡排序:O(n^2) 归并排序:O(nlog2n)插入排序:O(n^2) 希尔排序:O(n^2) 选择排序: O(n^2)基数排序:O(nlog2n) 快速排序:O(nlog2n)
2024-01-19 17:52:24 671
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人