![](https://img-blog.csdnimg.cn/20200228121755652.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
=>算法分析与设计H
算法造就更高效更奇妙
飞翔的哈士奇
帐号已弃更,转Github(DelinQu) — 2021.05
展开
-
用分支限界法求解无权图的最大割问题
问题描述给定一个无向图G=(V,E),设UV是G的顶点集。对任意(u,v)∈E,若u∈U且v∈V-U,就称(u,v)为关于顶点集U的一条割边。顶点集U的所有割边构成图G的一个割。G的最大割是指G中所含边数最多的割。算法设计:对于给定的无向图G,设计一个优先队列式分支限界法,计算G的最大割数据输入:由文件 Input. txt给出输入数据。第1行有2个正整数n和m,表示给定的图G有n个顶点和m条边,顶点编号为1,2,…,n。接下来的m行中,每行有2个正整数u和v,表示图G的一条边(u,v)。结果输出原创 2020-06-07 08:17:47 · 1105 阅读 · 0 评论 -
线性时间选择——舍伍德法
一.问题描述给定一个长度为n的整数序列,{a1,a2,a3,………an-1,an},和一个整数k,设计一个算法求出序列中第k小的数。用舍伍德法设计一个求解线性时间元素选择问题的算法。输入:要求从文件input.txt中读入数据,包括n+1行,第一行为两个整数n,k分别代表序列长度和k下标。输出:要求将数据输出到文件中output.txt,包括一行一个整数,代表第k小的数。样例: 结果:5 33 2 1 5 4原创 2020-06-03 23:36:20 · 1648 阅读 · 0 评论 -
用分支限界法求解01背包
问题描述0-1背包问题:给定n种物品和一背包。物品i的重量是wi, 其价值为Vi, 背包的容量为C。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i可以选择这个物品的一部分。输入:通过文件读入,第一行包括两个整数n和c,代表物品数和背包容量,接下来的n行每行包括两个整数,w[i]和v[i]代表物品的重量和价值。输出:将计算结果输出到文件,包括最优价值和选取方案包括2行,第一行一个整数,表示计算结果,第二行包括一组序列,表示选取方案,按照T={1,0原创 2020-06-01 09:51:12 · 10319 阅读 · 0 评论 -
排列问题
问题描述设计一个递归算法生成 n个元素{r1,r2,…,rn}的全排列。设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。 集合X中元素的全排列记为perm(X)。 (ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀得到的排列。R的全排列可归纳定义如下:当n=1时,perm( R )=( r ),其中r是集合R中唯一的元素当n>1时,perm( R )由( r1 )perm(R1),(r2)perm(R2),…,(rn)perm(Rn)构成。算法原创 2020-05-30 11:30:53 · 954 阅读 · 0 评论 -
斐波拉契数列浅析
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。这里我们将推导斐波拉契数列的通项公式以及生.原创 2020-05-30 09:17:32 · 2575 阅读 · 0 评论 -
布线问题
问题描述印刷电路板将布线区域划分成nXm个方格阵列。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。现给定起始点位置,求出一条从起点到终点的最短路径。算法思想广度搜索用二维数组表示网格,并且在网格的外围预处理一层“墙壁”,初始化为-1,表示不通网格grid[i][j]存储从起点开始到达(i,j)的步长也就是层数用两个数组表示搜索方向:int offs原创 2020-05-27 13:22:28 · 4208 阅读 · 1 评论 -
分支界限法&&用分支限界法求解装载问题
问题描述数据访问原创 2020-05-19 09:56:28 · 6169 阅读 · 0 评论 -
算法复杂性分析
博客简介本博客是算法分析与设计H的复杂度分析方法总结,持续完善中…1.复杂度分析的内容算法复杂性 = 算法所需要的计算机资源,包括:算法的时间复杂性T(n)算法的空间复杂性S(n)。其中n是问题的规模(输入大小)(1)时间复杂度分析最坏情况下的时间复杂性 Tmax(n) = max{ T(I) | size(I)=n }最好情况下的时间复杂性Tmin(n) = min{ T(I) | size(I)=n }平均情况下的时间复杂性Tavg(n) =其中I是问题的规模为n的实例原创 2020-05-18 15:12:21 · 1792 阅读 · 0 评论 -
NP完全性理论
1.引言在计算机算法理论中,最深刻的问题之一是“从计算的观点来看,要解决的问题的内在复杂性如何?”它是“易”计算的还是“难”计算的?如果知道了一个问题的计算时间下界,就知道了对于该问题能设计出多有效的算法,从而可以较正确地评价对该问题提出的各种算法的效率,并进而确定对已有算法还有多少改进的余地。在许多情况下,要确定一个问题的内在计算复杂性是很困难的。已创造出的各种分析问题计算复杂性的方法和工具可以较准确地确定许多问题的计算复杂性。问题的计算复杂性可以通过解决该问题所需计算量的多少来度量。如何区分一个问原创 2020-05-17 22:06:15 · 2439 阅读 · 0 评论 -
圆排列问题
1.问题描述给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3个圆的半径分别为1、1、2时,这3个圆的最小长度的圆排列如图,其最小长度为2+4√2。2.算法分析该问题是一个排列问题,问题的解存储在序列r={r1,r2,r3…}中,问题的解空间树是一颗排列树。用x={x1,x2,x3…}表示当前排列的各个圆的圆心。下界函数:用Center(t)计算新增圆的圆心,原创 2020-05-13 14:19:25 · 1056 阅读 · 0 评论 -
图的m着色问题
问题描述给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着种颜色。是否有一种着色法,使G中每条边的2个顶点着有不同颜色?这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。如果一个图的所有顶点和边都能用某种方式画在平面上且没有任何两边相交,则称这个图是可平面图。著名的平面图的四色猜想是图的m可着色性判定问题的特殊情形。讨论一般连通图的可着色性问题,不仅限于平面图原创 2020-05-12 17:45:29 · 2812 阅读 · 1 评论 -
n皇后问题
问题描述:在nXn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于,在nxn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。算法分析此题用回溯法求解,可以构造排列树解空间,解向量:(x1,x2,…,xn)显约束:x=1,2…n隐约束:(1)不同列:xi≠xj(2)不处于同一正、反对角线:|i-j|!=|xi-xj|...原创 2020-05-12 08:49:28 · 1261 阅读 · 0 评论 -
符号三角形问题
问题描述下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形使其所含的“+”和“-”的个数相同。算法思想回溯,...原创 2020-05-12 00:18:46 · 1096 阅读 · 0 评论 -
分治法&动态规划&贪心法的比较
关于分治法&动态规划&贪心法,有一个共同的特性,就是原问题要划分为子问题,通过子问题进行求解。以下对这三者进行比较分治法求解过程原问题分解——>求解子问题——>合并子问题——>得到原问题的解难点在于如何分解,如何合并一般采用递归在分解过程中与动态规划不一样的是,每一个原问题的分解方式是固定的。二动态规划法的分解方式可以又多种自顶向下划分子问题,向上合并代表问题马的哈密尔顿回路问题:https://blog.csdn.net/weixin_44307原创 2020-05-09 23:25:38 · 1653 阅读 · 0 评论 -
磁带最优存储问题
问题描述有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li, 1<= i<= n。这n 个程序的读取概率分别是p1,p2,…,pn,且pi+p2+…+pn = 1。如果将这n 个程序按 i1,i2,…,in 的次序存放,则读取程序tr 所需的时间tr=c*(Pi1Li2+Pi2Li2+…+Pir*Lir)。这n 个程序的平均读取 时间为t1+t...原创 2020-05-05 22:24:10 · 7381 阅读 · 1 评论 -
实验B----CFG是P成员
实验B----CFG是P成员 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit users: 430, Accepted users: 406 Problem 12596 : No special judgeme...原创 2020-04-24 22:37:24 · 510 阅读 · 0 评论 -
01背包问题
问题描述0-1背包问题:给定n种物品和一-背包。物品i的重量是wi, 其价值为Vi, 背包的容量为C。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。最优子结构分析确定递推方程对于这个整数规划问题,我们用m(i,j...原创 2020-04-15 21:30:34 · 1171 阅读 · 0 评论 -
凸多边形最优三角形剖分
问题描述当一个简单的多边形及其内部构成一个闭凸集时,则称该简单多边形为一个凸多边形。即凸多边形边界上或内部任意两点所连成的直线上所有的点都在多边形内部或边界上。通常用顶点的逆时针序列来表示凸多边形,即P={V0,V1,V2…Vn-1},表示有n条边的凸多边形,如图我们约定V0=Vn:凸多边形最优三角剖分问题:给定凸多边形P={V0,V1,V2…Vn-1},以及定义在由凸多边形的边和弦组成的三...原创 2020-04-13 23:38:31 · 4776 阅读 · 1 评论 -
树的最大连通分支问题
问题描述问题描述:给定一棵树 T,树中每个顶点 u 都有一个权 w(u),权可以是负数。现在要找到树 T 的一个连通子图使该子图的权之和最大。对于给定的树 T,编程计算树 T 的最大连通分支。数据输入:第 1 行有 1 个正整数 n,表示树 T 有 n 个顶点。树 T 的顶点编号为 1,…,n。第 2 行有 n 个整数,表示 n 个顶点的权值。接下来的 n-1 行中,每 行有表示树 T ...原创 2020-04-06 00:01:05 · 1336 阅读 · 3 评论 -
字符串比较问题
问题描述:对于长度相同的2 个字符串A和B,其距离定义为相应位置字符距离之和。2 个非空格字符的距离是它们的ASCII码之差的绝对值。空格与空格的距离为0;空格与其它字符的距离为一定值k。在一般情况下,字符串A和B的长度不一定相同。字符串A的扩展是在A中插入若干空格字符所产生的字符串。在字符串A 和B 的所有长度相同的扩展中,有一对距离最小的扩展,该距离称为字符串A和B的扩展距离。对于给定的...原创 2020-04-05 22:35:01 · 3294 阅读 · 1 评论 -
二维背包问题
问题描述给定n件物品和一背包。物品i的重量是Wi,体积是bi,其价值是Vi,背包的容量是c,容积为d。一件物品只能整个放进背包中或不放进背包中,也不允许重复放入。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?请设计一个求解此问题的算法。问题分析对于这个整数规划问题,我们用m(i,j,k)来表述可选择物品为i,i+1,i+2,i+3…在背包容量为j,容积为k时的最优值。那么我们...原创 2020-04-05 20:47:00 · 1293 阅读 · 0 评论 -
最长单调递增子序列LIS
问题描述给定一个n个数组成的序列,求其最长的单调递增子序列问题分析方法1:动态规划对于一个序列a[0:n-1]我们使用b[0:n-1]来记录以a[i]结尾的元素的最长递增子序列的长度。那么序列a的最长递增子序列的长度为max{b[k]}+1,其中0<=k<nb[i]满足最优子结构的性质,可以递归的定义为:代码实现...原创 2020-04-05 17:02:32 · 388 阅读 · 0 评论 -
矩阵连乘问题
问题描述给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1, 2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次 序计算矩阵连乘积需要的数乘次数最少。问题分析对于一组相乘的矩阵列,满足如下性质,我们用(ri,rj)来描述一个矩阵两个矩阵相乘必须满足第一个矩阵的列数等于第二个矩阵的行数也就是A(r1,c1)*B(r2,c2),有C1=R2新矩阵的规模是R1*...原创 2020-03-30 15:11:28 · 1185 阅读 · 1 评论 -
集合划分问题
问题描述:n个元素的集合{1,2,.,n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:{1},{2},{3},{4}}, {{1,2},{3},{4}},{{1,3},{2},{4}}, {{1,4},{2},{3}},{{2,3},{1},{4}}, {{2,4},{1},{3}},{{3,4},{1},{2}}, {{1,...原创 2020-03-28 20:56:10 · 1857 阅读 · 0 评论 -
马的Hamilton周游路线问题
问题描述8*8的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点。这条路线称为马的一条Hamiltion周游路线。对于给定的m*n的国际象棋盘,m,n均为大于5的偶数,且|m-n|<=2,试分析分治算法找出马的一条Hamilton周游路线。算法设计:对于给定的偶数m,n>=6,且|m-n|<=2,计算m*n的国际象棋盘上马的一条Hamilton周游...原创 2020-03-28 17:25:53 · 6634 阅读 · 1 评论 -
网球循环赛日程表
问题描述有n个运动员要进行网球循环赛。设计一个满足以下要求的比赛日程表:1):每个选手必须与其他n-1个选手各赛一次;2):每个选手每天只能赛一次;3):当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。...原创 2020-03-28 14:45:01 · 4998 阅读 · 0 评论 -
试证明,在最坏情况下,求n个元素组成的集合s中的第k小元素至少需要n+min(k,n- k+1)-2次比较
问题描述试证明,在最坏情况下,求n个元素组成的集合s中的第k小元素至少需要n+min(k,n- k+1)-2次比较。问题分析问题分析:我们在之前已经学习了分治选择算法RandomizeSelect算法,该算法可以在一个线性时间里求解序列中的第K个元素,但是很遗憾,我们没法从该算法入手解决这个证明问题。因为此证明,试图证明所有选择算法的——极限所在,准确来说是下限你是否记的,在数据结构中...原创 2020-03-28 10:29:02 · 1421 阅读 · 4 评论 -
汉诺塔问题
问题描述汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?也就是说我们要在这个规则的约束下...原创 2020-03-14 12:37:09 · 288 阅读 · 0 评论 -
众数问题
问题描述给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。如果出现多个众数,请输出最小的那个。Input输入数据的第1行是多重集S中元素个数n(n<1000000);接下来的n行中,每行有一个最多含有...原创 2020-03-14 09:33:09 · 4112 阅读 · 0 评论 -
排列的字典序问题
问题描述n个元素{1,2,…,n}有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1.每个排列的编号为其字典序值。例如,当n=3时,6个不同排列的字典序值如下: 字典序值排列 0 1 2 3 4 123 132 213 231 312 321 算法设计给定n及n个元素{1,2,…,n}的一个排列,...原创 2020-03-11 11:49:55 · 3413 阅读 · 0 评论 -
整数划分问题
问题描述将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。整数划分问题即求正整数n的不同划分个数。例如:正整数6有如下11种不同的划分65+14+2,4+1+13+3,3+2+1,3+1+1+12+2+2,2+2+1+1,2+1+1+1+11+1+1+1+1+1输入两个正整数n,m...原创 2020-03-09 13:53:30 · 2189 阅读 · 0 评论 -
半数集问题
问题描述给定一个自然数n,由n 开始可以依次产生半数集set(n)中的数如下。(1) n∈set(n);(2) 在n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。注意半数集是多重集。算法设计对于给定的自然数n,计算半数集...原创 2020-03-05 16:41:02 · 2206 阅读 · 0 评论 -
金币列阵
问题描述有mxn枚金币(m,n<=100)在桌面上摆成一个m行n列的阵列,每一枚金币正面朝上或者背面朝上,用数字0和1表示金币的状态。游戏规则:①每次将任意一行金币翻过来 ②每次可任意交换两列算法设计给定阵列初始状态,目标状态,按游戏规则计算从初始状态到目标状态需要的最少变换次数数据输入从文件input.txt输入数据,第一行k表示数据组数每组数据第一行m n表示m行n列,...原创 2020-02-29 11:36:23 · 980 阅读 · 1 评论 -
字典序问题
问题描述在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表中产生的所有长度不超过6的升序字符串,计算它在字典中的编码。123…2728........原创 2020-02-28 22:45:56 · 1307 阅读 · 0 评论 -
PageRank算法 Google民主表决式网页排名技术
博客简介本篇博客介绍PageRank算法原理。这原本是一个小组的任务,我们在网上搜集了相关资料整理成了PPT,用于展示。如果不嫌弃的话可以下载来看看:https://download.csdn.net/download/weixin_44307065/12197391Google民主表决式网页排名技术简介PageRank算法原理PageRank算法证明举例说明Google民主表决式...原创 2020-02-28 09:38:39 · 569 阅读 · 0 评论