- 博客(35)
- 资源 (1)
- 收藏
- 关注
原创 Ternary Tree
前一篇文章介绍了Trie树,它实现简单但空间效率低。如果要支持26个英文字母,每个节点就要保存26个指针,由于节点数组中保存的空指针占用了太多内存,让我来看看Ternary Tree。 When you have to store a set of strings, what data structure should you use? You could use hash tables, w
2015-06-30 20:22:07 941
原创 Trie树(字典树)(1)
Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构。 Trie树与二叉搜索树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀(prefix),也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 A trie, pronounced
2015-06-30 14:53:36 1157
原创 Morris Traversal遍历二叉树(非递归)
这里介绍非递归法遍历二叉树,与使用stack递归不同,该方法只需要O(1)空间,而且同样可以在O(n)时间内完成。要使用O(1)空间进行遍历,最大的难点在于,遍历到子节点的时候怎样重新返回到父节点(假设节点中没有指向父节点的p指针),由于不能用栈作为辅助空间。为了解决这个问题,Morris方法用到了(线索二叉树threaded binary tree)的概念。在Morris方法中不需要为每个节点额外
2015-06-27 17:44:30 767
原创 线索二叉树(Threaded Binary Tree)
A threaded binary tree is a binary tree variant that allows fast traversal: given a pointer to a node in a threaded tree, it is possible to cheaply find its in-order successor (and/or predecessor).
2015-06-27 17:38:42 1175
原创 checked_delete/checked_array_delete
在boost的智能指针中析构时都用到了checked_delete 和checked_array_delete,为什么不简单地delete呢? 在头文件”boost/checked_delete.hpp”定义了两个函数模板,checked_delete 和 checked_array_delete, 以及两个类模板,checked_deleter 和 checked_array_deleter
2015-06-27 11:55:23 976
原创 STL源码剖析(4):容器(vector)
容器是很多人对STL的第一印象,vector,stack,queue,set,map等等都是容器。 这里先介绍 STL中的序列式容器。 所谓序列式容器,其中的元素可序(ordered),但未必有序(sorted)。C++ 本身提供了一个序列式容器——数组(array),STL中还提供了向量(vector),链表(list),堆栈(stack),队列(queue),优先队列(priorit
2015-06-19 15:33:57 677
原创 STL源码剖析(3):迭代器(iterators)
关于迭代器的基本介绍可以看我之前泛型编程的文章: STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一帖粘合剂将它们撮合在一起。 迭代器(iterator)是一种 smart pointer,关于智能指针可以看我之前的文章(智能指针)。 迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的便
2015-06-19 14:32:49 834
原创 智能指针(smart pointer)(2):unique_ptr
Unique pointer: Manages the storage of a pointer, providing a limited garbage-collection facility, with little to no overhead over built-in pointers (depending on the deleter used). These obje
2015-06-18 18:53:27 1007
原创 智能指针(smart pointer)(1):auto_ptr
智能指针解决了资源生存期管理的问题(尤其是动态分配的对象)。智能指针有各种不同的风格。多数都有一种共同的关键特性:自动资源管理。这种特性可能以不同的方式出现:如动态分配对象的生存期控制,和获取及释放资源 (文件, 网络连接)。这里主要讨论第一种情况,它们保存指向动态分配对象的指针,并在正确的时候删除这些对象。 何时我们需要智能指针? 有三种典型的情况适合使用智能指针: • 资源所有权的
2015-06-18 10:34:14 953
原创 STL源码剖析(2):内存基本处理工具
内存基本处理工具: STL有五个全局函数,作用于未初始化空间上,它们分别是:construct(), destroy(), uninialized_copy(), uninialized_fill()和uninialized_fill_n()。 前两个函数前面文章有介绍,下面介绍后三个函数。 uninitialized_copy()使我们能够将内存的配置与对象的构造行为分离开来。如果作
2015-06-18 09:31:53 734
原创 STL源码剖析(1):空间配置器
STL所有的操作对象(所有的数值)都存放在容器之内,容器需要分配空间以存放数据。为什么不说allocator是内存配置器而是空间配置器,因为空间不仅是内存,空间也可以是磁盘或其它辅助储存媒体。这里我们主要讨论内存配置。 SGI STL每个容器缺省的空间配置器为alloc,如vector: template<class T, class Alloc = alloc> clas
2015-06-17 21:32:44 506
原创 Leetcode题解(8):L179/Largest Number
L179:Largest Number Given a list of non negative integers, arrange them such that they form the largest number. For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330. Note: Th
2015-06-17 19:40:17 748
原创 Function Objects Adapter(函数对象适配器)
在讲函数对象适配器之前,让我来看看什么是适配器,广义上讲Adaper就是一种将某一接口转换为另一接口的组件。 比如某电器是欧式插头,你怎么插在国标插座上,最直观的想法就是再买个转接器转一下,没错,这个转接器就是一个Adater。 如图(生活中的Adapter) 让我来看之前文章提到的求是否是偶数的even函数,先考虑even就是普通的函数,原型为: bool even(in
2015-06-16 12:55:22 748
原创 kd树(k-dimensional tree)(1)
kd树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。 索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询(K-neighbor searches)。范围查询就是给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据;K近邻查询是给定查
2015-06-13 16:24:06 2333 1
原创 HTTP协议(1):简介
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。 HTTP的发展是万维网协会(World Wide Web Con
2015-06-12 19:48:40 824
原创 3 way quick sort
3-way partitioning: 将数组分为三份:(小于、等于、大于拆分值) ・Let v be partitioning item a[lo]. ・Scan i from left to right. – (a[i] < v): exchange a[lt] with a[i]; increment both lt and i – (a[i] > v): exchange a[gt
2015-06-11 10:59:26 1605
原创 shuffling
Shuffling is a procedure used to randomize a deck of playing cards to provide an element of chance in card games. Shuffling的目标是要Shuffling后所有可能情况的概率一样。 Before: After: 这里介绍两种简单的shuffling算法:
2015-06-10 21:06:19 1542
原创 哈希表(Hash table)(1)
哈希表(Hash table)经常被用来做字典(dictionary),或称符号表(symbol-table) 直接存取表(Direct-access table): • 直接存取表(Direct-access table)的基本思想是:如果key的范围为0~m-1而且所有key都不相同, 那么可以设计一个数组T[0..m-1],让T[k]存放key为k的元素, 否则为空(NIL) • 显然,
2015-06-10 16:50:30 988
原创 Nginx(1):简介
Nginx is a lightweight event-driven HTTP and reverse proxy server for web, as well as mail server. Apache: Thread/Process Oriented. C10K challenge? 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为 C10K 问题
2015-06-09 22:20:39 635
原创 Leetcode题解(7)L51/N-Queens
L51: N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-qu
2015-06-09 14:17:20 691
原创 Leetcode题解(6):L103/Binary Tree Zigzag Level Order Traversal
L103: Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and
2015-06-08 19:06:35 494
原创 Leetcode题解(5):L58/Length of Last Word
L58: Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space characters ’ ‘, return the length of last word in the string. If the last word does not exist, retur
2015-06-08 15:48:22 886
原创 Leetcode题解(4):L216/Combination Sum III
L216: Combination Sum III Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of number
2015-06-08 14:32:39 830
原创 Leetcode题解(3):L215/Kth Largest Element in an Array
L215: Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example, Gi
2015-06-06 21:15:23 805
原创 H.264/ACC音视频编码流的RTP/RTSP传输实现(4)
实时流协议RTSP RTSP[[[] Schulzrinne,H., Rao.Real time streaming protocol (RTSP) RFC 2326[J]. IETF .1998]]由RealNetworks、Netscape Communications和哥伦比亚大学共同开发而成。1998年5月,IETF作为建议标准发布。RTSP是从HTTP协议框架上继承而来,拥有着HTT
2015-06-06 19:16:29 5068
原创 H.264/ACC音视频编码流的RTP/RTSP传输实现(3)
实时传输协议RTP RTP(Real-time Transport Protocol)[[[] H S, CASNER S, FREDERICK R.RTP: A Transport Protocol for Rea-l Time Applications[J]. 2003]]是由IETF开发的实时传输协议,可以在面向连接或无连接的下层协议上工作,通常和UDP协议一起使用。RTP在多点传送(多
2015-06-05 20:52:06 5224 1
原创 Leetcode题解(2):L93/Restore IP Addresses
L93: Restore IP Addresses Given a string containing only digits, restore it by returning all possible valid IP address combinations.For example: Given “25525511135”,return [“255.255.11.135”, “255.2
2015-06-05 20:16:02 784
原创 Leetcode题解(1):L102/Binary Tree Level Order Traversal
L102: Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).For example: Given binary tree {3,9,20,#
2015-06-05 18:52:39 614
原创 B+-树(B+-tree)(1)
简介: B-tree(也就是B树,多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。 B+-树使用广泛,一般用于数据库的索引,综合效率较高。 B-树是Rudolf Bayer, Edward M. McCreight(1970)写的一篇论文《Organization and Maintenance of Lar
2015-06-05 16:12:20 1374
原创 H.264/ACC音视频编码流的RTP/RTSP传输实现(2)
H.264编码基本原理 为达到良好的编码效率及性能,H.264编码器采用的仍是变换和预测的混合编码法,[[[] 毕厚杰. 新一代视频压缩编码标准: H. 264/AVC[M]. 人民邮电出版社, 2005]]其完整的编码过程如图2-1所示。 在H.264编码标准中,输入的帧或场Fn是以宏块为单位进行处理的,采样后的视频图像都被分成16*16的宏块每个宏块包括1个亮度子块和2个8*8的色度
2015-06-04 21:43:36 6144
原创 H.264/ACC音视频编码流的RTP/RTSP传输实现(1)
目标: 实现一个用于H.264/ACC音视频编码流的RTP/RTSP传输的简单服务器,主要通过此过程学习基于RTP的NAL、ADTS码流封装技术和基于RTSP的视频交互控制技术。完整系统应该包括服务器和客户端两个部分,其中服务器负责接收客户端请求、封包以及发送音视频数据,客户端负责发送请求和接收视频数据。分别在Windows平台上和Android平台上进行网络传输实体测试,通过客户端网络流抓包
2015-06-04 21:20:18 6376
原创 并查集:Union-Find(1)
Disjoint Sets: 我们都知道Sets(集合)是什么,就是一组非重复元素组成的结构。 先让我们来看一下Disjoint Sets(非相交集合) : Disjoint Sets的意思是一堆集合们,它们相互之间都没有交集。没有交集是指:各个集合之间没有拥有共同、相同的元素。中文称作「分离集」。 Disjoint Sets 的性质相当特殊。信息学家仔细观察其特性后,精心设
2015-06-04 20:56:09 861
转载 C++语言体系设计哲学的一些随想
对于静态类型语言,其本质目标在于恰当地操作数据,得到期望的值。具体而言,需要:(1)定义数据类型你定义的数据是什么,是整形还是浮点还是字符。该类型的数据可以包含的值的范围是什么。(2)定义操作的含义操作是严格数据类型相关的。操作表明了对了一个具有特定类型的数据,执行操作后产生什么样结果。 ===========================================
2015-06-04 14:41:23 1004
原创 进程、线程小结(2)
1. 进程描述符及任务结构 最初的进程定义都包含程序、资源及其执行三部分,其中程序通常指代码,资源在操作系统层面上通常包括内存资源、IO资源、信号处理等部分,而程序的执行通常理解为执行上下文,包括对cpu的占用等 Linux内核把进程列表存放在焦作的任务列表(task list)的双向链表中。链表中的每一项包含类型为task_struct的结构,用于描述进程,包含一个具体进程的所有信息:
2015-06-01 22:13:54 656
原创 进程、线程小结(1)
进程(process)就是处于执行期的代码,不仅包含可执行程序(text section),还包括一些其他资源(如打开的文件,挂起信号,内核数据,内存空间,执行线程,存放全局变量的数据段等)。 线程(thread)是在进程中的活动对象,是内核调度的对象,每个线程都包含独立的程序计数器,进程寄存器和进程栈。 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计
2015-06-01 22:02:33 612
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人