
datastructor
文章平均质量分 74
web_gus
这个作者很懒,什么都没留下…
展开
-
2.2.1 残缺棋盘
残缺棋盘(defective chessboard)是一个有2k×2k 个方格的棋盘,其中恰有一个方格残缺。图2 - 3给出k≤2时各种可能的残缺棋盘,其中残缺的方格用阴影表示。注意当k= 0时,仅存在一种可能的残缺棋盘(如图1 4 - 3 a所示)。事实上,对于任意k,恰好存在22k 种不同的残缺棋盘。残缺棋盘的问题要求用三格板(t r i o m i n o e s)覆盖残缺棋盘(如图1原创 2004-10-11 13:53:00 · 1637 阅读 · 0 评论 -
1.3.1 货箱装船
这个问题来自例1 - 2。船可以分步装载,每步装一个货箱,且需要考虑装载哪一个货箱。根据这种思想可利用如下贪婪准则:从剩下的货箱中,选择重量最小的货箱。这种选择次序可以保证所选的货箱总重量最小,从而可以装载更多的货箱。根据这种贪婪策略,首先选择最轻的货箱,然后选次轻的货箱,如此下去直到所有货箱均装上船或船上不能再容纳其他任何一个货箱。 例1-7 假设n =8, [w1 , ... w8 ]=原创 2004-10-11 13:59:00 · 968 阅读 · 0 评论 -
数据结构--序言
在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 能够熟练地选择和设计各种数据结构和算法。 至少要能够熟练地掌握一门程序设计语言。 熟知所涉及的相关应用领域的知识。 其中,后两个条件原创 2004-10-11 14:02:00 · 1159 阅读 · 0 评论 -
1.3.2 0/1背包问题
在0 / 1背包问题中,需对容量为c 的背包进行装载。从n 个物品中选取装入背包的物品,每件物品i 的重量为wi ,价值为pi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即n ?i=1pi xi 取得最大值。约束条件为n ?i =1wi xi≤c 和xi?[ 0 , 1 ] ( 1≤i≤n)。在这个表达式中,需求出xt 的值。xi =原创 2004-10-11 13:58:00 · 2217 阅读 · 0 评论 -
1.2 算法思想
在贪婪算法(greedy method)中采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪婪决策的依据称为贪婪准则(greedy criterion)。 例1-4 [找零钱] 一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为2 5美分、1 0美原创 2004-10-11 14:00:00 · 1379 阅读 · 0 评论 -
递归算法例解(一)
这个递归程序很简单,但是遇到复杂的递归算法可就不容易看懂了。以下这种方法能够帮助大家进行分析,但愿吧。 一.例子(用从C++描述): 行号 程序 0 p (int w) 1 {if( w>o) 2 { cout 3原创 2004-10-11 14:10:00 · 1232 阅读 · 0 评论 -
冒泡排序的算法分析与改进
交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。冒泡排序1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原原创 2004-10-13 14:53:00 · 1074 阅读 · 0 评论 -
c# kmp算法
using System;namespace kmp{ /// /// Summary description for Class1. /// class Class1 { /// /// The main entry point for the application. /// static int[] next=new int[20]; static int count=0;原创 2005-08-12 16:47:00 · 2928 阅读 · 1 评论 -
刚从网上看来得一段大数相乘的代码
#include main(){int a[30],b[30],c[60];int i,j;for (i=0;i{a[i]=i%10;b[i]=i%10;c[2*i]=0;c[2*i+1]=0;}for(i=0;ifor(j=0;jc[i+j]+=a[i]*b[j];for(i=0;i{c[i+1]+=c[i]/10;c[i]=c[i]%10;}for(i=0;iprintf("%d",a[30-原创 2005-08-23 10:34:00 · 1276 阅读 · 0 评论 -
1.3.3 拓扑排序
一个复杂的工程通常可以分解成一组小任务的集合,完成这些小任务意味着整个工程的完成。例如,汽车装配工程可分解为以下任务:将底盘放上装配线,装轴,将座位装在底盘上,上漆,装刹车,装门等等。任务之间具有先后关系,例如在装轴之前必须先将底板放上装配线。任务的先后顺序可用有向图表示——称为顶点活动( Activity On Vertex, AOV)网络。有向图的顶点代表任务,有向边(i, j) 表示先原创 2004-10-11 13:58:00 · 1182 阅读 · 0 评论 -
1.3.5 单源最短路径
在这个问题中,给出有向图G,它的每条边都有一个非负的长度(耗费) a [i ][ j ],路径的长度即为此路径所经过的边的长度之和。对于给定的源顶点s,需找出从它到图中其他任意顶点(称为目的)的最短路径。图13-10a 给出了一个具有五个顶点的有向图,各边上的数即为长度。假设源顶点s 为1,从顶点1出发的最短路径按路径长度顺序列在图13-10b 中,每条路径前面的数字为路径的长度。利用E. D原创 2004-10-11 13:56:00 · 1890 阅读 · 0 评论 -
第 2 章 分而治之算法
君主和殖民者们所成功运用的分而治之策略也可以运用到高效率的计算机算法的设计过程中。本章将首先介绍怎样在算法设计领域应用这一古老的策略,然后将利用这一策略解决如下问题:最小最大问题、矩阵乘法、残缺棋盘、排序、选择和计算一个几何问题——找出二维空间中距离最近的两个点。本章给出了用来分析分而治之算法复杂性的数学方法,并通过推导最小最大问题和排序问题的复杂性下限来证明分而治之算法对于求解这两种问题是原创 2004-10-11 13:54:00 · 1212 阅读 · 0 评论 -
1.3.4 二分覆盖
二分图是一个无向图,它的n 个顶点可二分为集合A和集合B,且同一集合中的任意两个顶点在图中无边相连(即任何一条边都是一个顶点在集合A中,另一个在集合B中)。当且仅当B中的每个顶点至少与A中一个顶点相连时,A的一个子集A 覆盖集合B(或简单地说,A 是一个覆盖)。覆盖A 的大小即为A 中的顶点数目。当且仅当A 是覆盖B的子集中最小的时,A 为最小覆盖。例1-10 考察如图1 -原创 2004-10-11 13:57:00 · 1518 阅读 · 0 评论 -
第 1 章 贪婪算法
虽然设计一个好的求解算法更像是一门艺术,而不像是技术,但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法,你可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得较好的性能,必须对算法进行细致的调整。但是在某些情况下,算法经过调整之后性能仍无法达到要求,这时就必须寻求另外的方法来求解该问题。 本章首先引入最优化的概念,然后介绍一种直观的问题求解方法:贪婪原创 2004-10-11 14:00:00 · 1019 阅读 · 0 评论 -
2.2.5 距离最近的点对
给定n 个点(xi,yi)(1≤i≤n),要求找出其中距离最近的两个点。例14-7 假设在一片金属上钻n 个大小一样的洞,如果洞太近,金属可能会断。若知道任意两个洞的最小距离,可估计金属断裂的概率。这种最小距离问题实际上也就是距离最近的点对问题。通过检查所有的n(n- 1 ) / 2对点,并计算每一对点的距离,可以找出距离最近的一对点。这种方法所需要的时间为(n2 )。我们称这种方法为直接方法。图原创 2004-10-11 13:50:00 · 1295 阅读 · 0 评论 -
2.2.4 选择
对于给定的n 个元素的数组a [ 0 : n - 1 ],要求从中找出第k小的元素。当a [ 0 : n - 1 ]被排序时,该元素就是a [ k - 1 ]。假设n = 8,每个元素有两个域k e y和I D,其中k e y是一个整数,I D是一个字符。假设这8个元素为[ ( 1 2 ,a),( 4 ,b),( 5 ,c),( 4 ,d),( 5 ,e),( 1 0 ,f),( 2 ,g)原创 2004-10-11 13:51:00 · 997 阅读 · 0 评论 -
2.2.3 快速排序
分而治之方法还可以用于实现另一种完全不同的排序方法,这种排序法称为快速排序(quick sort)。在这种方法中, n 个元素被分成三段(组):左段l e f t,右段r i g h t和中段m i d d l e。中段仅包含一个元素。左段中各元素都小于等于中段元素,右段中各元素都大于等于中段元素。因此l e f t和r i g h t中的元素可以独立排序,并且不必对l e f t和r i原创 2004-10-11 13:52:00 · 1176 阅读 · 0 评论 -
1.3.6 最小耗费生成树
在例1 - 2及1 - 3中已考察过这个问题。因为具有n 个顶点的无向网络G的每个生成树刚好具有n-1条边,所以问题是用某种方法选择n-1条边使它们形成G的最小生成树。至少可以采用三种不同的贪婪策略来选择这n-1条边。这三种求解最小生成树的贪婪算法策略是: K r u s k a l算法,P r i m算法和S o l l i n算法。1. Kruskal算法(1) 算法思想K原创 2004-10-11 13:55:00 · 1470 阅读 · 0 评论 -
2.2.2 归并排序
可以运用分而治之方法来解决排序问题,该问题是将n 个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n 为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。假设仅将n 个元素的集合分成两个子集合。现在需要确定如何进行子集合的划分。一种可能性就是把前面n- 1个元素放到第一个子集中(称为A),最后一个元素放原创 2004-10-11 13:53:00 · 1906 阅读 · 0 评论 -
顺序求出c(n,r)的排列组合
using System;namespace combinaton{ /// /// Summary description for Class1. /// class Class1 { /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args)原创 2005-08-22 15:29:00 · 1973 阅读 · 0 评论