算法分析
文章平均质量分 84
fir_dameng
这个作者很懒,什么都没留下…
展开
-
回朔法之装载问题
装载问题描述:有一批n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为Wi,且满足装载问题要求确定,是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船,如果有,找出一种装载方案。(事实上,肯定有的啊)策略:首先将第一艘轮船尽可能装满;然后将剩余的集装箱装上第二艘轮船*回朔法解问题*1.先明确定义问题原创 2015-05-22 08:40:47 · 802 阅读 · 0 评论 -
回朔法之0_1背包
o_1背包用回朔法求解时,其解空间是子集树。回朔法从开始节点(根节点)出发,以深度优先方式搜索整个解空间。这个开始节点成为活结点,同时也成为当前的扩展节点,在当前的扩展节点处,向纵深方向搜索至一个新节点,这个新节点也就成为了新的活结点,并成为当前扩展节点。如果当前扩展节点处不能在向纵深方向移动,则当前扩展节点也就成为死结点。此时,应往回移动(回朔)至最近的一个活结点处,并使原创 2015-05-22 15:55:57 · 1027 阅读 · 0 评论 -
优先队列分支限界法之单源最短路径
优先队列式分支限界法 基本思想:为了加速搜索的进程,应采用有效地方式选择活结点进行扩展。按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。 搜索策略:对每一活结点计算一个优先级(某些信息的函数值),并根据这些优先级;从当前活结点表中优先选择一个优先级最高(最有利)的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。再从活结点表中下原创 2015-05-22 18:14:55 · 17298 阅读 · 2 评论 -
自然合并排序算法
合并排序基本思想:将待排序元素分成大小大致相同的两个子集和,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。原创 2015-05-14 16:13:17 · 13397 阅读 · 6 评论 -
分治法_随机快速排序
常规快速排序基本思想: 分解-->递归求解 以下是我认为最简洁的快速排序代码void QuickSort(int a[],int p,int r){ if(p<r) { int q=Partion(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r); } }原创 2015-05-11 20:27:55 · 1047 阅读 · 0 评论 -
克鲁斯卡尔算法+快速排序算法(最小生成树 2)
【算法描述】1,原创 2014-11-23 09:29:03 · 922 阅读 · 0 评论 -
动态规划_最大m子段和
继最大子段和在空间上的推广,那么再来看看她在个数上的延伸。最大子段和就是最大m子段和问题在m=1时的特殊情况类似最大字段和中的b(j)这里假设b(i,j)表示数组a的前j项中i个子段和的最大值,且第i个子段含a[j]其中b(i,j-1)+a[j]表示第i个子段含a[j],而,表示第i个子段仅含a[j],所以在表示b(i,j)需要从有i-1个字段中原创 2015-05-09 19:50:53 · 1037 阅读 · 0 评论 -
最大子段和
问题描述: 给定有n个整数(可能为负整数)组成的序列,a1,a2,.......an,求该序列如子段和最大值,当所有整数均为负整数时,定义其最大子段和为0,依此定义,所求最优值为 Max{0, } 上述假定的意思也原创 2015-05-09 11:52:01 · 573 阅读 · 0 评论 -
贪心算法之单源最短路径
问题:在一个有向网络中,从某点出发得到所有到该顶点的最短距离。迪杰斯特拉算法是解单源最短路径问题的一个贪心算法,其基本思想是,设置顶点集合S不断的贪心选择来扩充这个集合。当源点到该顶点的最短距离已知,则添加到集合来,最终包括网络中的所有顶点。贪心选择:step1:首先选择网络中的某一顶点V出发,那么该顶点肯定可以添加到S中,然后以V为源点,得到它到其他顶点的距离(初始化原创 2015-04-09 15:42:47 · 2122 阅读 · 1 评论 -
贪心算法之prim算法
算法思想: 首先置S={1},然后只要S是V的真子集,就做如下的贪心选择:选择满足条件i属于S,j属于V-S,且edge[i][j]是最小的边,就将其顶点j添加到S中,这个过程一直进行到S=V时为止,在这个过程中,选取到的所有边恰好构成G的一颗最小生成树。#include#define INFINITY 5000typedef char原创 2015-04-09 17:46:36 · 1293 阅读 · 0 评论 -
动态规划之0_1背包
问题描述: 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?个人认为很重要的一点就是要理解 m[i][j]对于m(i,j)就表示可选物品为i…n背包容量为j(总重量)时背包中所放物品的最大价值。对于问题的比较好的分析与解释见:http://blog.csdn.net原创 2015-04-06 16:37:47 · 505 阅读 · 0 评论 -
动态规划之多边形游戏
多边形游戏介绍:开始时由n个顶点构成的多边形,每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”和“*”,所有边依次用整数从1到n编号。游戏的步骤:1,将一条边删除随后n-1步按以下方式操作1,选择一条边E及由E连接着的两个顶点v1和v2;2,用一个新的顶点取代边E以及由E连接着的两个顶点v1和v2,将由顶点v1和v2的整数值通过边E上的运算符得到的结果赋予新顶点。最后,所有边原创 2015-03-30 17:59:17 · 1148 阅读 · 0 评论 -
动态规划之矩阵连乘
问题介绍: 给定n个矩阵{A1,A2,A3......An},其中Ai与Ai+1是可乘的,i=1,2......n-1.考察n个矩阵连乘积的最小次数,即以最少的计算量来求得最终结果。矩阵连乘性质分析: 1.假设ra,ca和rb,cb表示矩阵A和B的行数与列数,则AxB=ra*ca*cb,因为相邻连乘的矩阵必有ca=rb原创 2015-04-05 13:51:20 · 1280 阅读 · 0 评论 -
动态规划之最长公共子序列
背景: 对于两个给定的序列X ={A,B,C,D,A,B},Y={B,D,C,A,B,A},例如{B,C,D,A}是他们的最长公共子序列,但并不是唯一的最长公共子序列。比如说{B,D,A,B} 但该动态规划算法着重于分析如何求出一个最长公共子序列,至于求出所有最长公共子序列,或者是多个给定的序列求最长公共子序列还需有待研究!分析: 动态规划算原创 2015-04-05 16:30:29 · 686 阅读 · 0 评论 -
华为2019校招编程题
题目简化后,召唤师能控制n种元素,并且将m个元素组合成一个新技能(这m个元素旋转或反转都算作一个,如123,132,312等),那么召唤师能组合多少技能,20000>=n>=1,10000>=m>=1,由于结果可能很大,请将结果对1000000007取余。代码一:import sysres = 0def dfs(start,k,n,tmp): globa...原创 2019-09-08 10:43:59 · 1261 阅读 · 0 评论