![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
粒粒米z
这个作者很懒,什么都没留下…
展开
-
使用回溯法解决(递归方式) 皇后问题【算法设计与分析】<图搜索算法>
实验问题:任何两个皇后放的位置不能在同一行、同一列、同一对角线。每个皇后放在不同行上,一行放一个。问题分析:首先考虑第一个皇后的位置,将其放在第一行不同列上,考虑不同列的情况。确定第一个皇后,在依据条件确定第二个皇后,一直某个皇后的无法放在棋盘上(不满足条件),那么就回溯到不满足皇后的上一个皇后,再确定另一个合适的位置。不断循环。直到找到最后一个皇后合适的位置,即找到所有皇后合适的位置。数学建模:建立函数Queue(n)用于求8皇后问题;建立函数place(k)用于判断放置的皇后原创 2022-01-19 22:33:54 · 1035 阅读 · 0 评论 -
利用广度优先和深度优先算法解决迷宫问题【算法设计与分析】<图搜索问题>
实验问题:给定一个n*n的迷宫,要求利用广度优先和深度优先算法解决迷宫问题问题分析:对于此问题首先要明确搜索顺序可以分为两种方法求解问题:1.广度优先算法2.深度优先算法(1)对于深度优先算法来说:<如果规定遍历顺序为下,右,上,左>首先对于起始节点寻找其下节点,如果此节点能走,将其压入堆栈,并以此节点为准,在寻找其下节点,如果能走压入,不能走,就依次寻找右,上,左节点。直到找到最后一个节点即出口,将堆栈的值依次输出就是迷宫的路径。(2)对于广度优先算法来说:<原创 2022-01-18 23:38:15 · 3999 阅读 · 1 评论 -
资源分配问题【算法设计与分析】<动态规划问题>
问题分析:(要把问题分为多步解决,每步求出子问题的多个最优策略后一步依赖于上一步的最有策略,最后一步得出问题的解)(1)首先要考虑分配给项目A的资金与利润的关系。得到此时投资数x与其相对应的 的关系。(2)其次要考虑分配给前两个项目A,B的总资金 与利润的关系。得到此时投资数x与其相对应的 的关系。(3)最后考虑分配给第三个项目C的资金 与利润的关系得到此时投资数x与其相应的 的关系。最终利润为 此时x为投资C项目的资金。数学建模:开辟二维数组q来存储原始利润的数据另开辟一维原创 2022-01-18 11:18:57 · 4660 阅读 · 1 评论 -
最长公共子序列问题【算法设计与分析】<动态规划问题>
实验问题:给定两个序列,找出它们最长的公共序列<公共序列不一定连续>问题分析:给定两条子序列A={ },B={ }他们的公共子序列为Z={ }分为三种情况:(1) ,则 且 是 和 的最长公共子序列(问题减小);(2) 若 则 是 和 的最长公共子序列(问题减小);(3) 若 则 是 和 的最长公共子序列(问题减小)。数学建模:建立一个数组c[i][j]来存储A和B的公共子序列,i,j分别用来指向A,B序列。从而可以递归地求解c[i][j]原创 2022-01-18 11:11:29 · 2126 阅读 · 1 评论 -
计算序列第 k 小的元素【算法设计与分析】
实验问题:给定一个序列,求出此序列第k小的元素问题分析:可以利用快速排序,随机取一个元素将比它小的数放在它的右边,比它大的数放在左边。根据左子集的元素个数可以分为三种情况:第一种:nleft=k-1 那么分界数据即为问题的答案;第二种:nleft>k-1 那么第k小的数存在于左子集中问题规模减小;第三种:nleft<k-1 那么第k小的数存在于右子集中,问题变为选择第k-nleft-1小的数。数学建模:建立函数get_kSmall(arr,begin,end,原创 2022-01-17 10:00:15 · 1770 阅读 · 0 评论 -
棋盘覆盖问题[算法设计与分析]
实验问题:用缺了一个格子的正方形去覆盖一个n*n的棋盘,问需要多少个才能覆盖全部棋盘问题分析:第一步:可以将棋盘平分为4个象限,然后判定残缺位置落在哪个象限内。第二步:去填充中间的四个方块中的三个,残缺位置所处的象限的方块不填充。那么问题就转化为四个相同性质的子问题第三步:顺序处理四个象限,递归实现数学建模:建立函数Triomino(r,c,i,j,n) 其中(r,c)是每个象限第一个点,(i,j)是残缺点的坐标,n是棋盘的规模。第一步:找一个基准格子坐标(n/2,n/2)原创 2022-01-17 09:51:34 · 2087 阅读 · 1 评论 -
分治法求解序列最大最小元素【算法设计与分析】
实验问题:给定一个序列求出此序列的最大最小值<要求利用分治法求解>问题分析:为了得到更小的比较次数,采用分治法求解问题;将序列等分为两组,目的是分别求解两组的最大最小值;再递归分解直到每组个数不大于2,就可以找到最大(小)值;再回溯将分解的两组解大者的值取大,解小的取小,合并解。数学建模:建立函数MAXMIN(i,j,a)<其中i是一段序列的头指针,j是这段序列的尾指针,a是最开始输入的数组>当没有分解完全时(i!=j||i!=j-1)递归分解原创 2022-01-16 10:31:11 · 6603 阅读 · 0 评论 -
n个数的r组合[算法设计与分析]
实验问题:不超过n的r组合,且组合不能重复问题分析:共有r个位置可以放数,从大数到小数放;第r个位置可以固定数 n,n-1,n-2…i…n-r(i>=r);第r-1个位置可以固定数 i-1,i-2…i-r-1(对于i);依次类推,到最后一个位置即r=1时可以固定数 i,i-1…1。数学建模:建立函数comb(n,r) n代表几个数,r代表几个组合;先固定第一个数:可以为n,n-1…i…n-r;再固定后r-1个数:comb(i-1,r-1);只需从小于i-1的数中原创 2022-01-16 10:20:07 · 516 阅读 · 0 评论 -
汉诺塔问题【算法设计与分析】
实验内容:分别计算 4阶/6阶汉诺塔问题,统计各自需要多少移动步数问题分析:可以把n个盘子抽象为两个盘子,上面“一个”由1~n-1号组成,下面的“一个”由n号盘子组成。问题就转化成先借助B将 1~n-1号盘子从A移动到C,然后将n号盘子从A移动到B,再将1~n-1号盘子借助A从C移动到B。数学建模:定义汉诺塔函数hannota(n,a,b,c) n为几层汉诺塔,a,b,c是盘子。(1)第一步:hannota(n-1,a,c,b);(2)第二步: n号盘子从a到b;(3)第原创 2022-01-12 16:57:52 · 1730 阅读 · 1 评论 -
整数划分问题【算法设计与分析】
实验内容:整数分划, 要求给出分划方式与分化数目的总和问题分析:对于n不超过m的划分可以分为三种情况:(1)n<m相当于n不超过n的划分(2)n=m结果就是{n,x1,x2…},而{x1,x2…}就是n不超过n-1的划分,问题规模减小(3)n>m 结果分为两部分,一部分是包括m的划分:{m,x1,x2…},而{x1,x2…}就是n-m不超过m的划分。另一部分是不包括m的划分,就相当于n不超过m-1的划分。数学建模:针对三种情况建立相应函数:定义函数Q(n,m)原创 2022-01-12 16:51:12 · 2133 阅读 · 0 评论