算法设计
huhaihong
工作认真负责、有较强的沟通能力、较强的团队精神,能理性地分校与解决问题,有较强的动手和自学能力。 具有较广和扎实的专业知识,熟悉C/C ,JAVA语言,数据结构、编译原理、算法和操作系统原理。 有Linux 和 Windows 开发平台下C/C ,JAVA开发的经验。 有Linux、Apache、Tomcat、MyS
展开
-
用"埃拉托色尼筛"求质数
该算法一开始初始化一个2~n的连续整数序列,作为候选质数.然后,在算法的第一个循环中,它将类似4和6这样的2的倍数从序列中消去.然后,它指向列表中的下一数字-3,对将其倍数消去.该算法以这个方式不断做下去,直到序列中已经没有可消的元素为止. 需要注意的是,如果当前步骤中,我们正在消去p的倍数,那么第一个值得考虑的倍数是p*p,因为其他更小的倍数2p,……原创 2007-09-19 20:37:00 · 1113 阅读 · 0 评论 -
整数划分问题
#includeusing namespace std;int q(int n,int m){ if((n return 0; if((n==1) || (m==1)) return 1; if(n return q(n,n); if(n==m) return q(n,m-1)+1; return q(n,m-1)+q(n-m,m);}int main(){ int a;原创 2007-08-30 14:16:00 · 584 阅读 · 0 评论 -
棋盘覆盖
/*棋盘覆盖 2^k * 2^k个方格组成的棋盘,其中有一个特殊方格,然后用4种不同形态的L型骨牌覆盖给定的特殊 棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖. 用分治策略: 当k>0时,将2^k * 2^k棋盘分割为4个2^k-1 * 2^k-1子棋盘; 特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格.为了将这3个无特殊方格的子棋盘转化为 特殊棋盘,可原创 2007-08-30 14:09:00 · 655 阅读 · 0 评论 -
HeapPermute排序算法
#include#define NR 20int a[NR]; /*一个全局数组*/int m;void HeapPermute(int n){ int i,temp; if(n==1) { for(i=1;i printf("%d ",a[i]); printf("/n"); } else { for(i=1;i { HeapPermute(n-1);原创 2007-08-30 14:02:00 · 2241 阅读 · 1 评论 -
字典排序算法
/* 字典排序算法:排列按照增序排队,比如:123 132 213 231 312 321 算法:从右到左扫描一个当前的排列,寻找第一对连续的元素ai和ai+1, 并且aiai+2>...>an).然后在尾部寻找大于ai的最小 数字并将它放在位置i上.从i+1到n的位置以元素ai,ai+1,...,an的增序 进行填充.*/#include#define NR 20void Heap原创 2007-08-30 14:00:00 · 1768 阅读 · 0 评论 -
互质判断
/* 判断两个数是否互为质数算法:根据互质的概念,两个数最大公约数为1,它们就是互质的. 用展转想除法:求两个数的最大公约数,如果它为1,就说明它们互质,否则不是互质的*/#includeint isPrime(int m,int long n){ int temp,d3=1; if(n>m) { temp=m; m=n; n=temp; } while(d3!=0) { d3=m原创 2007-08-30 14:06:00 · 1206 阅读 · 0 评论 -
插值查找
/* 插值查找:数组是线性递增的,如果某次迭代处理的数组位于最左边元素A[L]和最右边元素A[R]之 间的一部分,沿着穿越点(L,A[L])和点(R,A[R])的直线分布的.*/#includeint main(){ int a[100],i,l,r,n,x,v; printf("Please enter the len of the array:"); scanf("%d",&n);原创 2007-08-30 14:03:00 · 855 阅读 · 0 评论 -
JohnsonTrotter排列算法
#include#includeusing namespace std;typedef struct { int val; int row; /*箭头指向,0表示指向左,1指向右*/}INTS;int maxmove(INTS *a,int n) /*找出最大的移动整数K的下标maxi*/{ int i,maxi=-1,max=0; if(a[0].row && a[0].v原创 2007-08-30 14:03:00 · 1537 阅读 · 1 评论 -
波瓦松的分酒趣题
某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?问题分析与算法设计 将12品脱酒用8品脱和5品脱的空瓶平分,可以抽象为解不定方程: 8x-5y=6其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的洒向12品脱的瓶中倒y次,最后在12品脱的瓶脱的瓶中原创 2007-08-30 13:57:00 · 2370 阅读 · 3 评论 -
几个常用的排序算法
1、冒泡排序: 将相邻两个数比较,将小的调到前头,冒泡排序是稳定的。void BubbleSort(int a[],int n){ int i,j,temp; for(i=0;i for(j=0;j { if(a[j+1] { temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } }}2、选择排序: 选择排序开始原创 2007-08-30 14:12:00 · 1074 阅读 · 1 评论 -
选择问题
/* 选择问题是求一个n个数列表的第k个最小元素的问题. 算法:把一个数组的元素分成两个子集:如果值P是两个分区的中轴,那么一个子集包含小于等于P的 元素,另一个子集包含那些大于等于P的元素. 先假设S是分区的分割位置.如果S=K,中轴P就是选择问题的解;如果S>K,整个列表的第K个最小元素 就是分区数组的左边部分的第K个最小元素;如果S*/#includeint Partiti原创 2007-08-30 14:11:00 · 664 阅读 · 0 评论 -
几个常用的查找算法
/* 有序数组二分查找算法函数sq_Dichotomy_Search0 参数描述: int array[] :被查找数组 int n :被查找数组元素个数 int key :被查找的关键值 返回值: 如果没有找到: sq_Dichotomy_Search0 = -1 否则原创 2010-04-25 00:19:00 · 685 阅读 · 0 评论 -
权限管理算法
<!-- @page { size: 21.59cm 27.94cm; margin: 2cm } PRE.western { font-family: "Nimbus Roman No9 L" } PRE.cjk { font-family: "Nimbus Roman No9 L" } P { margin-bottom: 0.21cm }原创 2008-10-06 10:34:00 · 1262 阅读 · 0 评论 -
称小球
问题:有12个球,其中一个质量与其他不一样,但不知是轻了还是重了,用天平测三次.将其质量不同的那个球测出来.答案:分成三组。 1。比较任意两组。如果平,则在第三组。此时先把四小球编号,分别是1,2,3,4。 先称1,2,如果(1)相等,拿出3与1称,如果再相等,4就是非标准的.如果不等,3就是非标准的.(2)如果1 如果不平,则第三组中的四个都是标准球。原创 2007-11-25 22:55:00 · 864 阅读 · 0 评论 -
模式计算
/* 模式计算:在给定的数字列表中最经常出现的一个数值称为模式.例如,对于5,1,5,7,6,5,7来说, 模式是5.*/#include#define NR 100int PresortMode(int *a,int n){ int i=0,maxlen=0,maxvalue,curvalue,curlen; while(i { curlen=1; curvalue=a[i]; w原创 2007-08-30 14:08:00 · 1275 阅读 · 0 评论