算法
文章平均质量分 59
中小庸
这个作者很懒,什么都没留下…
展开
-
布线问题_分支限界法
问题描述:在N×MN×MN×M的方格阵列中,指定一个方格为aaa,另一个方格为bbb,问题要求找出aaa到bbb的最短布线方案(即最短路径)。布线时只能沿直线或直角,不能走斜线。黑色的单元格代表不可以通过的封锁方格。问题分析:将方格抽象为顶点,中心方格和相邻四个方向(上、下、左、右)能通过的方格用一条边连起来。这样,可以把问题的解空间定义为一个图。该问题是特殊的最短路径问题,特殊之处在于用布线走过的方格数代表布线的长度,布线时每布一个方格,布线长度累加1。只能朝上、下、左、右四个方向进行布线。原创 2021-05-19 20:45:56 · 3685 阅读 · 1 评论 -
回溯法_01背包
问题描述:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为W。一个物品要么全部装入背包,要么全部不装入背包,不允许部分装入。装入背包的物品的总重量不超过背包的容量。问应如何选择装入背包的物品,使得装入背包中的物品总价值最大?定义问题的解空间解的形式(x1,x2,…,xn)(x1,x2,…,xn)(x1,x2,…,xn),其中xi=0xi=0xi=0或111xi=0x_i=0xi=0:第iii个物品不装入背包xi=1x_i=1xi=1:第iii个物品装入背包约束条原创 2021-05-14 16:32:02 · 1226 阅读 · 1 评论 -
回溯_最优装载问题
问题描述 : 有一批共nnn个集装箱要装上222艘载重量分别为c1c1c1和c2c2c2的轮船,其中集装箱iii的重量为wiwiwi,且∑i=1n⩽c1+c2\sum_{i = 1}^{n}\leqslant{c1 + c2}∑i=1n⩽c1+c2,装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。思路容易证明,如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。首先将第一艘轮船尽可能装满将剩余的集装箱装上第二艘轮船。将第一艘轮船尽可能装满原创 2021-05-10 22:44:15 · 2223 阅读 · 2 评论 -
回溯法_N后问题
问题描述在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。...原创 2021-05-07 17:20:00 · 308 阅读 · 0 评论 -
贪心_会议安排
会议安排要求:设有n个会议等待安排,⽤贪⼼法找出满⾜⽬标要求的会议集合。这些会议按结束时间的⾮减序排列.现在以11个会议安排为例,如下标所示:会议i1234567891011会议开始时间bib_ibi130535688212会议结束时间eie_iei4567891011121314这里的贪心算法怎么贪呢?有以下三种思路:选择最早开始时间且不与已安排会议重叠的会议选择使⽤时间最短且不与已安排会.原创 2021-04-09 16:19:44 · 159 阅读 · 0 评论 -
贪心_迪杰斯特拉算法
贪心法基本思想:从问题的某⼀个初始解出发,在每⼀个阶段都根据贪⼼策略来做出当前最优的决策,逐步逼近给定的⽬标,尽可能快地求得更好的解。当达到算法中的某⼀步不能再继续前进时,算法终⽌。基本要素最优⼦结构性质当⼀个问题的最优解⼀定包含其⼦问题的最优解时采⽤反证法证明贪⼼选择性质所求问题的整体最优解可以通过⼀系列局部最优的选择获得,即通过⼀系列的逐步局部最优选择使得最终的选择⽅案是全局最优的得出的结论每个阶段⾯临选择时, 贪⼼法都做出对眼前来讲是最有利的选择选择⼀旦做出不原创 2021-04-08 19:09:48 · 555 阅读 · 0 评论 -
栈_彩虹瓶
天梯赛_彩虹瓶题目:彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取原创 2021-02-23 14:31:52 · 160 阅读 · 0 评论 -
算法常用模板_建图
快速建图模板图是一种重要的数据结构,在算法中有着广泛地运用。快速地建图,能够帮助我们更好地进行算法实现。本文介绍一种基于连接静态链表,采用头插法的方式进行快速建图的模板。以下是核心代码部分:#include <iostream>#define maxn 1010#define maxm 500010using namespace std;int tot = 0; // edge 中有多少条边int head[maxn]; // 表头数组struct Edge{原创 2021-02-23 13:00:56 · 202 阅读 · 1 评论 -
动态规划_小字辈
天梯赛_小字辈题目:本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔原创 2021-02-21 16:58:37 · 102 阅读 · 0 评论 -
动态规划_最长公共子序列
动态规划_最长公共子序列先介绍几个定义:序列: 一个具有 严格次序 的对象元素的集合.字符序列 。 字符对象的序列则为 字符序列 如 XXX={x1,x2,xmx_1, x_2, x_mx1,x2,xm}.子序列:给定序列 XXX={x1,x2,xmx_1,x_2,x_mx1,x2,xm},序列ZZZ={z1,z2,zkz_1, z_2, z_kz1,z2,zk}是XXX的子序列,当且仅当存在一个严格递增的下标序列{i1,i2,iki_1,i_2,i_ki1,i2,ik}原创 2021-02-10 12:34:52 · 596 阅读 · 0 评论 -
动态规划_斐波那契数列
动态规划及斐波那契举例定义:动态规划(Dynamic Programming DP)是一种多阶段决策优化方法,在数学、计算机科学和经济学中使用。初衷:使用分治法将大问题分解为若干个小问题进行求解。而其中,许多子问题需要重复求解。当 n 很大时效率很低。那么,我们就想到了,能否将已经求解的子问题的解保存下来,再需要使用子问题解的时候,直接给出解,避免进行重复求解,以达到优化算法,降低算法求解时间的目的。动态规划方法的实质是分治思想和解决冗余:分治思想:将原解问题分解为更小 、 更易求解的子问题,然原创 2021-02-02 12:17:15 · 242 阅读 · 1 评论 -
棋盘覆盖问题
棋盘覆盖问题在一个2k2^k2kx2k2^k2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格,且该棋盘称之为特殊棋盘。现在要求,要用以下四种L型骨牌,覆盖特殊棋盘上除特殊格子以外的所有方格。思考:因为棋盘是一个2k2^k2kx2k2^k2k的棋盘,所以可以将棋盘以中心点平均切割为四等分,变成四个2k−12^{k-1}2k−1x2k−12^{k-1}2k−1的棋盘,其中有一块棋盘有特殊棋子,而其他的三个棋盘没用特殊棋子.这时想到了,因为是L型的骨牌,所以可以用适合的L型骨牌,覆盖另外原创 2021-02-01 12:59:03 · 850 阅读 · 1 评论 -
快速排序
快速排序通过一趟扫描将待排序的元素分割成独立的三个部分:左区间中所有元素均不大于基准元素第二个是基准元素右区间中所有元素均不小于基准元素。再按此方法对第一个序列和第三个序列分别进行排序。整个排序过程可以递归进行。其实,每一趟的本质都是将基准元素进行归位,比基准元素小的在左区间,比基准元素大的在右区间。最后,所有的元素全部都归位了,序列也就成为有序的序列了。如果还是不清楚快速排序的思想,可以看看下面这个网站上的动画,可能会更加的形象:排序动画网站(含快排、插入、归并等多种排序的动画)#原创 2021-01-29 17:58:29 · 108 阅读 · 3 评论 -
二分搜索
二分查找顾名思义,二分查找就是将原来要查找的序列一分为二,以优化查找的效率。二分查找的基本思想:输入为有序的序列。取中间元素与待查找元素x进行比较,如果x等于中间元素,则算法终止;如x小于中间元素,则在序列的 左半部 继续查找。否则,在序列的 右半部直接上代码,看注释#include <iostream>#include <algorithm>/*二分查找函数实现及使用库函数实现*/using namespace std;/** * 二分查找原创 2021-01-28 22:39:20 · 159 阅读 · 1 评论