04-算法
ncepustrong
这个作者很懒,什么都没留下…
展开
-
排序---->归并排序
归并排序 归并排序是另一类不同的排序方法,这种方法是运用分治法解决问题的典型范例。基本思想归并排序的基本思想是基于合并操作,即合并两个已经有序的序列是容易的,不论这两个序列是顺序存储还是链式存储,合并操作都可以在Ο(m+n)时间内完成(假设两个有序表的长度分别为m 和n)。为此,由分治法的一般设计步骤得到归并排序的过程为:1. 划分:将待排序的序列划分为大小相等(或大致相等)的转载 2012-12-29 11:44:15 · 735 阅读 · 0 评论 -
动态规划---->每对定点之间的最短路径 Floyd(弗洛伊德)算法
最短路径1、问题描述设G = ( V, E)是一个有n 个结点的有向图。又设C 是G 的成本邻接矩阵, 其中C(i,i)= 0 , 1≤i≤n; 当〈i,j〉∈E (G)时, C( i,j) 表示边〈i,j〉的长度(或成本) ; 当i≠j 且〈i,j〉| E(G)时, C( i ,j) = ∞。每对结点之间的最短路径问题( all pair s shor test path problem转载 2013-05-14 09:37:51 · 3667 阅读 · 0 评论 -
动态规划---->流水线调度问题
问题的描述:n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。调度规则(1 ) 把全部ai和bi分类成非降序列,ai和转载 2013-05-14 10:32:21 · 7131 阅读 · 2 评论 -
动态规划---->最优二分检索树
最优二分检索树最优二分检索树问题:求一棵使得预期成本最小的二分检索树一、问题引出 或是一棵空树;或者是具有如下性质的非空二叉树: (1)左子树的所有结点均小于根的值; (2)右子树的所有结点均大于根的值;对于一个给定的标识符集合,可能有若干棵不同的二分检索树:不同形态的二分检索树对标识符的检索性能是不同的。设给定的标识符集合是{a1,a2,…,an},并假转载 2013-05-14 11:04:31 · 11751 阅读 · 0 评论 -
回溯法---->哈密顿环
哈密顿环1、问题描述设G =(V,E)是一个n 结点的连通图。一个哈密顿环是一条沿着图G 的n 条边环行的路径, 它访问每个结点一次并且返回到它的开始位置。图G1含有一个哈密顿环1->2 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 12、找下一个结点的算法过程NEXTVALUE给出了在求哈密顿环的过程中如何找下一个结点的算法。pro转载 2013-05-16 10:22:39 · 3374 阅读 · 0 评论 -
回溯法---->8-皇后问题
八皇后问题问题描述将n个皇后放置在一个n×n的棋盘上,要求使得每两个之间都不能互相“攻击”,也就是使得每两个都不能在同一行、同一列及同一条斜角线上。分析8皇后问题的解可以表示为8-元组(x1,…,x8) ,其中其中xi是第i行皇后所在的列号。显式约束条件是si={1,2,3,4,5,6,7,8}, 1≤i≤8隐式约束条件是,没有两个xi可以相同且没有两个皇后可以在同一条斜角线上转载 2013-05-16 09:58:16 · 1361 阅读 · 0 评论 -
回溯法---->图的着色问题
图的着色问题1、问题描述图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?图的m-着色优化问题——若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题2、找一个图的所有m-着色方案转载 2013-05-16 10:12:02 · 3776 阅读 · 0 评论 -
排序算法
常见的排序算法一、冒泡排序冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的原创 2012-11-07 20:10:24 · 787 阅读 · 0 评论 -
动态规划---->可靠性设计
1、可靠性设计可靠性设计:一个系统由n级设备串联而成,为了增强可靠性,每级都可能并联了不止一台同样的设备。所以每级用的设备越多系统的可靠性越高。但是设备都是有成本的,假定设备Di的成本是ci,设计该系统允许的投资不超过c,那么,该如何设计该系统(即各级采用多少设备)使得这个系统的可靠性最高。试设计一个动态规划算法求解可靠性设计。如果第i级的设备Di的台数为mi,那么这mi台设备同时出现转载 2013-05-14 10:07:30 · 3958 阅读 · 1 评论 -
算法---->并行算法
并行算法一、并行算法什么是并行算法? 它可理解为: 适合于在某类并行计算机上求解问题和处理数据的算法, 是一些可同时执行的诸进程的集合, 这些进程相互作用和协调作用, 从而达到对给定问题的求解。二、并行计算机并行处理就是把一个传统串行处理的任务分解开来, 并将其分配给多个处理器同时处理, 即在同一时间间隔内增加计算机的操作数量。为并行处理所设计的计算机称为并行计算机。三、Fly转载 2013-05-20 16:32:53 · 9992 阅读 · 0 评论 -
算法---->递归
一、递归定义递归(recursion)是指在定义自身的同时又出现了对自身的引用。如果一个算法直接或间接地调用自己,则称这个算法是一个递归算法。任何一个有意义的递归算法总是由两部分组成:递归调用与递归终止条件 在实际应用中使用递归可以解决以下多方面的问题:⑴ 问题本身的定义就是递归的,例如许多数学定义就是递归的。⑵ 问题本身虽然不是递归定义的,但是它所用到的数据结构是转载 2013-05-10 10:32:06 · 999 阅读 · 0 评论 -
动态规划---->0/1背包问题
0/1背包问题有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。物品或者整件装入背包中, 或者根本不装入(即不能装入物品的一部分),求解将哪些物品装入背包可使价值总和最大。最优性原理对0/1背包问题成立算法基本思想利用动态规划思想 ,子问题为:f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。其状态转移方程是:f[i][v]=ma转载 2013-05-14 09:51:01 · 1389 阅读 · 0 评论 -
回溯法---->子集和数问题
子集和数问题问题描述已知(w1, w2, …, wn)和M,均为正数。要求找出wi的和数等于M的所有子集。 例如:若n=4,(w1,w2,w3,w4)=(11,13,24,7),M=31,则满足要求的子集是(11,13,7)和(24,7).分析子集和数问题解的一种表示方法解由n-元组(x1, x2, …, xn)表示;显式约束条件xi∈{0,1} ,1≤i≤n,如果没转载 2013-05-16 10:02:08 · 14197 阅读 · 1 评论 -
动态查找---->红黑树(Red-Black Tree)
红黑树 (Red-Black Tree)红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。包含n个内部节点的红黑树的高度是 O(log(n))。一、性质红黑树是每个节点都带有颜色属性的二叉查转载 2013-04-06 09:22:01 · 914 阅读 · 0 评论 -
动态规划---->货郎担问题
货郎担问题问题描述货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。其一般提法为:有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城1出发到其他城市一次且仅一次,最后回到城市1,怎样选择行走路线使总路程最短? 旅行商问题的提法为:假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径转载 2013-05-14 10:21:43 · 6100 阅读 · 0 评论 -
算法---->动态规划(一)
动态规划多阶段决策问题问题的活动过程分为若干相互联系的阶段,任一阶段i以后的行为仅依赖于i阶段的过程状态,而与i阶段之前的过程如何达到这种状态的方式无关。在每一个阶段都要做出决策,这一系列的决策称为多阶段决策过程(multistep decision process) 。根据这类问题多阶段决策的特性, 提出了解决这类问题的“最优性原理”,把多阶段过程转化为一系列单阶段问题,从而创建转载 2013-05-14 09:18:06 · 1478 阅读 · 0 评论 -
排序---->插入排序
插入排序插入排序的基本排序思想是:逐个考察每个待排序元素,将每一个新元素插入到前面已经排好序的序列中适当的位置上,使得新序列仍然是一个有序序列。在这一类排序中主要有三种排序方法:直接插入排序、折半插入排序和希尔排序。 2.1直接插入排序基本思想直接插入排序是一种最简单的插入排序方法,它的基本思想是:仅有一个元素的序列总是有序的,因此,对n个记录的序列,可从第二个元素开始直到第n原创 2012-12-29 10:13:03 · 1760 阅读 · 0 评论 -
动态规划---->多段图
多段图多段图问题是求由s到t的最小成本路径。图中的结点被划分成 k≥ 2个不相交的集合Vi , 1≤i≤k,其中V1和Vk分别只有一个结点 s (源点) 和t ( 汇点)。多段图向前处理的算法1、算法执行过程COST[j]=c(j,r)+COST[r];第4段 COST(4,9) = c(9,12) = 4转载 2013-05-14 09:36:12 · 16077 阅读 · 3 评论 -
算法---->贪心算法
贪心算法一、贪心算法定义贪婪算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准。然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。这种能够得到某种量度意义下最优解的分级处理方法称为贪婪算法。贪心算法总是作出在当前看来是最好的选择。也就是说贪心算转载 2013-05-11 10:47:31 · 2739 阅读 · 0 评论 -
算法---->分治法
一、分治法对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。二、一般步骤:1. 划分步骤:在算法的这个步骤中,把输入的问题实例划分为k≥1 个子问题,每个实例的规模严格小于问题的原始规模n转载 2013-05-10 10:42:25 · 1227 阅读 · 0 评论 -
动态查找---->平衡二叉树(AVL树)
平衡二叉树(AVL)一、 平衡二叉树在二叉查找树T中,若所有结点的平衡因子的绝对值均不超过1,则称T为一棵AVL树。平衡二叉树又称AVL树,它是具有如下性质的二叉树:• 左、右子树是平衡二叉树;• 所有结点的左、右子树深度之差的绝对值≤ 1为了方便起见,给每个结点附加一个数字,给出该结点左子树与右子树的高度差。这个数字称为结点的平衡因子balance。这样,可以得到AVL树原创 2012-12-28 11:00:48 · 1604 阅读 · 0 评论 -
动态查找---->B树(broad-tree 平衡多路查找树)
B-tree的引入 可以讲B理解成 broad在现代计算机中通常采用分级存储系统,以最简单的二级分级存储策略为例,就是由内存储器与外存储器(磁盘)组成二级存储系统。这一策略的思想是:将最常用的数据副本存放于内存中,而大量的数据存放于外存中,借助有效的算法可以将外存的大存储量与内存高速度的优点结合起来。一般的,在分级存储系统中,各级存储器的速度有着巨大的差异,仍然以磁盘和内存为例,前者的平均转载 2012-12-28 11:01:03 · 1695 阅读 · 0 评论 -
动态查找---->B+树、B*树
B+树、B*树一、 B+树B+树定义一棵B+树满足下列条件:(1) 每个分支结点至多有m棵子树。(2) 除根结点外,其他每个分支结点至少有⌊(m+1)/2)⌋棵子树。(3) 根结点至少有两棵子树,至多有m棵子树。(4) 有n棵子树的结点有n个关键字。(5) 所有叶子结点包含全部(数据文件中记录) 关键字及指向相应记录的指针(或存放数据文件分块后每块的最大关键字及指向原创 2012-12-28 15:55:17 · 1062 阅读 · 0 评论 -
静态查找---->顺序、折半、分块查找
一、基本概念查找表 由同一类型的数据元素(或记录)构成的集合。查 找 查询(Searching)特定元素是否在表中。静态查找 只查找,不改变集合内的数据元素。动态查找 既查找,又改变(增减)集合内的数据元素。关键字 记录中某个数据项的值,可用来识别一个记录主关键字 可以唯一标识一个记录的关键字次关键字 识别若干记原创 2012-12-28 09:40:59 · 1219 阅读 · 0 评论 -
排序---->选择排序
选择排序选择排序的基本思想是:每一趟从n-i+1 (i=1,2,…,n)个元素中选取一个关键字最小的元素作为有序序列中第i个元素。在简单选择排序的基础上,对其进行改进的算法有树型选择排序和堆排序。 4.1简单选择排序基本思想简单选择排序的基本思想非常简单,即:第一趟,从n个元素中找出关键字最小的元素与第一个元素交换;第二趟,在从第二个元素开始的n-1个元素中再选出关键字最小的元转载 2012-12-29 11:28:51 · 2323 阅读 · 0 评论 -
排序---->概述
排序一、 基本概念排序(sorting)的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。内部排序与外部排序根据排序时待排序的数据元素数量的不同,使得排序过程中涉及的存储器不同,可以将排序方法分为两类。一类是整个排序过程在内存储器中进行,称为内部排序;另一类是由于待排序元素数量太大,以至于内存储器无法容纳全部数据,排序需要借助外部存储设备才能完成,这类排序称为转载 2012-12-28 16:59:10 · 1386 阅读 · 0 评论 -
排序---->在线性时间内排序
通过比较确定两个元素之间相对位置的比较排序算法的时间复杂性下界为Ο(n log n),然而当排序序列满足某种特定条件时,可以突破这个时间下界,在线性时间内就可以完成排序。一、计数排序计数排序是一个非基于比较的线性时间排序算法。它对输入的数据有附加的限制条件:1. 输入的线性表的元素属于有限偏序集 S;2. 设输入的线性表的长度为 n,|S|=k(表示集合S 中元素的总数目为k),则转载 2012-12-30 16:26:48 · 997 阅读 · 0 评论 -
排序---->交换排序
交换排序交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”之。在这类排序方法中最常见的是冒泡排序和快速排序,其中快速排序是一种在实际应用中具有很好表现的算法。 3.1冒泡排序基本思想冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较原创 2012-12-29 10:56:36 · 1120 阅读 · 0 评论 -
回溯法---->背包问题
背包问题给定n中物品和一个容量为c的背包,物品i的重量为Wi,其价值为Vi,0-1背包问题是如何选择装入背包的物品(物品不可分割),使得装入背包的物品的价值为最大。限界函数procedure BOUND( p , w, k , M)∥p为当前效益总量; w 为当前背包重量; k 为上次去掉的物品; M 为背包容量; 返回一个新效益值∥global n转载 2013-05-16 10:29:17 · 1260 阅读 · 0 评论 -
算法---->回溯法
回溯法1、回溯法概述回溯法可以系统的搜索一个问题的所有解或任一个解它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索到某一结点时,如果断定该结点肯定不包含问题的解,则跳过以该结点为根的子树的搜索,逐层向其祖先结点回溯这种以深度优先方式搜索问题的解的方法称为回溯法2、回溯法思想第一步:为问题定义一个状态空间(state space),这个转载 2013-05-16 09:52:16 · 1187 阅读 · 0 评论 -
解空间树搜索 及 最优解
解空间树搜索算法总结一、解空间树15谜问题解空间树 装载问题解空间树二、深度优先搜索与广度优先搜索算法有何区别深度优先搜索法不全部保留结点,扩展完的结点从数据存储结构栈中弹出删去,在栈中存储的结点数就是解空间树的深度,因此它占用空间较少。所以,当搜索树的结点较多,用其它方法易产生内存溢出时,深度优先搜索不失为一种有效的求解方法。广度优先搜索算法,一般需存储产生所转载 2013-05-18 20:48:56 · 19092 阅读 · 0 评论 -
分支限界---->装载问题
装载问题一、问题描述有两艘船,n个货箱。第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱i 的重量,且w1+w2+……+wn≤c1+c2。确定是否有一种可将所有n个货箱全部装船的方法。若有的话,找出该方法。例子:有两艘船,3个货箱。第一艘船的载重量是50,第二艘船的载重量是50。 当w =[10,40,40]时,有解; 当w =[2转载 2013-05-18 21:09:39 · 4395 阅读 · 1 评论 -
分支限界---->0/1背包
0-1背包问题一、优先级如何确定?在优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。二、分支限界算法思想算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右转载 2013-05-18 21:16:51 · 1848 阅读 · 0 评论 -
分支限界---->15-谜问题
15-谜问题一、问题描述在一个分成16格的方形棋盘上放有15块编了号的牌。对于这些牌给定的一种初始排列,要求通过一系列的合法移动将初始排列转换成目标排列。合法移动:每次将一个邻接于空格的牌移动到空格位置(注:并不是所有的初始状态都能变换成目标状态的)二、如何判定目标状态在初始状态的状态空间中?1.记POSITION(i)为编号为i的牌在初始状态中的位置;POSITION转载 2013-05-18 20:58:05 · 10931 阅读 · 1 评论 -
算法---->分支限界
分支限界法 一、分支搜索 活结点:自己已经被生成,但还没有被检测的结点。“分支”是采用广度优先的策略,依次生成E-结点所有分支,也就是所有的儿子结点。和回溯法一样,可以在生成的结点中,抛弃那些不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点。选择下一个E-结点方式的不同导致几种分支搜索方式:搜索方式转载 2013-05-16 21:04:05 · 2498 阅读 · 0 评论 -
算法---->NP-难度和NP-完全的问题
1、确定的算法算法运算的结果都是唯一确定的, 这样的算法叫做确定的算法(deterministic algorithm) 。如加减乘除2、不确定的算法允许算法每种运算的结果不是唯一确定的, 而是受限于某个特定的可能性集合。执行这些运算的机器可以根据终止条件选择可能性集合中的一个作为结果。这就引出了所谓不确定的算法( nondeterministic algorithm)。如求下一个转载 2013-05-20 10:28:20 · 2831 阅读 · 0 评论 -
动态查找---->二叉查找树(Binary Search Tree)
二叉查找树(Binary Search Tree)一、二叉查找树的定义----或是一棵空树;或者是具有如下性质的非空二叉树: (1)左子树的所有结点均小于根的值; (2)右子树的所有结点均大于根的值;结论:中序遍历一棵二叉查找树可以得到一个按关键字递增的有序序列。1、查找查找的递归实现 :private Node binTSearchRe(BinTreeNode原创 2012-12-28 10:08:48 · 1163 阅读 · 0 评论