- 博客(721)
- 资源 (17)
- 收藏
- 关注
翻译 SkipList跳表的原理与实现
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,
2013-08-26 16:01:14 1264
原创 AbstractFactory抽象工厂模式
一、C实现栈#include #include #include #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2typedef int INT;typedef bool BOOL;typedef struct stack { INT *base; INT *top; INT stacksize; };enu
2013-08-26 15:55:23 1111
原创 STL copy详解
0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算
2013-08-22 15:08:22 1442
原创 C++ 之高效使用STL(算法 )
STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。 STL中算法大致分为四类: 1、非可变序列算法:指不直接修改其所操作的容器内容的算法。 2、可变序列算法:指可以修改它们所操作的容器内容的算法。 3、排序算法:包括对序列进行排序和合并的算法、搜索
2013-08-22 14:40:28 1953
原创 pair和make_pair
1、简介 class pair ,中文译为对组,可以个值视为将两一对于个单元。map和multimap,是就用pairs来管理value/key的成对元素。任何函数需要回传两个值,也需要pair。 该函数的相关内容如下所示: |->Type----->struct |->Include--->
2013-08-21 10:40:10 1165
原创 STL之multimap简介
C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素。(具体用法请参考map容器)函数列表:begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 count() 返回一个元素出现的次数 empty() 如果multimap为空则返回真 end() 返回一个指向multimap末尾的迭代器 equal_range() 返回指
2013-08-20 17:53:56 1055
原创 map/multimap容器类型
map和multimap将key/value pair当做元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许。一、map/multimapmap c;map c(op);map c1(c2);map c(beg,end,op);c.size();c.empty();c.max_size();c
2013-08-20 17:00:29 1876
原创 STL之multiset简介
在我的印象中,set就是一个元素不重复的集合,而事实上也正是这样的。无论从MSDN还是任何其它地方,都会告诉我们set的元素不可以重复。反之,只要元素不重复,就可以顺利的放入到set中。看起来这实在是再清楚不过了,但是仔细想一想的话,就会发现,话说只要不重复的元素就可以被放入到一个set中,但是什么样的元素是不重复的元素呢?或者说,什么样的元素是互不相同的呢?对于内置数据类型,也就是传说中的pri
2013-08-20 15:09:19 1297
原创 set,multiset容器类型
set和multiset会根据特定的排序准则,自动将元素排序。两者不同处在于multiset允许元素重复而set不允许。一、set和mutisetset c;set c(op);set c1(c2);set c(beg,end,op);c.size();c.empty();c.max_size();c.count(elem);c.find(elem);c.lower_bo
2013-08-20 14:40:53 1712
原创 STL序列式容器和关联式容器
序列式容器1、vectorvector c;vector c2(c1);vector c(n);//利用元素default构造函数生成一个大小为n的vectorvector c(n,elem);vector c(beg,end);c.size();c.empty();c.max_size();c.capacity();c.reverse();c1 =
2013-08-19 18:58:32 2189
原创 二分查找—lower_bound 、upper_bound 、binary_search
STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。这三个函数都运用于有序区间(当然这也是运用二分查找的前提)。 其中如果寻找的value存在,那么lower_bound返回一个迭代器指向其中第一个这个元素。upper_bound返回一个迭代器指向其中最后一个这个元素的下一个位置(明确点说就是返回在不破坏顺序的情况下
2013-08-19 17:04:15 1365
原创 抽奖程序
一、int rand()可以生成从[0, 65536)之间均匀分布的随机数。现要求实现:有30万员工,使用rand()写一个抽奖程序,抽出人100获奖。#include #include using namespace std;typedef set ISET;ISET GetPridePersonId(const int num, const int pride_num)
2013-08-19 15:37:44 1771 1
转载 Hadoop配置项整理
一、Hadoop配置项整理(core-site.xml)记录一下Hadoop的配置和说明,用到新的配置项会补充进来,不定期更新。以配置文件名划分以hadoop 1.x配置为例core-site.xml namevalue Description fs.default.namehdfs://hadoopmaster:90
2013-08-13 16:13:34 1600
原创 Apache Rewrite设置
一、Apache 域名的重定向简单的说就是配置Apache让它自动把旧的URL地址转换成新的URL输出。 首先,apache重定向功能需要调用mod_rewrite模块,由于apache2.2的modules文件夹中带有该模块,所以我们只需开启http.conf文件中的LoadModule rewrite_module modules/mod_rewrite.so(去掉前面的‘
2013-08-01 18:50:29 1965
原创 循环移位算法
将一个含有n个元素的数组向右循环移动k位,要求时间复杂度是O(n),且只能使用两个额外的变量,这是在微软的编程之美上看到的一道题分析:比如数组 1 2 3 4循环右移1位 将变成 4 1 2 3, 观察可知1 2 3 的顺序在移位前后没有改变,只是和4的位置交换了一下,所以等同于1 2 3 4 先划分为两部分1 2 3 | 4,然后将1 2 3逆序,再将4 逆序 得到 3 2 1 4,
2013-07-22 20:08:29 4803
原创 深入浅出C/C++中的正则表达式库
一、深入浅出C/C++中的正则表达式库(一)——GNU Regex Library写在前面: 本文是面向有正则表达式基础的读者朋友的,如果你还不知道正则表达式是什么,请先到这里学习一下 :http://en.wikipedia.org/wiki/Regular_expression。正则表达式(Regular Expressions),又被称为regex或regexp,是一种十
2013-07-17 10:12:59 7338
转载 详解Google-ProtoBuf中结构化数据的编码
本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf。因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则。下面言归正传,开始今天的
2013-07-16 16:57:48 1598
原创 google ProtoBuf开发者指南
ProtoBuf开发者指南译者:gashero目录1 概览1.1 什么是protocol buffer1.2 他们如何工作1.3 为什么不用XML?1.4 听起来像是为我的解决方案,如何开始?1.5 一点历史2 语言指导2.1 定义一个消息类型2.2 值类型2.3 可选字段与缺省值2.4
2013-07-16 15:58:48 2428
原创 Linux线程池
一、线程池大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次
2013-07-15 18:45:44 2014
转载 可伸缩多线程任务队列
在我们的工作中,我们经常需要异步执行一些任务,下面介绍的这个可伸缩多线程队列,可满足我们的需求。 出自:http://www.codeproject.com/Articles/4148/Multithreaded-Job-Queue,主要有以下几个功能: 1、任务队列是多线程,许多任务可以异步进行,任务队列使用线程池来执行任务。 2、任务队列支持优先级,优先级
2013-07-15 18:39:29 1754
原创 Python中的getattr()函数详解
最近看Dive into python第四章自省中提到getattr()函数,作为一个内建函数平时自己没怎么用过所以也不太理解这个函数的一些用法看了下函数本身的docgetattr(object, name[, default]) -> valueGet a named attribute from an object; getattr(x, 'y') is equival
2013-07-12 15:45:34 1602
转载 How To Use Linux epoll with Python
ContentsIntroductionBlocking Socket Programming ExamplesBenefits of Asynchronous Sockets and Linux epollAsynchronous Socket Programming Examples with epollPerformance ConsiderationsSource Code
2013-07-12 09:53:28 1059
原创 fstream的使用方法详解
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout2、析取器(>>)
2013-07-05 11:00:08 2828
转载 Linux下面的线程锁,条件变量以及信号量的使用
一) 线程锁1) 只能用于"锁"住临界代码区域2) 一个线程加的锁必须由该线程解锁.锁几乎是我们学习同步时最开始接触到的一个策略,也是最简单, 最直白的策略.二) 条件变量,与锁不同, 条件变量用于等待某个条件被触发1) 大体使用的伪码:// 线程一代码pthread_mutex_lock(&mutex);// 设置条件为truepthread_co
2013-07-04 16:33:46 1575
转载 Zookeeper使用详解
安装和配置详解本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。单机模式单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目
2013-06-30 16:00:18 1620
原创 linux下php扩展ssh2的详解
一、php扩展ssh2安装①安装libssh2:a. # cd /home/spider/lamp/b. # wget http://www.libssh2.org/download/libssh2-1.2.8.tar.gzc. # tar -zxvf libssh2-1.1.tar.gzd. # cd libssh2-1.1e. # ./config
2013-06-27 10:35:54 2985
原创 将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。
题目描述:将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。例:input: -5,2,-3, 4,-8,-9, 1, 3,-10;output: -5, -3, -8, -9, -10, 2, 4, 1, 3。算法描述:①设定两个计数器begin、end,其中begin始终指向数组中的第一个负数,end始终指向位于begin之后的第一个正数。然后把b
2013-06-22 19:47:42 7711 1
转载 跟我学写Makefile
CentOS, 本地服务器,ip: 192.168.1.111Ubuntu, 远程服务器,ip: 192.168.1.1121.拷贝远程服务器的目录到本地服务器远程服务器192.168.1.112上面/tmp目录下面有个test目录,里面有个文件名为test,内容也为testroot@ubuntu:/tmp# cat test/test test拷贝远程服务器192
2013-06-20 19:52:00 1658
原创 把文件中大量的数据去掉重复的再写入文件
CURL是一个超强的命令行工具,其功能非常强大,有Linux/Unix版本的,也有Windows版本的,我平时就经常在Windows下面使用curl做一些测试,非常方便,有时用curl做测试比用浏览器做测试要快得多,方便得多。1.curl命令帮助选项C:\>curl --helpUsage: curl [options...] Options: (H) means HTTP/H
2013-06-20 19:51:19 1456
转载 python 时间和日期
我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次,为了能够更好的记住,我今天特意写下python 当前时间这篇文章,如果你觉的对你有用的话,可以收藏下。取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方文档了解下,要取的当前时间的话,要取得当前时间的时
2013-06-19 10:31:40 1507
转载 Epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable总结:这个错误表示资源暂
2013-06-17 15:56:36 1614
转载 用GDB调试程序(二)
GDB的命令概貌———————启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is fr
2013-06-17 15:04:05 1153
原创 数组中最长的区间,满足该区间内的数排序后是连续的。
题目:数组中最长的区间,满足该区间内的数排序后是连续的。比如,[23, 4,1,3,2,9,8,24] 4,1,3,2 是最长区间,是连在一起的。[23, 1,3,2,9,4,8,24] 就只能返回1,2,3了。算法描述:①从x0开始,找length=|x0-x1|+1内的max和min,length大于数列长度则否定x0,再从x1向后开始找;1_如果max-min+1=length,
2013-06-17 14:07:30 1577 1
转载 cmake使用方法详解
cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake 使用方法 CMake的所有的语句都写在一个叫:CMakeLists.txt的文件中。当CMakeLists.txt文
2013-06-14 17:35:18 20660
转载 Linux内核进程调度schedule深入理解
一.说明本文以linux-2.4.10 为例主要分析Linux 进程调度模块中的schedule 函数及其相关的函数。另外相关的前提知识也会说明。默认系统平台是自己的i386 架构的pc。二.前提知识在进行schedule 分析之前有必要简单说明一下系统启动过程,内存分配使用等。这样才能自然过渡到schedule 模块。首先是Linux各个功能模块之间的依赖关系:
2013-06-13 16:40:25 7215 1
原创 算法的时间复杂度和空间复杂度
一、常用的算法的时间复杂度和空间复杂度二、算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句
2013-06-05 18:25:59 1936
原创 求两个数组的交集、并集和差集算法分析与实现
一、数组内数据无序且可以重复本文采用一种交换的方式来求出两个数组的并集,交集和差集,这种算法运算速度较快,内存消耗空间较少,是一个值得学习的好方法,另外,作者提醒您,重要的不是算法本身,而是该算法会开拓我们的思维空间,要注意对问题的多思考。 算法概述:两个任意元素的数组,比较出两个数组中相同的元素和不同的元素。 元素划分:计算过程中,两个
2013-06-05 17:02:11 12702 1
原创 epoll应用服务端和客户端
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。一、服务器端实现int onRead(int fd, void *buffe
2013-05-08 13:04:10 1710
原创 socket通信socketpair
这篇文章主要介绍的是socketpair()函数,至于函数的详细介绍,大家可以参看:man socketpair 介绍的还是可以的。下面是中文简介:函数原型#include #include int socketpair(int d, int type, int protocol, int sv[2]); 参数介绍:socketpair()函数建立一对匿名的已经连接的套
2013-05-08 12:59:10 2027
转载 Linux同步方法剖析
本文讨论了 Linux 内核中可用的大量同步或锁定机制。这些机制为 2.6.23 版内核的许多可用方法提供了应用程序接口(API)。但是在深入学习 API 之前,首先需要明白将要解决的问题。developerWorks 上 Tim 的更多 剖析... 系列Linux 文件系统剖析Linux 网络堆栈剖析Linux 内核剖析Linux slab 分配器剖析
2013-04-27 14:55:34 981
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人