算法分析与程序设计
文章平均质量分 58
cll2009hm
很喜爱球类运动
展开
-
最长递增子序列问题
<br />问题描述:给定一个序列,找出其最长递增子序列长度。<br />比如 输入 1 3 7 5 <br />输出 3<br />算法思路:利用动态规划的思想,以序列的每个点最为最右端,找出每个点作为最右端时的子序列长度的最大值,即问题的求解。因此,在计算前面的每个点的时候,将其结果保存下来,后面的点与前面的点的数值进行比较,如果大,则在其长度基础上加1,并且找出所有可能情况下最长的保存为当前点的长度。形成递归。<br />我的源代码:<br />#include "stdio.h"<br />#inc原创 2010-09-17 09:12:00 · 498 阅读 · 0 评论 -
最大间隙问题
问题描述: 给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法。解法: 注意题中要求设计线性时间算法。如果没有这个要求,就可以先排序,找出来就很方便。但我们知道排序最优良的算法的时间效率也是nlogn的。所以不可行。 采用一种区间算法。具体步骤就不说了,给出C语言代码,有注释。源码: #include "stdio.h"<br />#include "stdlib.h"<br />#defi原创 2010-09-20 20:47:00 · 2496 阅读 · 1 评论 -
金币阵列问题
<br />问题描述:<br />有m*n(1 ≤ m, n ≤ 100)个金币在桌面上排成一个 m 行 n 列的阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。<br />金币阵列游戏的规则是: <br />1. 每次可将任一行金币翻过来放在原来的位置上; <br />2. 每次可任选 2 列,交换这 2 列金币的位置。 <br />本题要求对于给定的金币阵列初始状态和目标状态,编程计算按金币游戏规则,将金币阵列从初始状态变换到目标状态所需的最少变换次数。<原创 2010-09-23 21:26:00 · 1132 阅读 · 0 评论 -
序关系计数
<br />序关系计数问题问题描述:用关系“<”和“=”将3 个数A、B和C依序排列时有13 种不同的序关系: A=B=C,A=Bi-1时, A[i,j]=0,显然我们有A[i,0]=1,i=1~n。当用j个"<"号来连接i个数时,具有如下的形式: S1 < S2 < ...... < Sj+1 Sk(1≤k≤j+1) 中的各数用等号"="连接。对于A[i,j],考虑在i-1个数的基础上增加一个数的情形。 新增加的数x可以在上式 Sk(1≤k≤j+1) 中任何一个中, 当x∈Sk,且i-1个数时已有j个"<转载 2011-01-06 10:14:00 · 640 阅读 · 0 评论