排序概述排序用途广泛,比如为数据库查询结果按时间排序,最小生成树算法中对边按权重排序,背包问题中对物品按大小排序等等。排序算法有很...
算法概述图的遍历是指访问图中每个节点一次。图的遍历方式主要有两种,一种是深度优先,即能走多远就先走多远的遍历方式,这就意味着,对于...
所谓拓补排序就是确定图中节点的一种顺序,使得某些在别的节点访问之前不能访问到的节点排在后面。所以该算法的核心是每一步选择一个没有入...
最小生成树是指包含图中所有的顶点而又没有环并且所有边的权值最小的子图,由于这张图没有环,所以就是一棵树。比较流行的两种找到最小生成...
本文记录了基于邻接表表示的有向有权图的基本操作。邻接表表示的图的结构就是用一个散列表存储图的节点,而每个节点后面跟着从节点出发的所...
并查集是一种支持合并于查找的结构,主要用于快速将一个集合与另一个集合合并,查找某个元素所在的集合。假设有N个元素,编号为0到N-1,那么�...
求逆序对问题与解决方案原理 在一个数列中,如果规定从小到大为正序,那么如果排在后面的某个元素比前面的某一个元素小,那么就称这两个数�...
Hoffman树是由David A. Hoffman于1952年在MIT攻读博士学位期间发表的论文《A Method for the Construction of Minimum-Redundancy Codes》中提出的,它的目的寻找一种利用...
面向对象编程的对象有两种,第一种是现实世界中的对象在软件中的表示(暗含了类间的一部分关系,如包含等),另一种是为了表示现实世界中对...
本文记录了使用C++模板实现了堆的基本操作,对于其他一些有用操作如IncreaseKey和DecreaseKey等则没有实现,这是因为使用模板把最小堆和最大堆揉在�...
C++的魔力在C++中,通过继承,子类可以获得父类的成员,通过多态,C++可以实现在运行期根据对象的实际类型调用正确的虚函数,C++还有C语言不能�...
对定制的“类型转换函数”警觉。两种函数允许编译器执行类型转换:1)单变量constructors;2)隐式类型转换操作符。第一种函数可以是明确只有一个�...
仔细区别pointers和references。指针和引用有些相似,他们本身都是对存在于某个地方的对象(不是指class)的指示,但是他们有着本质的区别。指针变�...
《Effective C++》第九章:杂项讨论 不要轻忽编译器的警告。严肃对待编译器发出的警告信息。努力在最高警告级别下争取无警告。也不要过度依赖编�...
《Effective C++》第八章:定制new和delete 了解new-handler的行为。new和delete不是函数,是申请和释放内存的操作符。当new提出获得内存申请失败时会发生�...
《Effective C++》第七章:模板与泛型编程 了解隐式接口和编译期多态。面向对象编程总是采用显式地声明一个接口,并在子类中提供特殊的实现,进�...
这样做的第一个理由是增加封装性,咳咳,这听起来有点矛盾,因为non-member且non-friend成员函数要想处理某个类中的数据的话,就得看到(即能访问�...
《Effective C++》第六章:继承与面向对象设计 确定你的public继承塑模出is-a关系。student is a person,所以student可以public继承自person。概念上,正方形是�...
《Effective C++》第五章:实现 尽可能延后变量定义式的出现时间。只有变量在恰好要使用之前定义,程序的可读性往往会得到提高,因为这样不容易�...
《Effective C++》第四章:设计与声明 让接口容易被正确使用,不易被误用。一个接口由返回类型、接口名称、和参数列表组成,为了让接口容易被正�...