- 博客(110)
- 收藏
- 关注
转载 堆——神奇的优先队列(上)
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢? 假如有14个数分别是9
2014-08-17 17:00:01
603
转载 队列
新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一
2014-08-17 16:58:48
523
转载 堆——神奇的优先队列(下)
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;for(i=1;i){ n++; h[ n]=a[ i]; //或者写成scanf("%d",&h[ n]);
2014-08-17 16:55:40
547
转载 桶排序
最快最简单的排序——桶排序 在我们生活的这个世界中到处都是被排序过的。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老师要将同
2014-08-17 16:54:48
521
转载 最短路算法
上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下。
2014-08-17 16:54:03
476
转载 八一八快速排序
上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。
2014-08-17 16:52:40
881
转载 从头到尾彻底理解KMP(2014年8月15日版)
从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱,如此,留言也是“骂声”一片。所以一直想找机会重新写下KMP,但苦于一
2014-08-17 09:30:59
570
转载 数组模拟邻接表
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。 4 51 4 94 3 81 2 52 4 61 3 7 第一行两个整数n m。n表示顶点个数(顶点编号为1~n),m表示边的条数。接下来m行
2014-08-17 09:27:20
557
转载 map的详细用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有
2014-08-15 10:57:41
485
原创 Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)
第八次多校的一道题,当时没做出来,后来经过大牛指点了一下顿悟了
2014-08-14 20:23:42
905
原创 Hdu2473 - Junk-Mail Filter - 并查集
这道题一开始本来想用直接改变p[i],使得p[i]=i,发现虽然路径压缩过了,但是实际上i下面所连接的点并没有压缩到i原本的根上,如图而实际上应该是所以就需要让1这个点依旧存在于这棵树里边,另外用一个变量来表示1这个点已经被删除掉实际上右边的点一开始也是由sham构成的树,因为初始化的sham数组都为本身,只有当删除过某个点(图中为删除1
2014-08-14 18:35:04
452
原创 Hdu1176 - 免费馅饼 - 动态规划
数塔变形题第0秒 5 第1秒 4 5 6第2秒 3 4 5 6 7第3秒 2 3 4 5 6 7 8第4秒 1 2 3 4 5 6 7 8 9第
2014-08-10 14:07:27
516
转载 STL(Standard Template Library)
一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:a
2014-08-10 13:12:56
438
转载 C++ STL简介
目录(?)[+]一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三
2014-08-10 13:11:51
400
转载 C语言中的转义字符
C语言中的转义字符在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、c、$、+和空格符等都是可显示字符。另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。其实,这类字符是为控制作用而设计的,故称为控制字符。
2014-08-10 13:03:28
811
转载 C语言中常用文件读写命令总结
fopen函数原型:FILE * fopen(const char * path,const char * mode);mode有下列几种形态字符串:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rw+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立
2014-08-10 12:59:44
689
转载 C 语言中常用 string 函数简介
@函数名称: strdup 函数原型: char *strdup(const char *s) 函数功能: 字符串拷贝,目的空间由该函数分配 函数返回: 指向拷贝后的字符串指针 参数说明: src-待拷贝的源字符串 @函数名称: strcpy 函数原型: char* strcpy(char* str1,char* str2); 函数功能:
2014-08-10 12:58:22
552
转载 数据结构:图的实现--邻接表
图的实现:邻接表当图中的边数较少时,用邻接表来实现图结构,则会浪费很多内存空间。因此,考虑另一种实现图结构的方法:邻接表。在邻接表中主要有两种节点结构体:顶点节点边节点直接看代码类定义[cpp] view plaincopy#include #include usin
2014-08-10 12:56:50
754
转载 c语言中常用数据类型的字节数
转自:http://wuyuans.com/2012/06/the-length-of-data/数据类型的长度跟编译器和系统有关,比如在windows下的32位编译器下的数据类型字节数:char :1个字节char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。)short int : 2个字节int: 4个字节unsign
2014-08-10 12:56:47
565
转载 图的邻接表存储结构
程序调用入口:[csharp] view plaincopyprint?using System; namespace Graphic_AdjacencyList { internal class Program { private static void Main(string[
2014-08-10 12:53:57
553
转载 栈和队列
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈项元素在顺序栈中的位置。通常的习惯做法是以top=0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C作描述语言时,如此设定会带来很大不便;另一方面由于栈在使用过程中所需最大空间的大小很难估计,因此,一般来说,在初始化设空栈时不应限定栈的最大容量。一个较合理的做法是:先为栈分配一个基本
2014-08-10 12:49:51
512
转载 C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没
2014-08-10 12:49:22
397
转载 关于各种输入输出问题
关于ACM的输入输出(一)写给第一次参加现场赛的同学们一般来说ACM的现场赛会规定输入输出或者是文件输入标准输出也可能是文件输入文件输出如果没有规定的话那么一般就是标准的输入输出了那说一下输入输出的重定向一般用下面两种方法c++常用:#include ifstream filein("data.in"); // 定
2014-08-10 12:42:13
1194
原创 POJ3230 - Travel - 动态规划
状态转移方程是dp[i][j]=max(dp[i][j],dp[i-1][k]+inc[i][j]-co[k][j]);#include#includeint dp[105][105];//第i天在j城市的最大收入int inc[105][105];//i天在j城市的收入int co[105][105];//从i城市到j城市花费int main(){ int m,n; whil
2014-08-10 12:37:39
498
原创 Hdu1159 - Common Subsequence - 动态规划
最基本的LCS,懂了原理很简单#include#includeint dp[1000][1000];int main(){ char str1[1000]; char str2[1000]; while(scanf("%s %s",str1+1,str2+1)!=EOF) { int i,j; int t1=strlen(str1); int t2=strlen(s
2014-08-10 10:20:26
412
原创 Hdu1059 - Dividing - 动态规划
这道题主要还是二分比较重要,否则TLE#include#includeint dp[100000];int v[7];int main(){ int cas=0; while(scanf("%d%d%d%d%d%d",&v[1],&v[2],&v[3],&v[4],&v[5],&v[6])!=EOF) { cas++; if(!
2014-08-09 17:04:13
633
原创 Hdu1407 - 测试你是否和LTC水平一样高 - 水题
#include#includeint LTC[5][10005];int main(){ int mark[10005]; memset(mark,0,sizeof(mark)); for(int i=1;i*i<=9998;i++) { for(int j=1;j*j<=9998;j++) { for(int k=1;k*k<=9998;k++) {
2014-08-09 16:16:48
580
原创 Hdu2523 - SORT AGAIN - 哈希
水题,和hdu1280互为逆向,不过这个是多个相同数字算一个。我是hdu1280题解的传送门:
2014-08-09 15:21:55
494
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人