算法
灰黑飞
用智慧的程序写出美好的未来。
展开
-
set与map和pair容器
set与map和pair容器首先来看看set集合容器:set集合容器实现了红黑树的平衡二叉树数据结构,在插入元素时它会自动调整二叉树的排列,把该元素放到适当的位置,并且保证左右子树平衡。平衡二叉检索树采用中序遍历算法。 对于set,vector,map等等,它们的前向迭代器定义是这样的(以set为例):set::iterator it;for(it=s.begin();it原创 2014-07-23 15:47:58 · 583 阅读 · 0 评论 -
卷包裹算法
卷包裹算法一.凸集&凸包(下文中所有的集合 若不作特殊说明 都是指欧氏空间上的集合)凸集(Convex Set):任意两点的连线都在这个集合内的集合就是一个凸集.A set in Euclidean space is convex set if it contains all the line segments connecting any pair of its原创 2014-08-15 16:39:26 · 1345 阅读 · 0 评论 -
hdu 1007 求最近点对
Quoit DesignTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23284 Accepted Submission(s): 6055Problem DescriptionHave you ever pla原创 2014-08-17 19:46:29 · 555 阅读 · 0 评论 -
二分匹配
二分图:给定一个图G=(V, E),其中V是该图的顶点集合,E为该图的边集。如果该图的所有顶点能够分成两个集合X,Y,并且这两个集合内的任意两个点之间都没有边相连,则可称这样的图为二分图。最大匹配:在一个二分图中找出尽量多的边,使得这些边中任意两条边之间都没有公共点,找出来的最多的边数就是该二分图的最大匹配。最大独立集:在一个二分图中找出尽量多的点,使得这些点中任意两个点之间都原创 2014-08-17 19:34:19 · 338 阅读 · 0 评论 -
getchar()的用法
1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Ta原创 2014-11-08 16:45:15 · 484 阅读 · 0 评论 -
多重背包二进制分解思想
多重背包转换成01背包问题就是多了个初始化,把它的件数C用分解成若干个件数的集合,这里面数字可以组合成任意小于等于C的件数,而且不会重复,之所以叫二进制分解,是因为这样分解可以用数字的二进制形式来解释比如:7的二进制7 = 111它可以分解成001 010 100这三个数可以组合成任意小于等于7的数,而且每种组合都会得到不同的数15 = 1111 可分解成0转载 2014-10-21 20:01:20 · 607 阅读 · 0 评论 -
卡特兰数
卡特兰数前几项为: 1, 1, 2, 5, 14,42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440,9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420,24466267020, 91482563640, 343059613650, 12899原创 2014-10-02 10:07:37 · 418 阅读 · 0 评论 -
怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想
K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套”。如果不考虑字符常量和字符串常量,问题确实很简单。只需要去掉//和/* */的注释。考虑到字符常量'\''和字符串常量"he\"/*hehe*/",还有类似/_stdio.h>的头文件路径符号以及表达式5/3中的除号/,以及情况就比较复杂了。转载 2017-02-25 21:17:10 · 5150 阅读 · 1 评论 -
词法分析器生成工具flex
1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。 +------------+ +------------+ +----------------+ | 输入文件*.l |------>|flex工具 |----转载 2017-03-22 20:27:25 · 840 阅读 · 0 评论 -
KMP字符串模式匹配详解
KMP字符串模式匹配详解来自CSDN A_B_C_ABC 网友KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一. 简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int po转载 2014-08-14 22:41:15 · 284 阅读 · 0 评论 -
容器搜索算法:lower_bound, uper_bound
本文主要是验证,容器搜索算法的使用:lower_bound, uper_boundC++ STLiterator lower_bound( const key_type &key );iterator upper_bound( const key_type &key );2函数作用iterator lower_bound( const key_type &key ): 返回原创 2014-07-23 15:51:57 · 950 阅读 · 0 评论 -
set容器总结
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让原创 2014-07-23 20:58:32 · 450 阅读 · 0 评论 -
背包问题的转化
以上涉及的各种背包问题都是要求在背包容量(费用)的限制下求可以取到的最大价值,但背包问题还有很多种灵活的问法,在这里值得提一下。但是我认为,只要深入理解了求背包问题最大价值的方法,即使问法变化了,也是不难想出算法的。例如,求解最多可以放多少件物品或者最多可以装满多少背包的空间。这都可以根据具体问题利用前面的方程求出所有状态的值(f数组)之后得到。还有,如果要求的是“总价值最原创 2014-08-01 10:03:25 · 393 阅读 · 0 评论 -
unique函数
unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。他是c++中的函数,所以头文件要加#include,具体用法如下: int num[100]; unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重原创 2014-07-30 12:31:43 · 526 阅读 · 0 评论 -
能被1, 2 ,3 ,4 ,5, 6 ,7 ,8 ,9 分别整除的数有什么规律
1,1就无所谓了,是个整数就能被1整除。2,偶数都能被2整除。3,各位数相加和能被3整除,数就能被3整除,如45,4+5=9,9能被3整除,所以45就能被3整除。4,整数的最后2位能被4整除,数就能被4整除,如312,12能被4整除,所以312就能被4整除。5,个位是0或5的都能被5整除。6,同时达到2和3的整除要求的就行。7,【参照“卧竹轩主”的说原创 2014-08-05 18:25:59 · 8948 阅读 · 0 评论 -
背包
首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔。你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动到3,这是一个直观的关系,但是想列举出来是很难的,也许当层数n=3时还可以模拟下,再大一些就不可能了,所以,诸如递归,动态规划之类的,不能细想,只能找局部关系。 背包的基本模型就是给你一个容量为V的背包原创 2014-08-01 10:01:32 · 354 阅读 · 0 评论 -
sscanf()函数的用法
函数原型: Int sscanf( const char * src, const char * format, ...);int scanf( const char * format, ...);这两个函数很相似,只是第一个函数以src作为输入,而第二个函数以标准输入STDIN读取输入;format 是格式控制字符串,它包含控制字符(如:%d,%i,%s等),空白字符(如:空格、制表符原创 2014-08-20 13:41:33 · 390 阅读 · 0 评论 -
造成segment fault,产生core dump的可能原因
一 造成segment fault,产生core dump的可能原因1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, s原创 2014-08-12 20:32:36 · 424 阅读 · 0 评论 -
DBSCAN聚类算法
一、算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法,相比其他的聚类方法,基于密度的聚类方法可以在有噪音的数据中发现各种形状和各种大小的簇。基于密度的聚类是寻找被低密度区域分离的高密度区域,这些高密度区域就是一个一个的簇,这里的密度指的原创 2017-12-15 17:14:16 · 628 阅读 · 0 评论