算法设计
江城暮
这个作者很懒,什么都没留下…
展开
-
C语言实现Prim算法
C语言实现Prim算法 一些心得放在代码的注释中,建议结合具体的图进行学习。 Prim算法过程描述: 在图中挑选任一顶点v0准备扩展; 每次扩展一个从未扩展的顶点,要求所连的边必须是已扩展的点连向所有未扩展的点中,边的权值最小的一条。 重复步骤2,直至图中所有的顶点都被扩展过。 #include<iostream> #define INT_MAX 100 using std::cout; using std::cerr; using std::endl; const i原创 2021-04-14 15:37:36 · 1450 阅读 · 1 评论 -
减治法求解假币问题
减治法求解假币问题 由于并不知道假币的重量到底比真币轻还是重,因此需要将所有假币分成三组。因此,最开始输入硬币的数量也必须是大于2的; 在分组的时候我们必须保证三组中都有硬币,因此当硬币数量为4时,划分方法应该为n/3、n/3、n-2(n/3),而不是n/3+1、n/3+1、n- 2(n/3+1)。 运行结果单位应该是微秒 #include<stdio.h> #include<iostream> #include<windows.h> #include<iom原创 2021-03-21 21:33:05 · 795 阅读 · 0 评论 -
多种算法求解最大子段和
多种算法求解最大子段和 蛮力法的思路比较简单,即找出数组所有的从1个元素到n个元素的子段,分别求解各个子段的和,再经过比较,从而找到符合约束条件的解; 分治法的思路注重递归,它的解并没有分散在子问题的解当中,而是需要将不断划分的子问题重新递归,从而找到符合约束条件的解; 动态规划法,这里在思路上应该与分治法、减治法区分开,即原问题的解正是某一个子问题的解,当我们算出所有子问题的解之后,需要再用约束条件去检查,直到找出符合约束条件的解。而减治法则是将问题的规模不断的缩小,最终的子问题的解就是原问题的解。原创 2021-03-21 21:25:19 · 568 阅读 · 0 评论 -
动态规划法解决游艇租用问题
动态规划法解决游艇租用问题 游艇租用问题描述:长江旅游俱乐部在长江上设置了N个游艇出租站1,2,…,N,游客在这些站中租用游艇,并在下游的任何一个游艇出租站归还,游艇出租站i到游艇出租站j之间的租金为fee(i,j),0≤i<j≤N-1;试求出从游艇出租站1到游艇出租站N所需的最少租金。 这里感觉动态规划法是属于较复杂的算法,它的思想很容易理解,但是针对不同问题如何设计相应的函数去求解仍需要仔细琢磨。这里借鉴了多源点最短路径问题中Floyd算法,对该算法进行适当改进,记录依次经历的站点是用到有点巧妙的原创 2021-03-21 20:38:19 · 2323 阅读 · 1 评论 -
贪婪算法求解静态哈夫曼编码
贪婪算法求解静态哈夫曼编码 哈夫曼编码(Huffman Coding),是一种编码方式。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。 本文当中解决的静态哈夫曼编码区别于动态哈夫曼编码,即字符出现的概率是已知的,并且不会有新的字符出现。贪婪法求解该问题的难点在于每次生成新的结点时都要对剩下的结点按照权值进行排序,由于需要控制的变量较多,如何合理地设置变量变化的范围是需要认真考虑的。 #include<stdio.h> #inc原创 2021-03-21 20:17:56 · 350 阅读 · 0 评论