- 博客(34)
- 资源 (8)
- 收藏
- 关注
原创 一百度笔试题目分析
问题:有101个数,为[1,100]之间的数,其中一个数是重复的,如何寻找这个重复的数,其时间复杂度和空间复杂度是多少?解:假设这101个数存放在Data[101]的数组中一> 采用hash的方法,该方法可以申请一个100个字节,然后扫描这个101个数据,该方法需要的空间为O(N),时间复杂度为O(N)char Buff[101];memset(Buff, 0 , sizeo
2012-02-26 23:28:21 5031
原创 设计一个不能被复制的类
在C++中如果要求一个类能被复制需要实现赋值运算符或者复制构造函数,因此要想一个类不能被复杂,只需将这两个函数设置private访问属性即可class NoCopy{public: NoCopy(){}private : NoCopy(const NoCopy & copy){} NoCopy & operator = (const NoCopy & copy){}}
2012-02-25 13:21:21 4195
原创 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(二)
首先参考 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)6. 错误指针地址运算指针的算法运算是以他们指向对象的大小为单位来进行运算的,例如整形指针pval, 如果求当前指针指针整数的下一个整数只需要int * pnext = pval + 1,很多对指针不熟悉的人可能会int *pNext = pVal + sizeof(int),从而造成错误。7. 引用不存
2012-02-23 21:24:12 3829
原创 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)
一, 指针引用错误。现代操作系统中普通使用虚拟存储器系统,使得每个进程可以使用的地址空间达到2^N,N为机器的位数,但是实际中并不需要如此大的内存,所以如果间接将引用的指针指向一块没有使用的内存空间中,操作系统会会报出segment error错误。int val;scanf("%d" , val);很明显上面scanf的使用是错误的,正确的做法应该是将val的地址传给scanf,但此却
2012-02-23 10:54:01 3412
原创 cpp不区分大小写比较字符串string
int StrCaseCmp(const string & stra , const string & strb){ int aLen = stra.length(); int bLen = strb.length(); int iRes = 0 , iPos = 0; for (iPos = 0; iPos < aLen && iPos < bLen; ++iPos) { iRe
2012-02-21 18:15:54 6275
原创 一句话搞定string类型大小写转换之transform用法
对于cpp中的string类型大小写转换用的可以说非常频繁,下面是使用STL实现的一种非常简单的方式进行转换std::transform (strExt.begin(), strExt.end(), strExt.begin(), ::toupper ); //将strExt转换成大写。其实transform的用法非常广泛,下面对其进行简要介绍。查看transform的标准定义
2012-02-21 09:58:42 7678
原创 编写标准的字符串复制(strcpy)函数
C++中strcpy函数定义在string.h库中,其标准形式如下:char *strcpy(char *dest, const char *src);可以实现如下:char *strcpy(char *dest, const char *src){ assert(dest != NULL && src != NULL); //对参数合法性进行判断 char * pdest
2012-02-19 20:47:51 3150
原创 设计一个不能被继承的类
在c++中每个类都一个构造函数和一个析构函数,即使用户不明确定义,系统也会类定义一个默认的构造函数和析构函数。当创建该类的对象可以显示或者隐式调用构造函数,当对象销毁时会自动调用析构函数。当有子类继承父类,创建子类的对象时,会自动调用父类的构造函数,同样当对象销毁时也会自动调用父类的析构函数。在类属性中private不允许用户和子类调用该函数的方法。因此要想使用
2012-02-19 20:33:49 2560
原创 cpp程序性能优化
1. 重中之重 - 算法优化: 程序性能优化最显著的优化方法是算法上的优化,算法的优化对性能的提升往往是一个数量级的,例如排序,冒泡的时间复杂度为O(N^2),而快速排序的时间复杂度为O(Nlog(N)),这种性能的提供是非常明显的。 2. 消除冗余的循环: 我们先看一下for循环生成的汇编代码for (int N = 4
2012-02-18 18:55:53 2930
转载 QQ通信协议
不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。二、聊天消息通信。 采用UD
2012-02-18 13:45:05 27988 5
转载 Google Protocol Buffer 的使用和原理
刘 明, 软件工程师, 上海交大电子与通信系简介: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。简介什么
2012-02-16 23:39:55 2697
原创 QQ架构的讨论(整理)
转贴:QQ的架构问题 -----------sodme 大宝hi, all:我把第一个问题选为:QQ的架构。呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个这样的架构如何来作更好,大家积极发言,这也是我这个周末为自己选择的思考题,呵呵。大家积极畅所欲言。我们讨论的问题可以包括但不限于这些内容:1.登录时的负载如何解决的2.服务器主要作哪
2012-02-16 20:45:48 4789
原创 矩阵乘法的并行算法
设两个矩阵A和B,大小分别为M * N 和 N * P, 如果C = A * B, 则C的大小为M * P。矩阵算法的算法表示,伪代码如下:for (i = 0; i < M; ++i){ for (j = 0; j < P; ++j){ C[i][j] = 0; for (k = 0; k < N; ++k){ C[i][j] += A[i][k] * B[k][j];
2012-02-15 10:16:30 21847 1
原创 交叉链表公共结点
两个链表交叉点,如何找到每个交叉点?解:考虑链表的单向性,因此两个相交的链表应该呈现出Y开状,而不是X形状,即第一个交点后的长度相同,这样通过遍历两个链表可以判断开头部分的长度之差。设链表A – B = M,则先让A链表先遍历M的结点,然后A,B两链表同时遍历,比较两个结点,第一个相同的结点则为第一个交点。
2012-02-14 21:44:33 2944
原创 C++中强制类型转换的应用
1.1 强制类型转换大家都知道在C语言里强制类型转换的方法非常简单,只要在要转换的变量前用括号确定要转换的类型即可,如要将一个double型的变量强制转换为int类型,代码如下: double x = 3.14; int y = (int)x;另外,还可有更高级的转换,如把int *类型的变量转换为int ,代码如下: int x = 20; int
2012-02-14 21:22:41 5622
原创 原来google主页也有bug
今天好奇在google上查了一下自己博客被收录的情况,在搜索框中输入http://blog.csdn.net/realxie, 看了一下搜索结果还相当不错,有3页的内容但是当我点击第二页之后就变成 点击3的时候显示的也是第二页中的内容。 起初是在chrome下,以为是浏览器问题,故意换成了IE,依然如此。 呵呵,这只是一个小bug,其实没什么关系。
2012-02-14 19:21:37 1700
原创 寻找素数的并行算法
一.串行算法(筛选法):输入N。输出0 到 N之间的所有素数int A[ N + 1];Memset(A , 0 , sizeof(A));int Count = 0; for (int I = 2; I <= N; ++i){ if(A[i] != 0)continue; ++Count; for(int j = I
2012-02-14 00:05:24 4475
原创 基于SAN网络存储的企业信息系统构建
摘要随着Internet和网络技术的飞速发展,企业需要存储和处理的数据呈现在出爆炸式的增长,数据访问的稳定性和数据的安全性也越来越重要。在数据存储的需要较小时,存储设备只是服务器一个附属设备,但是当数据量持续增长,服务器间数据交换越来越频率,跨平台数据共享的需要越来越多,传统的存储架构以及网络技术已经无法适应当前的需求,在这种背景下SAN存储技术应运而生了。关键字:SAN, FC,I/O,
2012-02-13 21:32:05 2777
原创 指针数组/数组指针
C/C++中有两个非常容易混淆的十分常用的但是又特别不引起人注意的两个概念,指针数组和数组指针,或许你已经对这两个概念早有耳闻,但是不知你有没有对他们做过细致的分析来区别二者呢? 下面我们来看下百度百科上是如何对二者进行定义的 数组指针 一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并
2012-02-12 16:15:12 33893 2
原创 指针和Map
请看下面段代码,首先请猜测一下是否正确。 map pMap ; int A[100]; for(int i=0;i<100;i++){ *(A+i) = i; pMap[A+i] = A[i]+1; }怎么样,看下来有点眼花缭乱吧,究竟这个pMap里面存放的是什么呢?为了搞清楚这个问题,我们还是要从指针入手。搞清楚什么是指针,指针里存放的是什么内容。指针是指向一块内存
2012-02-12 16:12:28 5848
原创 C++ 中 vector 如何实现内存分配
>中对顺序容器的内存分配是这样描述的,内容太多,简写一下:为了支持随机访问,vector中的元素采用顺序存放,即每一个元素紧挨着前一个元素进行存储。那么现在只有可能出现问题了,当内存中没有足够连续的空间去存放新插入来的元素怎么办,C++是这样处理的:重新分配内存空间,将原来旧的元素全部复制到新的存储空间中去,然后再插入新的元素。因此可以看出,如果内存不是特别充足或者内存中没有较大块的空
2012-02-12 16:09:14 9381
原创 TBB(intel threading building blocks)内存分配算法(一)
开篇:最近研究了一下TBB的内存分配算法,发现设计的非常优雅,故和大家分析一下它的算法思想。既然是开篇,那么我们就先从最基本的入手来看一下TBB基于Cache对齐的内存管理算法。首先来明确几个概念。cache: 现代的cpu都引入的cache的概念,即cpu在参与运算时并非每次都去内存中取得数据的,而是将内存中的一部分数据直接存储在cpu的cache中,cpu中的cache采用的静态随机存
2012-02-11 15:14:46 6772
转载 腾讯游戏的矩阵效应
在精心布局下,腾讯的每款游戏都有着明确的定位,它们抢占每个细分市场,紧密组合,互为犄角,构筑了一个强有力的矩阵。 策划人语 洞察玩家需求 ■文/本刊编辑部 “走自己的路,让别人无路可走。”尽管互联网的英雄们在公开场合声讨腾讯已成为一种常态,但事实上,私底下却是一种复杂的心态——曾几何时,那些有野心的互联网创业家都渴望成为像腾讯一样的“全民公敌”,只是梦想照进
2012-02-10 10:16:31 10843
原创 寻找无序数组中的第K大数
利用快速排序的思想,其中K从1开始int quicksort(int * x , int l , int r , int k){ if(l == r && k==1)return x[l]; int i , j ; for(i=l-1 , j=l;j<r;j++) if(x[j]<x[r])std::swap(x[++i] , x[j]);
2012-02-08 23:07:19 2243
原创 小量压缩简单算法
本方介绍一种简单的数据压缩算法:SB (simple block)作者:realxie在对文档进行倒排的时候经常涉及到对倒排文档的压缩,例如假设有单词instance 出现的文档有<1,3 ,4 , 6 ,9 ,10,... >,即倒排表以升充排列,这样我们就可以在倒排文件中只保存前后两个文档位置的差量,即转变之后结果为<1 ,2 , 1 , 2 , 3 , 1 , ...>,
2012-02-08 23:05:03 3766 2
原创 选路逻辑问题
话说您走到一个路口,前方有两条路(P1 , P2) , 其中只有一条能通往您需要的地方。现在有A,B两人,其中一个人只说真话,另一个人只说假话,但是目前您不知哪一位会说真话。现您有一次机会来问A,或者B一个问题,注意,只能向一个人问,并且只能一个人能回答您,那么这个问题您应该怎么问呢?答案:1> 可以问A: “ B 会认为哪条路是能往正确的道路?”解释: (1)如果A
2012-02-08 23:03:29 2653 2
原创 关于char字符移位问题
看下面的代码,能够猜出输出结果吗?char ch = (char)0x80;ch >>= 7;cout结果是255, 0XFF!unbelievable!,为什么呢,我作一点猜想,可能是由于编译器自身的考虑,char字符在移位的时间先将char 转换成整数,自然0x80转换成整数肯定是一个负数,所以在32位整数中前面24位肯定都是1,所以右移的时候就出现了补1的问题
2012-02-08 22:47:13 8012 2
转载 效率极低人群之七大习惯
与通常所列举的应该培养的有益习惯不同,本文在此举出的是我们最好避免的7种习惯。就像寻找对你有益的习惯一样,寻找妨碍你的习惯同样重要。这7种习惯中大多数都可能会轻易成为你日常生活的一部分,使你难以察觉它的存在(或者它如何影响到你)。我曾经略微尝试了这些习惯,结果毫无疑问,那些重要的事情没有几个可以完成。同时我也要添加说明的是,这只是在生活中你可能形成的影响效率的主要的7个习惯,我
2012-02-08 21:06:02 1601
原创 布隆过滤器在网页去重中的应用
//关于布隆过滤器在URL去重中的应用//问题背景/**假设你想从网上(新浪新闻)去下载一批网页,做信息检索(搜索引擎)的第一步.你已经从网上下载下来了一批网页,并且有这批网页的URL,不过你还有一批需要下载的网页的URL,问题是这样的,如果有些URL已经被下载过了,你就不必要再次下载了,现在让你快速的识别出哪些URL上的是还没被下载的,可以有一定的误差,但是不能超过1%。.**/
2012-02-08 16:18:56 2567
原创 多线程伪共享(false sharing)问题分析
在多核的CPU架构中,每一个核心core都会有自己的缓存空间,因此如果一个变量如果同时存在不同的核心缓存空间时,就会出现伪共享(false sharing)的问题。此时如果一个核心修改了该变量,该修改需要同步到其它核心的缓存。在linux执行cat /proc/cpuinfo 来查看cpu的缓存的行大小:cache_alignment : 64,在目前的Intel处理器中c
2012-02-07 23:13:17 9665 2
转载 C语言字符串函数大全
函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例:#include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(stri
2012-02-07 17:43:05 16970 2
原创 linux下c++多线程下统计程序运行时间(非常注意)
一般在C++程序中我们会使用clock()函数来统计程序的运行时间,格式如下:clock_t begin , end;begin = clock();//这里是要统计时间的代码end = clock();unsigned uRunTime = (end - begin) * 1.0 / CLOCKS_PER_SEC * 1000;这样就得
2012-02-05 21:00:53 10687 2
转载 C++内存池的实现实例
本节分析在某个大型应用程序实际应用到的一个内存池实现,并详细讲解其使用方法与工作原理。这是一个应用于单线程环境且分配单元大小固定的内存池,一般用来为执行时会动态频繁地创建且可能会被多次创建的类对象或者结构体分配内存。本节首先讲解该内存池的数据结构声明及图示,接着描述其原理及行为特征。然后逐一讲解实现细节,最后介绍如何在实际程序中应用此内存池,并与使用普通内存函数申请内存的程序性能作比较。
2012-02-02 13:29:19 4909
原创 判断是否为欧拉图的并行算法
欧拉图:一个图为欧拉图,当且公当有一条回路经过图的每一条边且恰好经过一次。欧拉定理表明:一个图为欧拉图,当且仅当不含有奇度数的顶。假设图G大小为M * N和邻接矩阵A。 判断一个图是否为欧拉图,很容易在O(M*N)的时间内完成。为了说明方便,下面设M = N下面给出复杂度为O(Log(N)) 并行算法,注意这里只给出理论上可行的算法。1. 计算每个点
2012-02-01 00:17:09 5936 1
Real-Time-Rendering
2015-08-17
斐波那契堆
2011-12-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人