专题总结:算法
文章平均质量分 93
buxizhizhou530
这个作者很懒,什么都没留下…
展开
-
小规模素数表的构造方法及相关
一、判断素数可以写一个判断素数的谓词函数,即从2开始枚举到sqrt(x)(包括)。但这里参数x不能过大,过大就会因为i*i乘积过大溢出。Code:int is_prime(int x){//do NOT use this if x is very large if(x==1) return 0; for(int i=2;i*i<=x;++i) if(x%i==0)原创 2015-03-01 11:47:26 · 771 阅读 · 0 评论 -
回溯法
只要能把待求解的问题分成不太多的步骤,每个步骤又只有不太多的选择,都可以考虑应用回溯法。想象一棵包含 L 层,每层的分支因子均为b的解答树,它的结点数高达1+b+b^2+...+b^(L-1)=(b^L-1)/(b-1)。无论是b太大还是L太大,结点数都会是天文数字。一、八皇后问题最简单的思路是,从8X8=64个格子中选一个子集,使得满足要求。正是子集枚举问题。然而,规模是2^64个。原创 2015-03-02 00:32:32 · 1906 阅读 · 0 评论 -
子集生成
子集生成:给定一个集合,枚举它所有可能的子集。(简单起见,这里假设集合中没有重复元素)一、增量构造法思路:一次选出一个元素放到集合中。Code:void print_subset1(int n, int *A, int cur){//增量构造法 for(int i=0;i<cur;++i) printf("%d ",A[i]); printf("\n");原创 2015-02-26 13:34:48 · 1450 阅读 · 0 评论 -
枚举排列
输入正数n,按字典序从小到大的顺序输出n个数的所有排列。两个序列的字典序大小关系等价于从头开始第一个不相同位置处的大小关系。一、生成1~n的排列思路:void print_permutation(序列A,集合S){ if ( S 为空 ) 输出序列 A; else 按照从小到大的顺序依次考虑 S 的每个元素 v { prin原创 2015-02-27 00:00:36 · 1941 阅读 · 1 评论