算法类
VM_Alike
这个作者很懒,什么都没留下…
展开
-
分治法求最值问题,典型的错误示范及正确的代码
笔者在进行分治法学习和跟同学讨论时发现一个比较有意思的错误,在此分享给大家。 我们知道,分治法的核心思想时将待处理对象先分后治,而且当待处理对象基本有序时分治法将退化为冒泡算法。 下面我们看一个有意思的错误示范(伪代码): void MaxMin(A[l..r],Max,Min){ if(r==l) { if(A[1]>Max) Max=A[l]; e...原创 2018-04-22 09:36:51 · 2911 阅读 · 1 评论 -
循环赛日程表,分治法(n为任意数,n=2^k),多边形轮转法(n为任意数),递归和指针,共五种解决方案。
笔者对循坏赛日程表的问题进行了一定深究,以下是该问题的五种解决方案(讨论原理时,笔者默认读者对分治法解决循坏赛日程表问题有理论基础)。 一、分治法,n=2^k,初始化为2*2的矩阵。 该方法的思想是利用递归对数组进行拆分,待数据左上角可用时:左下角=左上角+(此时数组长度)/2,右上角=左下角,右下角=左上角。代码如下(由于代码较多,笔者只贴核心代码,需要全部代码的读者可在笔者...原创 2018-04-27 09:43:17 · 7276 阅读 · 4 评论 -
最优二叉查找树,动态规划法,二维表,填表优化,代码
笔者先介绍一下动态规划法最优二叉查找树以及填表公式(本质是想吐槽其繁琐)。 设T(i, j)是由记录{ri, …, rj}(1≤i≤j≤n)构成的二叉查找树,C(i, j)是这棵二叉查找树的平均比较次数。虽然最后的结果是C(1, n),但遵循动态规划法的求解方法,需要求出所有较小子问题C(i, j)的值,考虑从{ri, …, rj}中选择一个记录rk作为二叉查找树的根结点,可以得到如...原创 2018-05-05 11:31:38 · 5651 阅读 · 3 评论 -
平面最近点对问题,分治法,排序优化,归并排序,插入排序
最近点对问题中涉及到对点按x或y进行升序排序,笔者尝试对排序方式进行优化。首先想到的自然是归并排序,毕竟归并排序的核心思想也是分治法,但是归并排序比较适合基数较多的情况。最后笔者更改思路如下:当点集合总数n的值小于50时,采用插入排序,当n的值大于50时采用归并排序,代码如下:void MergeSort(point *a, int p, int r,bool sort_x_y){ i...原创 2018-05-06 11:29:35 · 3464 阅读 · 0 评论 -
TSP问题,动态规划法
TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。(一)动态规划法 假设从顶点i出发,令d(i, V')表示从顶点i出发经过V'中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,V'=V-{i},于是,TSP问题的动态规划函数为:d(i,V')=min{cik+d(k,V-{k}...原创 2018-05-15 20:19:10 · 38006 阅读 · 1 评论 -
TSP问题,贪心法,最近邻点,最短链接
笔者接着上一次的博客继续讨论TSP问题(TSP问题,动态规划法),这次采用贪心法,至少有两种贪心策略是合理的:最近邻点策略和最短链接策略。 (一)最近邻点策略 从任意城市出发,每次在没有到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。 设图G有n个顶点,边上的代价存储在二维数组w[n][n]中,集合V存储图的顶点,集合P存储经过的边,最近邻点策...原创 2018-05-29 22:00:16 · 16865 阅读 · 4 评论 -
分治法,动态规划法,贪心法,回溯法,分支限界法的区别和联系以及适用情况
笔者这学期的《算法设计与分析》课程已经进入尾声,在这里对学过的算法进行总结归纳。笔者先对各个算法的思想进行简单的陈述,然后再进行对比。一、算法思想 (一)分治法(divide and conquer method) 是将待求解的原问题划分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个规模更小的子问题,如此分解下去,直到问题...原创 2018-06-26 20:53:55 · 22113 阅读 · 6 评论