![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法分析与设计
文章平均质量分 94
服务课内,数据结构基础的后续课程
酉鬼2333
废物本废
展开
-
第六章——分枝限界法
分枝限界法和回溯法一样,也是一种在问题的解空间树上搜可行解的穷举算法。其中“分枝”指的是“分枝限界法”搜索可行解采用的策略为广度优先搜索或实现方法和思路类似的代价优先搜索。广度优先搜索的概念和实现前面已经介绍过很多次了,这里不再做赘述;代价优先搜索的目的是以某种定义下的优先级,按照优先级从高到低的顺序处理所有的结点。(从低到高和从高到低本质上是一样的,这里以从高到低为例)。如果状态结点能够按照优先级不严格(可以相等)降低的顺序,在解空间树上按照结点高度从高到低,同高度结点从左到右或从右到左的排列,那我们可以原创 2022-06-09 10:02:39 · 1882 阅读 · 2 评论 -
第五章——回溯法
对于回溯法的概念,我们需要先从回溯法在实际解决问题中的表现来理解。书上称:回溯法实际上是一个类似穷举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现不满足求解条件时,就“回溯”(即回退),然后尝试别的可能。就我个人的角度而言,我不认为回溯法是一个类似于穷举的方法,而是针对于一些通过穷举法求解的问题:问题求解过程中的各个可能出现的状态作为结点,通过决策将两两结点连边构成一棵有向树,存在一个或多个我们想要求解的目标状态。为了得到我们的目标状态(或者是初始状态到目标状态的路径),我们采取深度优先遍历的策原创 2022-06-05 20:01:15 · 1356 阅读 · 0 评论 -
第四章——蛮力法
蛮力法概述蛮力法也称穷举法(枚举法)或暴力法,是一种简单的直接解决问题的方法,通常根据问题的描述和所涉及的概念定义,对问题所有可能的状态(结果)一一进行测试,直到找到解或将全部可能的状态都测试一遍为止。蛮力法的“力”指的是计算机的运算能力,蛮力法是基于计算机运算速度快的特性,减少人的思考而把工作都交给计算机的“懒惰”策略(这里的懒惰指的是人懒,不是算法中的懒惰方法),一般而言是最容易实现的方法。蛮力法的优点如下:1.逻辑简单清晰,根据逻辑编写的程序简单清晰。2.对于一些需要高正确性的重要问题,它产原创 2022-05-31 00:04:13 · 7623 阅读 · 1 评论 -
第三章——分治法
分治法概述分治法的设计思想分治算法的设计思想是将一个规模较大的问题分解成若干个规模较小的问题分开解决,然后将规模较小的问题的解合并成规模较大的问题的解,分解的过程我们称为“分”,求解和合并解的过程我们称为“治”。乍一看这不就是前面递归算法的一种特殊情况么?事实上分治法确实属于递归算法一类,比起一般的递归算法它有以下的特性:1.该问题可以分解为若干个规模较小的相似问题,且当规模缩小到一定的程度就可以容易地解决,即递归出口的诞生是自然的。2.该问题所分解出的各个子问题是相互之间独立的,即子问题之间不包原创 2022-05-25 15:48:50 · 1665 阅读 · 0 评论 -
第二章——递归
递归的定义,递归算法,递归模型在数学和计算机科学中,递归是指在在一个过程或函数的定义时出现调用本过程或本函数的成分。若在函数中调用函数自身或者在过程的子部分中调用子部分自身的内容,称之为直接递归,又称自递归。若不同的函数和子过程之间互相调用,则称之为间接递归,任何间接递归都可以等价地转换为直接递归(自递归)。如果一个递归过程或递归函数中,递归调用语句是最后一条执行语句,则称这种递归调用为尾递归。一个有趣且经典的介绍递归的例子如下:递归的定义:请查阅“递归的定义”。这个例子不仅很好的体现了递归的特原创 2022-05-21 22:58:17 · 2942 阅读 · 0 评论 -
第一章——STL
STL概述说到STL我们往往认为它是基于模板的,实现了很多数据结构及对应操作的容器库。从概念上像上面理解一样理解没有问题,从库的内部结构来看,STL主要由container(容器),algorithm(算法)和iterator(迭代器)三大部分构成。STL容器容器就是指给你在库的内部已经实现好,可以让你直接调用的基于模板的数据结构类型,常用的数据结构和相对应的头文件如下:数据结构说明实现头文件向量(vector)连续存储元素容器,底层数据结构为数组,支持快速随机访问原创 2022-05-12 14:59:30 · 300 阅读 · 0 评论 -
第一章——算法分析
算法分析第一章节算法的概念和特性,我们了解到算法除了普通程序需要满足的基本性质另外想要满足的性质有:正确性,高效率和低储存量需求,健壮性,可读性和可使用性。其中健壮性,可读性和可使用性可以通过我们不断地完善我们的代码和注释来进行提升。算法分析准确来说分析的是算法的正确性,效率和储存量需求。算法的正确性可以通过数学方法证明和数据集验证的方法去处理。我们这里的算法分析是分析算法占用计算机资源的情况,计算机资源主要包括时间和内存空间,所以算法分析的两个主要方面是分析算法的运行时间和占用内存情况。运行时间和原创 2022-05-10 23:27:36 · 1361 阅读 · 0 评论 -
第一章——算法
算法的概念和特性算法分析与设计这门课从字面意思上可以分为三个模块——算法,分析,设计,其中分析和设计是具体进行时的“手段”,算法则是对象,所以我们首先需要知道算法是什么?算法(Algorithm)是求解一系列问题的清晰指令(计算步骤),是指解题方案的准确而完整的描述。算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,将输入数据转换成输出结果。这个概念并不抽象,说简单点就是可以用清晰数学语言描述的解决问题的方法就是算法。算法显然不是凭空出现的,于是就有了根据问题设计算法的概原创 2022-05-08 13:43:47 · 558 阅读 · 0 评论