算法
文章平均质量分 84
buxizhizhou530
这个作者很懒,什么都没留下…
展开
-
二分查找
二分查找算法基本思想二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.转载 2014-05-10 17:45:00 · 987 阅读 · 0 评论 -
枚举排列
输入正数n,按字典序从小到大的顺序输出n个数的所有排列。两个序列的字典序大小关系等价于从头开始第一个不相同位置处的大小关系。一、生成1~n的排列思路:void print_permutation(序列A,集合S){ if ( S 为空 ) 输出序列 A; else 按照从小到大的顺序依次考虑 S 的每个元素 v { prin原创 2015-02-27 00:00:36 · 1914 阅读 · 1 评论 -
子集生成
子集生成:给定一个集合,枚举它所有可能的子集。(简单起见,这里假设集合中没有重复元素)一、增量构造法思路:一次选出一个元素放到集合中。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 · 1426 阅读 · 0 评论 -
小规模素数表的构造方法及相关
一、判断素数可以写一个判断素数的谓词函数,即从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 · 760 阅读 · 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 · 1868 阅读 · 0 评论 -
深入浅出并查集算法(Union-Find)
转自此处。感觉讲并查集算法讲得挺好的,博主应该是参考书里内容,并结合了自己理解的。本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,转载 2015-03-09 22:33:32 · 639 阅读 · 0 评论 -
拓扑排序
拓扑排序:对有向图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面。如果图中存在有向环,则不存在拓扑排序,反之则存在。把不包含有向环的有向图称为有向无环图(Directed Acyclic Graph,DAG)。//因为查找的是有向边(u,v),所以在放置u之前需要把比u偏序大的所有的v放置好。//所以,所有元素的放置是从后往前放的。//用到的vis数组,vis[u]=原创 2015-02-04 20:09:21 · 734 阅读 · 0 评论 -
白书 - 拓扑排序 及 关于递归、coding的一些思考
题目:有n个变量,m个二元组(u,v),表示变量u小于变量v。将所有变量从小到大排列,给出满足条件的一个。思路:把“小于”关系看成有向边,得到一个有向图。任务就是把一个图的所有结点排序,使得每一条有向边(u,v)对应的 u 都排在 v 的前面。在图论中,这个问题称为拓扑排序topological sort。 不难发现:如果图中存在有向环,则不存在拓扑排序的解,反之则存在。我们把不包含有向环的原创 2014-08-31 14:24:39 · 1188 阅读 · 0 评论 -
给定二叉树的先序遍历和中序遍历,输出它的后序遍历序列
这里没再用到先申请大Node数组的方法了,想练练写动态内存分配和释放的,一次OK了,也没怎么出错啊,开心~方法二 - Code://给出一个二叉树的先序遍历和中序遍历,输出它的后序遍历//直接构造的方法白书已给出。这里是先递归构造二叉树,然后进行后序遍历。 #include#include #include#define MAXN 1000typedef struct nod原创 2014-08-26 13:10:09 · 6338 阅读 · 0 评论