自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 1006

原创 智能指针(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 2332 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 1541

原创 哈希表(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 5067

原创 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 6374

原创 并查集: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 655

原创 进程、线程小结(1)

进程(process)就是处于执行期的代码,不仅包含可执行程序(text section),还包括一些其他资源(如打开的文件,挂起信号,内核数据,内存空间,执行线程,存放全局变量的数据段等)。   线程(thread)是在进程中的活动对象,是内核调度的对象,每个线程都包含独立的程序计数器,进程寄存器和进程栈。 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计

2015-06-01 22:02:33 612

web资源下载器

一个简单德python脚本,可支持pdf/txt/ppt等网页资源的下载

2015-07-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除