算法系列
文章平均质量分 60
chenhq1991
不是大牛,只想记录学习的过程
展开
-
循环和递归在算法中的应用
转自:http://blog.csdn.net/orbit/article/details/7585756一、递归和循环的关系 1、 递归的定义 顺序执行、循环和跳转是冯·诺依曼计算机体系中程序设计语言的三大基本控制结构,这三种控制结构构成了千姿百态的算法,程序,乃至整个软件世界。递归也算是一种程序控制结构,但是普遍被认为不是基本控制结构,因为递归结构在一般情况转载 2012-05-24 18:38:56 · 634 阅读 · 0 评论 -
c++头文件iomanip.h中 setw()、setprecision()、setbase
转自:http://z2403030202.blog.163.com/blog/static/40816034200891553750894/#include //不要用iostream.h ,会出现好多问题#include // io 流控制头文件, 主要是一些操纵用法如setw(int n),setprecision(int n)转载 2012-06-25 21:35:35 · 1852 阅读 · 0 评论 -
KMP算法
这篇文章主要是讲了 KMP 的代码实现,如果要更详细的了解KMP的思想,推荐:http://blog.csdn.net/chenhq1991/article/details/7830193转自:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html在介绍KMP算法之前,先介绍一下BF算法。一.BF算法转载 2012-08-04 14:00:30 · 530 阅读 · 0 评论 -
左移、右移
X >> n: (带符号位)右移n 位, 相当于除以2^n; 最高位补什么需要由原有的数据的最高位值而定如:6 >> 2 = (6 / 2^2) = (1.5) = 1;(1是最终结果) X >>> n:(不带符号位)右移n 位,最高位永远补0X 如: 6原创 2012-07-21 16:19:57 · 555 阅读 · 0 评论 -
Bitset 的用法
转自:http://www.cnblogs.com/bless/articles/1264549.html3.5.1 bitset的定义和初始化表3-6列出了bitset的构造函数。类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度转载 2012-07-18 14:11:31 · 957 阅读 · 0 评论 -
两个值交换
1、通过第三方变量,实际开发中容易想到的最基础的做法int n = 3;int m = 8;int temp = 0;temp = n;n = m;m = temp;2、不用第三方变量,当两个变量很大时,求和会超出范围,精度丢失int n = 3;int m = 8;n = n + m;//11 = 3 + 8,这个时候n = 11, m = 8m = n原创 2012-07-21 16:46:40 · 532 阅读 · 0 评论 -
笔试题集锦
1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之转载 2012-07-23 23:31:20 · 5317 阅读 · 0 评论 -
set 使用方法小结
转自:http://www.cppblog.com/huyutian/articles/107457.html/*set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,转载 2012-07-26 20:24:44 · 517 阅读 · 0 评论 -
C++中 string 的使用
--之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序中使用string类型,转载 2012-08-13 00:58:29 · 842 阅读 · 0 评论 -
KMP算法详解
这写得太好了,KMP算法我上网找了很多的文章,也看了《算法导论》,但都是看得云里雾里,理解能力不够好,但是这篇文章总算是让我了解一个大概了,爽爆心情如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。***************************正文************************************ 我们这里说的KMP不是拿来放转载 2012-08-04 15:22:02 · 922 阅读 · 0 评论 -
string assign 的用法
转自:http://www.cppblog.com/MemoryGarden/archive/2009/12/28/104244.aspx 1 // string::assign 2 #include iostream> 3 #include string> 4 using namespace std; 5 6 int main () 7 { 8 stri转载 2012-07-29 15:47:34 · 2435 阅读 · 0 评论 -
gets() 和 sets()
C语言编译系统提供了大量处理字符串的库函数,下面介绍几种常用的函数。使用字符串输入函数gets()和输出函数puts()时,要用#include命令将“stdio.h”头文件包含到源文件中。而使用其他的字符串处理函数时,要用#include命令将“string.h”头文件包含到源文件中。1. 字符串输入函数gets()调用gets()函数实现字符串的输入,其调用形式为:gets(字原创 2012-07-29 15:18:32 · 811 阅读 · 0 评论 -
error C2039: “iterator_category”: 不是“Degree”的成员
今天真的是十分郁闷,遇到这个名为error C2039: “iterator_category”: 不是“***”的成员,上网谷哥、度娘了一番,得到的结果全是说可能是用的某个名字与库中的重合了,结果试了整整的一个下午加晚上,验证了所有的名字之后,发现问题不是这样的!!!改后代码://vector deg;//用来描述从源点source到v的最短路径上权值的上界Degree* deg =原创 2012-07-03 23:10:45 · 6179 阅读 · 0 评论 -
STL 堆操作
转自:http://blog.sina.com.cn/s/blog_622118670100f0ma.htmlSTL里面的堆操作一般用到的只有4个:make_heap();、pop_heap();、push_heap();、sort_heap();他们的头文件函数是#include 首先是make_heap();他的函数原型是:void make_heap(fi转载 2012-07-04 11:35:06 · 805 阅读 · 0 评论 -
农夫、狼、羊过河问题
转自:http://blog.csdn.net/orbit/article/details/7563220题目描述:农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。 这个题目考察人的快速逻辑运算和短转载 2012-05-24 18:49:17 · 2325 阅读 · 0 评论 -
Strassen Algorithm
普通方法C11 =A11*B11+A12*B21C12=。。C21=。。。C22=。。。此递归公式为T(n)=8T(n/2)+O(n^2) 时间复杂度为O(n^3)Strassen方法的递推公式为: 1T (n) = c if n = 1 " src="http://www.cse.ohio-state.edu/~gurari/course/cse69转载 2012-05-25 01:19:02 · 3263 阅读 · 0 评论 -
图的基本算法(一、图的表示)
—————————————————————————————————————————————————搜索一个图是有序地沿着图的边访问所有顶点G(V, E), V用来表示图中的顶点, E用来表示图中的边;—————————————————————————————————————————————————当图为稀疏图(E 远小于 V^2)时用邻接表表示法比较紧凑;若是稠密图时,则通常用原创 2012-05-25 01:19:09 · 795 阅读 · 0 评论 -
图的基本算法(三、深度优先搜索)
————————————————————————————————————————————————— 深度优先搜索中,对于最新发现的顶点,如果它还有以此为起点而未探索到的边,就沿此边继续探测下去;当顶点v的所有边都已被探索过后,搜索将回溯到发现顶点v有起始点的那些边。这一过程一直进行到已发现从源顶点可达的所有顶点时为止; 如果还存在未被发现的顶点,则选择其中一个作为源顶点,并重复上述过程。原创 2012-05-25 01:18:20 · 522 阅读 · 0 评论 -
ACM经验
ACM比赛对于选手的要求,很简单,只有两点:算法和程序实现。当然一些队友的配合以及良好的心态都是一些很隐性的因素,这里只说如何提高这两块。算法方面:第一,要不断学习新算法,扩宽自己的知识面,不要怕难,不要怕麻烦,学习是在别人研究的基础上,如果这点做不好,也很难在更深的层次发展;第二,平时着重培养自己思考问题的能力,而不是拘泥在固有的算法和题目里,拿来一道题目,要有自己的一套思维转载 2012-05-25 01:18:52 · 683 阅读 · 0 评论 -
图的基本算法(二、广度优先搜索)
广度优先搜索是最简单的图搜索算法之一;在Prim 最小生成树算法和Dijkstra 单源最短路径算法中都采用了广度优先搜索的类似思想;—————————————————————————————————————————————————在给定图G = (V, E)和一个特定的源顶点s 的情况下,广度优先搜索系统的探索G 中的边,以其“发现”可以从s 到达的所有顶点,并计算s 到所有这些可达顶点原创 2012-05-25 01:18:38 · 597 阅读 · 0 评论 -
三只水桶等分水问题
转自:http://blog.csdn.net/orbit/article/details/6596521 算法系列之二: 三只水桶等分水问题 有一个容积为8升的水桶里装满了水,另外还有一个容积为3升的空桶和一个容积为5升的空桶,如何利用这两个空桶等分8升水?附加条件是三个水桶都没有体积刻度,也不能使用其它辅助容器。 这是一道经典题目,一般人都可以在一分转载 2012-05-24 18:45:57 · 4052 阅读 · 0 评论 -
求强连通分量的三种算法——Kosaraju, Tarjan, Gabow
就我所知,有三种时间复杂度为O(n)的方法可以求强连通分量,分别是Kosaraju、Tarjan和Gabow。Kosaraju算法的步骤为 对图G进行DFS,并按照遍历完成的先后顺序进行标号。将图G中所有的边反向得到G'。对G'进行DFS,每轮DFS都选择编号最大的点最为当前的遍历树的根。最后,遍历得到的森林就是SCC的集合。该算法的优点在于,最后得到的节点是按照拓扑序组织转载 2012-05-25 01:18:45 · 1373 阅读 · 0 评论 -
求质数表 素数筛求素数 效率比较 数论相关
转自:求质数表 素数筛求素数 效率比较 数论相关第一个是平时最常用的基本写法(还有一种写法是for(j=i*2;j第二个是以i*i为起点开始筛的,要注意浮点溢出!第三个不太好简洁地说清楚,详细请点击http://blog.csdn.net/dinosoft/article/details/5829550程序中途分别输出每次计算了的prime[500000],从而转载 2012-05-25 16:24:33 · 644 阅读 · 0 评论 -
克鲁斯卡尔算法(最小生成树)
转自:克鲁斯卡尔算法(最小生成树)#include #include using namespace std;typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][10];//邻接矩阵 int vexnum, arcnum;//顶点数和边数}MGraph;int LocateVex(MGraph G, stri转载 2012-05-26 19:50:13 · 581 阅读 · 0 评论 -
迪杰斯特拉算法(可打印最短路径)
转自:迪杰斯特拉算法(可打印最短路径)#include #include #include using namespace std;#define INFINITY 65535//无边时的权值#define MAX_VERTEX_NUM 10//最大顶点数typedef struct MGraph{ string vexs[10];//顶点信息 int arcs[10][1转载 2012-05-26 19:53:24 · 3379 阅读 · 0 评论 -
求数组b的最长不减子序列长度
从数组的第0个元素开始,顺序考察数组的每个元素,当数组的全部元素都被考察后才能求出数组的最长不减子序列。设数组为b,已考察了b[0]~b[i-1]的全部元素,求得当前最长的不减子序列长为k。当前正要考察b[i]是否会引起k值的增大,取决于b[i]是否会大于或者等于b[0]~b[i-1]中某个最长不减子序列的终元素。但需要注意,b[0]~b[i-1]中可能有多个长为k的不减子序列。很显然,在同样原创 2012-07-31 13:43:12 · 2377 阅读 · 0 评论