摘要: 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不 阅读全文
posted @ 2019-11-28 07:46 evenleo 阅读(2388) 评论(0) 推荐(0) 编辑
摘要: 前言 哈夫曼编码是一种贪心算法和二叉树结合的字符编码方式,具有广泛的应用背景,最直观的是文件压缩。本文主要讲述如何用哈夫曼编解码实现文件的压缩和解压,并给出代码实现。 哈夫曼编码的概念 哈夫曼树又称作最优树,是一种带权路径长度最短的树,而通过哈夫曼树构造出的编码方式称作哈夫曼编码。 也就是说哈夫曼编 阅读全文
posted @ 2019-11-26 22:33 evenleo 阅读(6840) 评论(1) 推荐(2) 编辑
摘要: 打印树形结构初衷 树形结构是算法里很常见的一种数据结构,从二叉树到多叉树,还有很多变种。每当需要程序员自己手动实现树形结构时,因为结构本身的复杂性,不容易调试验证。但一般的调试对树形数据结构的整体把控十分有限,甚至会让人迷失在一大堆的调试信息海洋里。如果能够将数据树形打印出来,那么我们理解树形结构的 阅读全文
posted @ 2019-11-21 07:55 evenleo 阅读(2932) 评论(0) 推荐(1) 编辑
摘要: 计算月末最后一天 /* * 输入年月格式YM(如:201911),输入该月最后一天 */ int monthEndDay(int YM) { int endDay; int Y = YM / 100; int M = YM % 100; if (2 == M) { if (0 == Y % 400 阅读全文
posted @ 2019-11-14 15:03 evenleo 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 背景 C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢,导致程序出现未定义或异常行为。通常的做法是在修改共享数据成员时进行加锁(mutex)。在使用锁时通常是在对共享数据进行修改之前进行lock操作,在写完之后再进行unlock操作,但经常会出现lo 阅读全文
posted @ 2019-11-14 08:11 evenleo 阅读(1268) 评论(0) 推荐(1) 编辑
摘要: 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用的数据结构,链表内置在很多高级编程语言里面。既比数组复杂又比树简单,所以链表经常被面试官用来考察面试者的编程基本功。因此,链表是程序员必须熟练掌握的数据结构之一。近日在LeetCode上刷 阅读全文
posted @ 2019-11-11 22:28 evenleo 阅读(838) 评论(0) 推荐(0) 编辑
摘要: 在 redis 源码中 dictScan 算法中用到了用到了非常经典的二进制反转算法,该算法对二进制的反转高效而实用,同时对于理解位运算也有非常大的帮助。先呈现源码: /* Function to reverse bits. Algorithm from: * http://graphics.sta 阅读全文
posted @ 2019-11-11 07:46 evenleo 阅读(560) 评论(0) 推荐(0) 编辑
摘要: heap性质 heap本质是用一个数组表示的完全二叉树,并且父节点总是大于(或者小于)子节点的值。在STL中用于实现优先队列(priority_queque)。堆排序是排序算法中是稳定效率最高的一种。STL以可以动态扩容的vector作为heap的底层数组。 push_heap分析 为满足完全二叉树 阅读全文
posted @ 2019-10-30 13:51 evenleo 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 前言 万丈高楼平地起,内存管理在C++领域里扮演着举足轻重的作用。对于SGI STL这么重量级的作品,当然少不了内存管理的实现。同时,想要从深层次理解SGI STL的原理,必须先将内存管理这部分的内容理解清楚,STL最常用也是最重要的容器都是基于内存管理实现的。前面已经写了几篇文章SGI源码分析的文 阅读全文
posted @ 2019-10-28 11:05 evenleo 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 前言 在学习STL源码之前我也曾无数次想要弄懂红黑数的原理,奈何每次都被困难打退。说实话,红黑树是真的很难理解,需要不断沉淀才能慢慢体会其妙处。这两天看SGI的RB-tree实现,结合侯捷老师的《STL源码剖析》,终于将主要的源码看懂了,人生如此艰难!所以我写一篇文章,来记下理解的过程,可以加深印象 阅读全文
posted @ 2019-10-17 08:11 evenleo 阅读(496) 评论(0) 推荐(0) 编辑