C++
文章平均质量分 78
王炎林
这个作者很懒,什么都没留下…
展开
-
动态规划解决背包问题
利用动态规划求解背包问题 动态规划算法的思路如下: 动态规划算法通常用于求解具有某种最优性质的问题。其基本思路是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。一般会用一个表来记录所有已解的子问题的答案。 这里要解决的背包问与用贪心算法实现的背包问题不同,这里是0-1背包问题。即,一个背包要么放在袋子中,要么不放在袋子中,不能够部分放入。原创 2012-10-29 21:02:16 · 818 阅读 · 0 评论 -
const与重载函数
最近读别人的帖子遇到一个很有趣的问题,兴趣所致便对此略微做了一些讨论。 问题大致描述如下,在类中对函数声明时加了const声明。但在类外对函数定义时把const漏掉了,最后导致编译错误。实例代码如下: #include using namespace std; class Test { public: Test(int v):_value(v){} void sho原创 2012-10-25 23:21:59 · 1006 阅读 · 0 评论 -
红黑树插入操作的C++实现
红黑树是具有如下顺序属性的二叉查找树 1、每个节点要么是红色,要么是黑色 2、根是黑色 3、所有叶子节点都是黑色(叶子是NIL节点) 4、每个红色节点的两个孩子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点) 5、从根节点到NIL指针的每条路径必须包含相同数目的黑色节点 对NIL节点的理解是它不包含数据只充当树在此结束的指示 红黑树的插入的时候,把新插入的节原创 2012-11-04 00:01:47 · 1212 阅读 · 0 评论 -
B-Tree的C++实现
简要说明下B树的性质。 用M表示B树的阶数,L表示叶子节点的最大元素个 (性质说明来自于《数据结构与问题求解(C++版)》第19章) 1、数据项保存在叶子中 2、非叶子节点具有M-1个键指导查找的进行;键i代表子树i+1中最小的键 3、根要么是叶子,要么就有2~M个孩子 4、所有非叶子节点,(根除外)都具有[M/2]~M个孩子 5、所有叶子都在同一深度,并且对某一叶子,具原创 2012-11-03 23:38:13 · 1496 阅读 · 0 评论 -
AVL树的C++实现
第一棵平衡二叉查找树又被称为AVL树,以它的发现者Adelson-Velskii和Landis命名的。 它广泛说明了平衡二叉查找树中使用的各种思想。就是具有附加平衡条件的二叉查找树。 任一平衡条件必须是易于维护,并确保树的深度是O(logN)。最简单的思想是要求左子树和 右子树具有同样的高度。但是这个要求太严格了,维持平衡的同时插入数据项太困难。 而AVL树在这方面找到了一个良好的折中点。原创 2012-11-04 21:06:22 · 1013 阅读 · 0 评论 -
C++虚继承小结
虚拟继承是C++语言中一个非常重要但是又比较生僻的存在,它的定义非常简单,但是对于理解C++的继承机制却是非常有用的。笔者最近学习过程中发现对C++的虚拟继承不是很明朗,故在这里对虚继承做个小结。 首先说下遇到的问题吧。代码如下(代码来自于何海涛《程序员面试精选100题第32题)。意图是要设计一个不能被继承的类,类似java中的final。但是又可以生成栈对象,可以像一般的C++类一样使用。原创 2012-11-08 17:58:36 · 2119 阅读 · 3 评论