C++
文章平均质量分 97
qeesung
我是一个扣腚大汉...
展开
-
散列表之完美散列
散列表之完美散列完美散列perfect hashing两级散列法gperf工具来自动生成完美散列函数gperf的安装gperf关键字文件的书写格式gperf应用举例注意本文中的所有代码你都可以在这里:https://github.com/qeesung/algorithm/tree/master/chapter11/11-5/gperf(这里会及时更新)或者是这里:http://dow原创 2015-07-27 11:56:54 · 5901 阅读 · 0 评论 -
桶排序_BUCKETSORT
桶排序_BUCKETSORT桶排序的思想桶排序的代码编写总结桶排序_BUCKETSORT假设你有五百万份试卷,每份试卷的满分都是100分,如果要你对这些试卷按照分数进行排序,天噜啦,五百万份试卷啊,快速排序?堆排序?归并排序?面对这么多的数据,平均下来上面的每一种一种算法至少都要花费nlogn=5000000log5000000=111267433nlogn=5000000log5000000原创 2015-05-20 13:18:36 · 4432 阅读 · 0 评论 -
计数排序_COUNTINGSORT
计数排序_COUNTINGSORT我们之前讲过四种基本的排序方法:《快速排序_QUICKSORT》:http://blog.csdn.net/ii1245712564/article/details/45749061 《堆排序_HEAPOSRT》http://blog.csdn.net/ii1245712564/article/details/45534625 《归并排序_MERGESORT》:原创 2015-05-16 15:16:31 · 1011 阅读 · 0 评论 -
堆排序
堆排序堆的基础知识我们已经在《堆的基础知识》:http://blog.csdn.net/ii1245712564/article/details/45505799里面介绍过了,这次我们将介绍堆的用途之一:堆排序在诸多的排序算法里面里面,堆排序算是比较快速的了,排序时间消耗为:O(nlogn)O(nlogn),虽然相对于快速排序来说慢了一点点,但是就对于堆的特有性质而言(最大堆堆顶元素为最大元素,最小原创 2015-05-06 13:12:28 · 1734 阅读 · 0 评论 -
堆的基础知识
堆堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。 假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知: - PARENT(i) = i/2 - LEFTCHILD(i) = 2*i - RIGHTCHILD(i) = 2*i+1就如下图表现原创 2015-05-05 18:01:32 · 3151 阅读 · 0 评论 -
快速排序_QUICKSORT
快速排序快速排序的基本思想快速排序的代码实现快速排序的性能分析快速排序快速排序是一个最坏情况时间复杂度为Θ(n2)\Theta(n^2),最好情况下时间复杂度为O(nlogn)O(nlogn)的排序算法。虽然在最坏情况下的时间复杂为n2n^2,但是快速排序的平均性能非常好,只有Θ(nlogn)\Theta(nlogn),而且我们也可以主动避免快速排序的最差的情况,所以快速排序在排序作业中还是原创 2015-05-15 20:09:06 · 2014 阅读 · 0 评论 -
活动选择问题(贪心算法vs动态规划)
活动选择问题贪心算法vs动态规划基础知识1-1动态规划1-2贪心算法1-3贪心算法vs动态规划活动选择问题描述活动选择问题最优子结构活动选择问题算法设计4-1贪心算法之选择最早结束活动4-1-1递归贪心算法4-1-2迭代的方式进行4-2贪心算法之选择最短时长活动4-3动态规划方法实现4-3-1自上而下的实现4-3-2自下而上的实现结论活动选择问题(贪心算法vs动态规划)1.基原创 2015-05-01 16:25:46 · 20939 阅读 · 7 评论 -
C++解析JSON(jsonCpp)
C++解析JSON(jsonCpp)JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript,原创 2015-05-11 23:33:54 · 3858 阅读 · 0 评论 -
贪心算法之赫夫曼编码
贪心算法之赫夫曼编码编码基本介绍等长编码变长编码前缀码赫夫曼编码的构造贪心选择是安全的最优子结构编码实现编码树节点TreeNode优先队列的实现赫夫曼编码的构建maincc和Makefile编译运行贪心算法之赫夫曼编码赫夫曼编码(Huffman coding)是一种编码方式,赫夫曼编码是变长编码的一种。可以有效的压缩数据,一般可以节约20%~90%的空间,这一般是由文件的数原创 2015-05-11 15:35:36 · 2956 阅读 · 0 评论 -
优先队列
优先队列我们在之前讲过的《堆的基础知识》和《堆排序》之后,我们来讲讲最大堆和最小堆的具体应用优先队列!优先队列基础知识我们来看看这样的场景,给定你一组数据,要你在这组数据里面找到最大的那个数据,你要怎么做?你可能会说直接遍历一次就行啦,运行时间也就O(n)O(n),但是如果要求你在这堆数据里面找到最大的,然后删除,再在剩下的元素里面找到最大的,那还是要遍历一般所有数据。那有没有其他快速的方法呢?原创 2015-05-07 20:31:50 · 4594 阅读 · 0 评论 -
栈_STACK的实现
栈_STACK栈的基本操作栈的代码实现栈的C语言实现栈的C实现结论本文中的完整代码你可以在这里: https://github.com/qeesung/algorithm/tree/master/chapter10/10-1/栈或者这里:顺序栈的实现:http://download.csdn.net/detail/ii1245712564/8744663 链式栈的实现:http://原创 2015-05-29 11:58:22 · 1719 阅读 · 0 评论 -
散列表之链接法
散列表之链接法散列表的定义散列表的基本操作散列表的编码实现散列表的设计主测试文件编译运行结论注意: 本文中的所有代码你可以在这里 https://github.com/qeesung/algorithm/tree/master/chapter11/11-2/hashTable(这里会及时更新) 或者这里 http://download.csdn.net/detail/ii124原创 2015-06-14 12:38:37 · 4005 阅读 · 0 评论 -
散列表之开放定址法
散列表之开放定址法散列表的基本操作插入操作_INSERT查找操作_SEARCH删除操作_DELETE散列表的探查方法probe methods散列表探查的定义线性探查二次探查双重散列总结注意: 本文中所有的代码你可以在这里:https://github.com/qeesung/algorithm/tree/master/chapter11/11-4/openAddressing原创 2015-07-12 00:13:46 · 11534 阅读 · 0 评论 -
散列表之直接寻址表
散列表之直接寻址表直接寻址表的定义直接寻址表的操作直接寻址表的代码实现dataNode的定义直接寻址表的定义测试文件编译运行总结注意: 本文中的所有代码你可以在这里: https://github.com/qeesung/algorithm/tree/master/chapter11/11-1/directAddr(这里的会及时更新) 或者这里: http://downloa原创 2015-06-13 13:10:34 · 5034 阅读 · 1 评论 -
选择算法总结
选择算法选择算法之选取最大数或最小数选取最大数或最小数代码实现选择算法之选取最大数和最小数选取最大数和最小数代码实现选取最大数和最小数代码优化快速选择算法快速选择算法分析快速选择算法编码实现快速选择算法代码优化BFPRT选择算法BFPRT选择算法主元选择BFPRT选择算法性能分析BFPRT选择算法代码实现注:本文中的所有代码都在这里选择算法选择算法就是用来解决在一堆数里面选原创 2015-05-24 15:13:33 · 10219 阅读 · 0 评论 -
散列表之散列函数
散列表之散列函数什么是好的散列函数将关键字转化为自然数散列函数的三种设计方法除法散列法乘法散列法全域散列法散列表之散列函数我们在之前的文章《散列表之链接法》中已经提到过,散列函数是散列表的一个难点,一个好的散列可以很大程度上提升散列表的查找和删除操作的速度,而一个设计差劲的散列表的,查找和删除操作的运行时间将和链式链表一样,将达到O(n)O(n)。所以设计一个表现良好的散列函数尤为重要!原创 2015-06-26 13:38:20 · 4362 阅读 · 1 评论 -
链表_LINKLIST
链表_LINKLIST链表的结构链表节点_LinkNode链表节点连接链表的基本操作节点的插入_INSERTNODE节点的删除_REMOVENODE访问链表元素_VISITNODE链表基本操作接口_INTERFACE链表的编码实现链表总结本文中的所有代码都可以在这里: https://github.com/qeesung/algorithm/tree/master/chapt原创 2015-06-05 20:44:50 · 2967 阅读 · 0 评论 -
基数排序_RADIXSORT
基数排序_RADIXSORT基数排序的思想基数排序算法实现基于计数排序的基数排序基于最优桶排序的基数排序基数排序_RADIXSORT基数排序是一种基于计数排序_COUNTINGSORT或者是最优桶排序(当然也可以基于其他排序算法,只不过计数排序对于基数排序来说应该是最快的了,因为二者的拼音都是jishupaixu,哈哈)的一种可以在线性时间O(n)O(n)完成的排序算法。博主在做基数排序的原创 2015-05-19 17:36:21 · 1480 阅读 · 0 评论 -
队列_QUEUE
队列_QUEUE队列的基本操作队列的代码实现本文中的所有代码你可以在这里:https://github.com/qeesung/algorithm/tree/master/chapter10/10-1/队列或者是这里:http://download.csdn.net/detail/ii1245712564/8753843找到!队列_QUEUE队列_QUEUE是一种特殊的线性表,特殊之处在于它只允原创 2015-05-30 15:34:52 · 1316 阅读 · 0 评论 -
0-1背包问题与分数背包问题
0-1背包问题与分数背包问题问题描述问题分析之分数背包代码设计之分数背包问题问题分析之0-1背包问题代码设计之0-1背包问题动态规划算法之间的差别0-1背包问题与分数背包问题我们在文章《贪心算法原理》:http://blog.csdn.net/ii1245712564/article/details/45369491中提到过动态规划和贪心算法的区别。以及两个经典的例子:0-1背包问题和原创 2015-04-30 16:50:15 · 11327 阅读 · 0 评论 -
贪心算法之活动分配问题
贪心算法之活动分配问题在此之前,我们还讨论过贪心算法的活动选择问题,活动选择问题里面的选择策略在这篇文章里面作为贪心选择策略用到。好吧,让我们进入主题。问题描述有一个活动集合S={a1,a2,a3,...an}S=\lbrace a_1,a_2,a_3,...a_n \rbrace,每一个活动aia_i都有一个开始时间sis_i和结束时间fif_i,那么活动aia_i占用的时间段为[si,fi)[s原创 2015-04-27 17:51:11 · 3921 阅读 · 0 评论 -
贪心算法原理
贪心算法原理贪心算法就是做出一系列选择来使原问题达到最优解。在每一个决策点,都是做出当前看来的最优选择,比如在活动选择问题里面,我们总是在一个问题的基础上选择结束时间最早的活动,之后再在剩下活动的基础上选出结束时间最早的活动,以此类推,直到没有活动可以进行选择。但是遗憾的是这种算法并不是总能得到最优解,并且是否能得到最优解还取决于对于贪心策略的选择。一般来说,设计贪心算法涉及到下面几个步骤: 1原创 2015-04-29 17:31:47 · 9339 阅读 · 0 评论 -
C++标准转换运算符static_cast
原文地址:http://www.cnblogs.com/ider/archive/2011/07/31/cpp_cast_operator_part4.htmlstatic_cast (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量转载 2015-03-15 16:32:44 · 481 阅读 · 0 评论 -
C++标准转换运算符dynamic_cast
原文地址:http://www.cnblogs.com/ider/archive/2011/08/01/cpp_cast_operator_part5.htmldynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传转载 2015-03-15 16:33:18 · 432 阅读 · 0 评论 -
C++标准转换运算符const_cast
原文地址:http://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.htmlC++标准转换运算符const_cast前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言转载 2015-03-15 16:10:00 · 492 阅读 · 0 评论 -
C++查缺补漏之头文件
在C++里面,支持所谓的"分别编译"原创 2015-01-25 13:32:39 · 927 阅读 · 0 评论 -
C++查缺补漏之const限定符及引用
C++查缺补漏之const限定符及引用原创 2015-01-23 15:19:01 · 962 阅读 · 0 评论 -
C++查缺补漏之变量
变量提供了程序可以操作的有名字的存储区,要是在汇编时代,我们是直接操作寄存器和内存地址的,那么现在就把底层的寄存器和内存地址抽象出来,取了一个别名,通过这个别名也可以操作这块内存原创 2015-01-14 12:37:33 · 1083 阅读 · 0 评论 -
C++查缺补漏之变量和基本类型
变量和基本类型原创 2015-01-09 13:48:26 · 788 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast
原文地址:http://www.cnblogs.com/ider/archive/2011/07/30/cpp_cast_operator_part3.htmlreinterpret_cast (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。转载 2015-03-15 15:18:41 · 559 阅读 · 0 评论 -
C++查缺补漏之异常
1.什么是异常?异常就是计算机程序在运行过程中发生的不正常的行为,比如计算机的内存耗尽,计算发生溢出,或者是其他有碍于计算机正常运行的情况都可以视为异常,为了让程序按照我们的意愿能够正常的运行,我们就需要进行异常处理。就像我们在疾驰的汽车上,前面突然出现了一块巨石,要是我们不想摔得头破血流,那么就要避让这个突然出现巨石。2.异常处理使用异常处理,程序中独立开发的各部分能够就程序原创 2015-03-25 10:08:14 · 780 阅读 · 0 评论 -
贪心算法之活动选择问题
贪心算法之活动选择问题我们在之前的文章里面已经提到过动态规划的方法来求解最优的问题,但是就是因为动态规划太过于强大,像一把瑞士军刀,在一些比较特殊的问题上再使用动态规划的话,就有点用脸盆刷牙的感觉了,而且动态规划运行时间也比较长。对于一些特殊的最优解问题不是很适合,于是我们就有了贪心算法的出现。 贪心算法的座右铭:每一步都尽量做到最优,最终结果就算不是最优,那么也是次最优 从上面的描述中知道,贪原创 2015-04-25 14:03:37 · 6177 阅读 · 0 评论 -
动态规划之最优二叉搜索树
我们在之前也讨论过动态规划的例子: 动态规划原理:http://blog.csdn.net/ii1245712564/article/details/45040037 钢条切割问题:http://blog.csdn.net/ii1245712564/article/details/44464689 矩阵链乘法问题:http://blog.csdn.net/ii1245712564/arti原创 2015-04-20 15:41:47 · 6410 阅读 · 0 评论 -
动态规划之最长公共子序列
我们之前提到过过动态规划的几个经典问题: 动态规划原理:http://blog.csdn.net/ii1245712564/article/details/45040037 钢条切割问题:http://blog.csdn.net/ii1245712564/article/details/44464689 矩阵链乘法问题:http://blog.csdn.net/ii1245712564/ar原创 2015-04-15 10:48:06 · 998 阅读 · 0 评论 -
动态规划原理
动态规划原理最优子结构重叠子问题重构最优解动态规划原理我们在之前的文章里面提到过两个问题: 钢条切割问题:http://blog.csdn.net/ii1245712564/article/details/44464689 矩阵链乘法问题:http://blog.csdn.net/ii1245712564/article/details/44464689仔细观察这两个问题,我们发现他们都有原创 2015-04-14 11:58:05 · 8322 阅读 · 0 评论 -
动态规划之矩阵链乘法
虽然我们在《动态规划之钢条切割》:http://blog.csdn.net/ii1245712564/article/details/44464689里面已经介绍过动态规划的相关知识,这里还是提一下动态的两大特征:1.最优子结构,原问题的解是在子问题的最优解的基础上建立起来的2.重叠子问题,即在不断求解子问题的过程中会产生相同的子问题,而不是一直产生新的子问题原创 2015-04-06 10:03:44 · 1271 阅读 · 0 评论 -
C++查缺补漏之数组与指针
1.数组的定义和初始化数组的维数必须使用大于等于一的常量表达式来定义,此常量表达式只能包含整型字面值常量,枚举类型,或者用常量表达式初始化的整型,非const变量和到运行阶段才知道其值的const变量都不能用来定义数组的维数/** ok 字面值常量 */int array[10];/** ok 枚举类型*/enum ARRAYSIZE{ SIZE1 = 10,原创 2015-03-14 15:56:01 · 4323 阅读 · 0 评论 -
C++查缺补漏之异常(续)
此文是继续文章《C++查缺补漏之异常》:http://blog.csdn.net/ii1245712564/article/details/446178811.异常的重新抛出可能单个catch不能完全处理一个异常,于是我们需要将这个其他具有更强处理能力的catch进行处理,那么这个异常就不止经过一个catch了,需要将异常重新抛出,抛出给其他的处理代码继续处理,这里用到的语句就是一个没有参原创 2015-03-26 22:58:16 · 655 阅读 · 0 评论 -
QT状态机
今天看见一篇将Qt状态机的好文,特地转载,原文出处:http://blog.csdn.net/fuyajun01/article/details/6106201状态机框架提供了创建和执行状态图的一些类.这些概念和表示都是基于Harel状态图中的一些概念和记法.它也是UML状态图表的基础.状态机执行的语义是基于状态图XML(SCXML). 状态图提供了一种图形化的方式来对一个系统建模,从转载 2015-03-27 15:13:15 · 2365 阅读 · 0 评论 -
Qt的信号与槽的工作机制
Qt众所周知的就是他的信号和槽的机制,但是它是怎么工作的呢?在这篇博文中,我们将深入探索一下信号与槽机值里面的的QObject与QMetaObject底层是如何实现的。翻译 2015-01-06 18:54:42 · 1913 阅读 · 2 评论