文章分类 -  数据结构与算法

摘要:算法思想为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。具体做法: 先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止。n-1这个数字很关键,使其不存在回路判断是否产生回路可以用并查集每次用选择权边最小的边可以用优先队列算法伪代码输入:edgelist数组,大小n输出:打印Kruskal(edgelist,n){ sort(edgelist);//按照权值排序,可以使用优先队列实现 for i = 1 to n makeset(i);//将各个定点各自... 阅读全文
posted @ 2012-04-04 13:56 Lab_HIT 阅读(695) 评论(0) 推荐(0)
摘要:分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点,继续搜索。 选择下一个E-结点的方式不同,则会有几种不同的分支搜索方式。 1)FI 阅读全文
posted @ 2012-04-02 19:14 Lab_HIT 阅读(143) 评论(0) 推荐(1)
摘要:1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。2、基本思想在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发 阅读全文
posted @ 2012-04-02 19:12 Lab_HIT 阅读(184) 评论(0) 推荐(0)
摘要:贪心算法一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、贪心算法的基本思路: 1.建立数学模型来描述问题。 2.把求解的问题分成若干个子问题。 3.对每一子问题求解,得到子问题的局部最优解。 4.把子问题的解局部最优解合成原来解 阅读全文
posted @ 2012-04-02 19:10 Lab_HIT 阅读(170) 评论(0) 推荐(0)
摘要:一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一 阅读全文
posted @ 2012-04-02 19:09 Lab_HIT 阅读(116) 评论(0) 推荐(0)
摘要:分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题 阅读全文
posted @ 2012-04-02 19:08 Lab_HIT 阅读(366) 评论(0) 推荐(0)
摘要:个人总结Dijkstra算法的要点总结:1.该算法需要两个重要的数据结合结构,集合S、T,S集合中存放已经找到最短路径的节点,T集合中则为S集合的补集,为还未找到阻断路径的节点集合2.算法开始时将源点o放入S集合,并初始化各节点到源点的最短路径,如果之间不相通,距离为无穷大,否则,当前最短路径为到源点o的直接距离3.整个算法过程为不断从T集合寻找当前最短路径的节点,并将其从T集合转移到S集合,直到T集合为空,算法结束4.每次从T集合中提取当前最短路径的节点之后需要更新T集合中每个节点的当前最短路径,更新方法为:获取T中节点Ti,依次用S中的每个节点Si,将Si的最短路径长度加上Si到Ti的距离 阅读全文
posted @ 2012-04-02 19:07 Lab_HIT 阅读(385) 评论(0) 推荐(0)
摘要:快速排序及其分析2011-07-27 14:35 by zabery, 679 visits,收藏,编辑前言快速排序的平均情况下是O(nlogn),但是一般都比其他运行时间为O(nlogn)的算法都要快,因为它隐藏的常数因子比较小,但是在最坏情况之下,快速排序的运行时间是O(n2)。快速排序过程快速排序采用的思想是分治思想,就像合并排序算法的思想一样,合并排序算法是从数组的中间开始分治,直到分为N个分组,最后分别合并N个分组的解。如下图,有原始数组A = {1, 3, 4, 5, 7, 2, 6, 8, 0}快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分 阅读全文
posted @ 2012-04-02 19:04 Lab_HIT 阅读(409) 评论(0) 推荐(0)