`

【算法复习一】常见的算法策略汇总

 
阅读更多

一,概述

算法策略和算法是有区别的,它们是算法设计中的两个方面,算法策略是面向问题的,算法是面向实现的;

但二者又是不可分的,首先是通过算法策略才找出解决问题的算法,其次对于用不同算法求解的问题算法策略是自然不同的。


二,算法策略

1)递推策略:“递推法”和贪心算法一样也是由当前问题的逐步解决从而得到整个问题的解,只是依赖的是信息间本身的递推关系,每一步不需要策略参与到算法中,它们更多地用于计算。

2)递归策略:递归法是利用大问题与其子问题间的递归关系来解决问题的。每次找出大问题与小的子问题之间的关系,直到小的子问题很容易解决,再由小的子问题的解导出大问题的解。。例如:汉诺塔问题

3)穷举策略:对所有可能的解逐一尝试。

4)递归回溯策略:类似于穷举法的思想,递归回朔法通过递归尝试遍问题各个可能解的通路,发现此路不通时回朔到上一步继续尝试别的通路。

5)分治策略:求解的则是较复杂的问题,这类问题是可以被分解成独立的子问题来解决的,将两个或两个以上的独立子问题的解“合成”,就得到较大的子问题的解,最后合成为总问题的解。(注意一定是可以分解成独立子问题,否则会重复计算公共子问题)

6)动态规划策略动态规划法与贪心法类似,要求问题具有最优子结构(即最优解包含子问题的最优解),是一种自底向上的求解思路,与递归正好相反,每次求解到一个阶段时,该阶段求解所依赖的子问题已经完全求解完毕,因此每一步的求解都是在直到全部所需信息的情况下进行的,因此可以得到全局最优解。

7贪心策略:如果想要得到最优解,需要对问题性质有更严格的要求,除了要有最优子结构外,还要求问题具有贪婪选择性质。具体来说就是:贪心是一种策略,即每一步都要选择当前看来最好的,做完此选择后便将问题化为一个(仅仅一个)子问题,这是一个顺序的求解过程,每一步都是单独考虑,只考虑局部最优,因为并没有完成对之后子问题的求解,所以贪心算法不能完成对整个解空间的搜索,因此通常不能得到最优解。除非问题具有贪婪选择性质。所谓贪婪选择性质就是问题经过一次贪婪选择后只能形成一个子问题,这样求解空间实际上就是一个线性的空间,贪心算法可以得到最优解。是一种自顶向下求解思路。


三,算法策略之间关系

1)分治法”与“动态规划法”

• 都是递归思想的应用,找出大问题与小的子问题之间的关系,直到小的子问题很容易解决,再由小的子问题的解导出大问题的解。

•分治法的特征之一是所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

• 动态规划的实质是分治思想和解决冗余。

2)全面逐一尝试、比较“穷举法”、“枚举法”、“递归回溯法”

• 若问题中不易找到信息间的相互关系,也不能分解为独立的子问题,似乎只有把各种可能情况都考虑到,并把全部解都列出来之后,才能判定和得到最优解。

枚举法算法的实现依赖于循环,通过循环嵌套枚举问题中各种可能的情况。

• 对于规模不固定的问题就无法用固定重数的循环嵌套来枚举了,有的问题可能通过变换枚举对象也能用循环嵌套枚举实现,但更多的任意指定规模的问题是靠递归回朔法来“枚举”或“遍历”各种可能的情况。

3)回溯与分支限界策略

•回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

•一般情况下,回溯法的求解目标是找出解空间树中满足约束条件的所有解的方案,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

4)深度优先与广度优先

• 深度优先:通常深度优先搜索法不全部保留结点,扩展完的结点从数据存储结构栈中弹出删去,一般在数据栈中存储的结点数就是解空间树的深度,因此它占用空间较少。所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索是一种有效的求解方法。

• 广度优先:一般需存储产生的所有结点,占用的存储空间要比深度优先搜索大得多,因此,程序设计中,必须考虑溢出和节省内存空间的问题。但广度优先搜索法一般无回溯操作,即入栈和出栈的操作,所以运行速度比深度优先搜索要

5)动态规划与搜索算法

搜索算法:在解决最优化问题的算法中,搜索可以说是“万能”的。所以动态规划可以解决的问题,搜索也一定可以解决。动态规划要求阶段决策具有无后向性,而搜索算法没有此限止。

•动态规划算法在时间效率上的优势是搜索无法比拟的,但动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。

动态规划是自底向上的递推求解,而无论深度优先搜索或广度优先搜索都是自顶向下求解。



分享到:
评论

相关推荐

    算法分析期末复习

    - **分治算法**:分治算法是一种常见的算法策略,它通过将问题分解成若干个规模较小的相同或相似子问题来解决整个问题。子问题相互独立且与原问题类型相同,递归地求解子问题,直到问题足够简单可以直接求解。 - **...

    北航研究生算法复习

    【北航研究生算法复习】 在计算机科学领域,算法是解决问题的核心工具,特别是在研究生阶段,对算法的深入理解和应用显得尤为重要。本复习资料专注于北航研究生课程中的NP问题和近似算法,旨在帮助学生全面掌握这两...

    计算机算法设计与分析期末考试复习资料汇总

    这份“计算机算法设计与分析期末考试复习资料汇总”无疑是备考的关键资源。 复习资料通常包含历年的考试试题、答案解析、重点难点讲解以及相关的编程实践案例,旨在帮助学生系统性地回顾课程内容,提高解题能力。在...

    算法考试题汇总

    对于每一个题目,不仅要注意解题策略,还要思考如何优化算法,减少时间和空间复杂度。同时,比较不同试题的解法,可以帮助我们开拓思路,提高问题解决的灵活性。在复习过程中,结合理论学习和实践操作,可以更好地...

    算法设计与分析复习汇总

    Ford-Fulkerson算法和Edmonds-Karp算法是求解网络最大流的两种常见方法。 7. **其他方法**: - **替换法**和**主方法**是解决递归问题时分析时间复杂度的工具,尤其是主方法在处理递归关系时特别有用。 - **递归...

    算法答案汇总,交大算法分析课后习题答案

    总的来说,0-1背包问题及其特定情况下的贪心策略是算法分析中的重要概念,通过交大这门课程的学习,学生不仅可以掌握这一经典问题的解决方法,还能培养出分析和解决复杂问题的能力。同时,习题解答作为辅助材料,...

    严蔚敏题集算法设计答案汇总

    严蔚敏教授编著的《严蔚敏题集算法设计答案汇总》就是为这一领域的学习者和从业者提供的一份宝贵的学习资料,其内容涵盖了算法设计与分析的基础知识和实用技能,为计算机科学的学习者提供了一条通往算法设计核心的...

    Python常见排序算法汇总共2页.pdf.zip

    在这个"Python常见排序算法汇总共2页.pdf.zip"压缩包中,我们很可能找到了一个简明扼要的文档,涵盖了Python中常见的排序算法。这些算法是编程基础知识的重要组成部分,对于优化代码性能和解决复杂问题至关重要。 ...

    PID算法汇总资料

    首先,"PID算法汇总资料"标题表明这是一个关于PID控制算法的综合资源集合,可能涵盖了基础理论、应用实例以及优化方法。PID算法的核心在于通过比例(P)、积分(I)和微分(D)三个部分来调整系统响应,以达到期望的控制...

    广工算法分析与设计基础历年试题

    7. **递归与分治策略**:递归是算法设计中常见的思维方式,而分治法则是解决复杂问题的一种策略,如归并排序、快速排序、汉诺塔问题等。 8. **概率算法与随机化技术**:在某些问题中,概率算法可以提供近似最优解,...

    东北大学《数据结构与算法》期末复习资料

    分治策略是递归的一种常见应用,如归并排序和快速排序。 8. **动态规划**:用于解决最优化问题,通过构建子问题的最优解来得到原问题的最优解,如背包问题、最长公共子序列等。 9. **贪心算法**:每次选择当前看...

    王晓茹课件.zip北邮王晓茹老师的算法中文课件

    “Algorithms设计与分析-复习.pdf”很可能是课程复习资料,汇总了整个学期的关键点,帮助学生巩固和复习所学知识。 此外,“AlgorithmsCh01-补充-特征方程求解递归方程.ppt”可能是一个关于如何利用特征方程求解...

    PAT甲级复习/CAIP复习

    胡凡.pdf"和"算法考前必看汇总.pdf"则包含了大量的算法讲解和考试重点,可能是对常见算法的整理和归纳,如排序、搜索、图论等,是备考的重要参考资料。"力扣题库.md"(LeetCode题库)则提供了实际编程题目,用于锻炼...

    C++面试题精选及常见算法题解析

    在准备C++面试时,了解基础知识与理论以及掌握常见的算法是至关重要的。下面将详细讨论这些关键知识点。...阅读“算法题总结 274.pdf”和“C++面试题题目汇总终稿.pdf”这样的资料,可以帮助你系统地复习和准备面试。

    C# 经典排序算法大全和二分查找算法

    排序是将一组数据按照特定顺序进行排列的过程,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。以下是对这些算法的简要介绍: 1. 冒泡排序:通过不断交换相邻的逆序元素来逐步完成...

    国科大计算机算法与设计-刘玉贵老师

    其次,课程会深入讲解常见的算法设计策略,如分治法、贪心算法、回溯法和动态规划。分治法将大问题分解为小问题求解,如快速排序和归并排序;贪心算法在每一步选择局部最优解以期望得到全局最优,如霍夫曼编码;回溯...

    微软等数据结构算法面试100题答案集锦

    - **标题**:“微软等数据结构算法面试100题答案集锦”表明了这是一份针对微软及其他大型IT公司的数据结构和算法面试题目的答案汇总。 - **描述**:指出这份答案集锦是由July和阿财整理的,对于希望进入大型IT公司...

    面试(计算机相关资料,C++,算法和数据结构,操作系统,linux)

    综上所述,为了在计算机相关面试中脱颖而出,你需要全面复习C++编程基础,深入学习算法与数据结构,理解操作系统的原理,以及具备基本的Linux操作技能。通过实践和总结,不断巩固这些知识,将大大提高你的竞争力。

    计算机操作系统复习知识点汇总2012.pdf

    以下是复习知识点的汇总: 1. 进程管理:操作系统需要对进程进行调度与管理。PCB(进程控制块)是一个用于描述进程状态和管理信息的数据结构。进程调度算法包括抢占式和非抢占式,以及多种调度算法,如先来先服务...

    分布式操作系统复习(汇总).docx

    常见的容错策略包括备份、冗余、故障检测和恢复机制。 在分布式系统中,选举算法用于确定领导者或协调者,例如欺负算法和环算法。欺负算法中,一个进程在发现协调者失效时发起选举,向较大进程发送请求,最终最大...

Global site tag (gtag.js) - Google Analytics