
高级算法设计
文章平均质量分 85
0000it_
V:Lin00win
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Travelling Salesman Problem(TSP旅行商)
某售货员要到若干城市去推销商品,已知各城市之间的路程(旅费),他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(总旅费)最小。原创 2025-01-09 19:27:58 · 404 阅读 · 0 评论 -
N-queue(N-皇后)
计算过程:从第一位皇后开始,分别选择棋盘上的位置1,2,3,4;选择1位置时,则下面所有皇后的位置都不能选择1,第二位皇后选择位置时只有2,3,4可选,但由于第一位皇后选择的1,则与1相近的那个值2,则不能选(对角线),因此第二位皇后只能选择3,4位置;第二位皇后选择位置3时,则第三位皇后不能选择3位置,且与3相近的2和4都不能选(对角线),那么第三位皇后无位置可选,则回溯,第二位皇后选择4位置时,则第三位皇后不能选择4位置,且与4位置相近的3位置也不能选(对角线),则第三位皇后只能选择位置2;原创 2025-01-09 19:25:44 · 826 阅读 · 0 评论 -
0-1Knapsack(0-1背包)
从第一个物品开始决定添加或者不添加,若添加则在(0,0,0)的基础上,置背包为(1,5,4),若不添加则为(1,0,0);在回溯法中,核心的操作是生成所有可能的选择,并检查每种选择是否符合条件(即当前物品是否放入背包)。具体来说,时间复杂度的计算过程如下:每次递归调用有两个分支:一个是“不放当前物品”,另一个是“放当前物品”。剪枝(二):如果将当前扩展节点后剩下的所有物品都装入还没有目前已求得的最优值大的话,就不在进行决策了,直接返回。有n个物品,它们有各自的体积和价值,现有给定容量的。原创 2025-01-09 19:21:39 · 738 阅读 · 0 评论 -
Huffman tree(哈夫曼编码)
使用贪心算法求解Huffman编码问题,具体来说就是,根据每个字符的出现频率,使用最小堆构造最小优先队列,构造出字符的最优二进制表示,即前缀码。中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和。构建哈夫曼树的核心步骤是每次选择两个最小频率的节点进行合并。初始时,我们将每个字符和其对应的频率转换为一个哈夫曼树节点,并将这些节点存储在。中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合。中的节点按频率进行排序。原创 2025-01-09 19:18:56 · 965 阅读 · 0 评论 -
Dijstra shortest path(单源最短路径)
遍历表格寻找dist最小的节点,此时为1号节点,则将1号节点所有直接能到达的节点,对应的dist和pre进行修改(例题中为2,3,4号,则修改2,3,4号节点的dist,dist的值应该加上1号节点的dist值0,pre为1号);然后遍历表格寻找dist最小且final为false的节点,将该节点的final修改为True,则将4号节点所有能到达的节点,对应的dist和pre进行修改,倘若能到达的节点dist已经有值,则需要进行对比,将较小的填入;2) ,这是由邻接矩阵的存储方式决定的。原创 2025-01-09 19:14:06 · 772 阅读 · 0 评论 -
Minimum spanning tree(最小生成树)
最小生成树必须包含图中的所有顶点,并且通过边将它们连接起来,确保整个图是连通的,即任意两个顶点之间都有路径。(一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。原创 2025-01-09 19:10:45 · 457 阅读 · 0 评论 -
Matrix multiplication(矩阵连乘)
用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法,使得矩阵连乘的次数最小。循环对每个矩阵链段的起始位置进行遍历,长度为。循环用于选择合适的分割点,遍历从。循环控制矩阵链长度,从。:这两个矩阵的大小是。原创 2025-01-09 19:05:57 · 469 阅读 · 0 评论 -
Image compression(图像压缩)
工作原理是将所有情况都列举出来,例如S[5],将S[0]和前五位分别构成一组,S[0]=0,前五位灰度值总位数计算必须取最大的那一个分配的位数8来计算,即为:S[0]+5*8+11=51;同理S[1]和前五位中的后四位分别构成一组,S[1] = 14,后四位的灰度值总位数计算也必须取最大的哪一个分配的位数8来计算,即为:S[1]+4*8+11=57;第三组由25,28,19,22,25,20六个数组成,最大为28,所以用5位来表示。第一组由6,5,7,5四个数组成,最大为7,所以用3位表示即可。原创 2025-01-09 19:00:41 · 897 阅读 · 0 评论 -
0-1Knapsack(0-1背包)
声明一个大小为m[n][c]的二维数组,m[i][j]表示在面对第i件物品时,且背包最大容量为j时所能获得的最大价值。如果拿取,则m[i][j] = m[i-1][j-面对每个物体,我们只有选择拿取或者不拿取两种选择,不能选择装入物体的一部分,也不能装入同一物体多次。如果不拿,则m[i][j] = m[i-1][j]。时,这时候背包容量不足以放下第i件物品,则选择不拿,m[i][j]=m[i-1][j];有n个物品,它们有各自的体积和价值,现有给定容量的。,其中 n 是物品的数量,c 是背包的容量。原创 2025-01-09 18:53:14 · 986 阅读 · 0 评论 -
round robin scheduling(循环赛日程表)
每位选手需要比赛n-1天,因此左上角和右下角相同,对应元素位置上都相差4。位运动员要进行网球循环赛。(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能参赛一次;,那么空间复杂度会随之变化。(3)循环赛在n-1天内结束。,数组a的大小为 N×N=原创 2025-01-06 15:18:56 · 79 阅读 · 0 评论