算法/数据结构
文章平均质量分 75
syzcch
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跳表SkipList 简介
. 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lists: a probabilistic alternative to balanced trees,在该论文中详细解释了跳表的数据结构和插入删除操作。William Pugh同时还是Find转载 2012-10-09 09:33:54 · 1314 阅读 · 0 评论 -
基于B族树的关系型数据库IO瓶颈分析
前言传统关系型数据库,也就是建立在关系模型基础之上的数据库。关系型数据库本身基于关系代数的数学理论,关系模型是70年代埃德加·科德首次提出的,而该模型成为了关系型数据库的基础。目前市面上众多的传统关系型数据库均是基于B族树实现的,至于传统关系型数据库的众多特性这里就不进行论述了,在这里只想分析一下基于B族树的传统关系型数据库的IO瓶颈。基于B族树的数据库IO瓶颈分析磁盘原创 2013-01-01 11:26:57 · 2890 阅读 · 0 评论 -
二分查找位运算——32位整数中寻找第一个为1的位
问题描述在程序设计中经常会遇到这样一个问题,即在一个32位整数中,从右到左寻找第一个为1的位。这样的问题是很常见的,而面对这样一个问题,一种常见的解法就是逐位的遍历这个整数中的所有位,直到遇到了为1的位。若第一个为1的位出现在高位区域,逐位查找比较的方法会比较非时间。换一种思路当我们在一个数组中寻找某数的时候,我们有什么办法?简单的顺序的遍历整个原创 2012-12-13 09:47:50 · 6463 阅读 · 8 评论 -
递归生成集合的全排列
题目描述递归,生成集合的全排列,也是在笔试面试中经常考的问题。全排列问题一般要求递归或非递归的解决,非递归按序输出集合的全排列在我的另一篇博客中有介绍(http://blog.youkuaiyun.com/syzcch/article/details/8136218),这里主要介绍递归生成集合全排列的方法。递归思路递归的解这道题的方法相对于非递归的解法来说较为简原创 2012-12-10 09:34:10 · 1844 阅读 · 0 评论 -
算法——求数组中最大子数组和
题目有一输入数组,数组里面的数字都是整数,可能为正,可能为负,也可能是0,要求该输入数组中最大子数组的和。题目分析面对这样的一个问题,首先需要仔细分析问题的条件与问题所求。这个问题提供了一个输入数组,里面会有若干个元素,每个元素可以为正数,可以为负数,也可以为0。而题目要求输出该数组中最大子数组的和,注意是要求连续相邻的若干元素组成的子数组,并且保证该子数组的和最大。原创 2012-11-20 11:02:05 · 1944 阅读 · 4 评论 -
算法——字节高低位交换
问题对一个字节数据,逐个交换其高低位,例如11010001,经过0-7,1-6,2-5,3-4对应位的交换,变成10001011 。解决思路对于该问题,我们最先想到的是对原字节通过移位操作来逐位处理,使用另一个变量来存储交换后的结果。这种解决方案处理起来思路清晰,编写代码应该不难。下面是该思路对应的代码:unsigned char shift_fun1(un原创 2012-11-15 08:50:08 · 27858 阅读 · 15 评论 -
在升序数组中选取2个数,使其和等于一个输入数字n
题目描述这是一道某互联网公司的面试题,输入为一个以按升序排序好的数组和一个数字n,要求在数组中查找两个数,使得他们的和正好等于那个输入数字n。如果有多对数字的和等于n,输出任意一对即可。朴素解法使用两个变量i和j,利用两层循环遍历数组,当遇到data[i]+data[j]等于输入数字,并且i不等于j的时候,输出data[i]和data[j],即找到了所求的两个数字。下面是这种解法的代码原创 2012-10-16 11:12:35 · 2243 阅读 · 1 评论 -
动态规划解决跳台阶问题
问题描述某互联网公司的一道面试题,题目是一个人上台阶,台阶有n级,他可以一次上1级,可以一次上2级,也可以一次上3级,问上这个n级的台阶一共有多少种上法。问题分析首先我们先归纳分析一下一些比较简单的情况:如果台阶只有1级,那么他一次就可以上去,很显然,上法只有1种;如果台阶有2级,那么他可以1-1,也可以直接上到2级,这时一共有2种上法;如果台阶有3级,那么他可以1原创 2012-11-13 12:52:16 · 3288 阅读 · 0 评论 -
Gray Code实现按序产生集合的所有子集
简介Gray Code,是几十年前贝尔实验室的科学家Frank Gray提出的一种编码方案,当时主要用于传输信号以防止出错。Gray Code 除了在通信,硬件设计领域中应用以外,在计算机相关科学的其他方面也有广泛的应用,例如按序产生集合的所有子集。Gray Code实现按序产生集合的所有子集子集的按序产生,这个概念很简单,举个例子,假设我们的集合为{a,b,c},那么按序产生原创 2012-08-26 18:45:09 · 2219 阅读 · 1 评论 -
C编程小技巧——结构体强制类型转换
问题前些天看一款数据库语法解析器的代码,其中的词法分析语法解析阶段,利用一个结构体存储所解析的SQL语句的类型,然后根据这个类型将改结构体强制转换为对应的另一结构体并赋值给他,以便做进一步的执行工作。举个简单的例子:存储语法解析后数据的结构体(注意,其只有一个元素)为:struct analyse{int type;};我们约定的不同的type代表不同的SQ原创 2012-11-06 10:38:56 · 6983 阅读 · 3 评论 -
TCMalloc : Thread-Caching Malloc
http://goog-perftools.sourceforge.net/doc/tcmalloc.html作者: Sanjay Ghemawat, Paul Menage 动机TCMalloc要比glibc 2.3中的malloc(所在库为ptmalloc2),以及我测试过的其他版本的malloc要快。在2.8 GHz P4机器上,ptmalloc2大约需要300纳翻译 2012-10-25 15:51:10 · 2353 阅读 · 0 评论 -
非递归,按序输出集合的全排列
题目描述非递归,按序输出集合全排列,是在笔试面试中经常考的问题。递归输出集合的全排列相对来说还是比较简单的,而非递归实现这个问题需要一些小技巧。全排列是将集合中的元素(可以为数字,可以为字符),按照字典序生成所有排列的集合,并输出这些排列。以数字集合距离,集合{1,2,3}的按序全排列为:1 2 31 3 22 1 32 3 13 1 23 2 1这样3个元原创 2012-11-02 12:26:27 · 3146 阅读 · 5 评论 -
利用CAS操作(Compare & Set)实现无锁队列
关于CAS等原子操作在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock free)的数据结构。这个操作用C语言来描述就是下面这个样子:(代码来自Wikip转载 2012-10-19 16:35:59 · 19317 阅读 · 0 评论 -
Merkle Hash Tree
Merkle Hash Tree 简介上图(来自Wikipedia[1])给出了一个二进制的哈希树(二叉哈希树, 较常用的tiger hash tree也是这个形式). 据称哈希树经常应用在一些分布式系统或者分布式存储中的反熵机制(Anti-entropy),也有称做去熵的.这些应用包括 Amazon的Dynamo 还有Apache的Cassandra数据库, 通过去熵可以去做到各转载 2012-10-10 09:40:41 · 6616 阅读 · 0 评论 -
算法——递归生成集合的所有组合
题目描述输入一个集合,需要生成该集合所能得出的所有组合。举例说明:若输入集合为{1,2} , 需要生成的组合有{1},{1, 2},{2} 。该题目与生成集合的全排列有很多相似之处,同样也是一个很经典的问题。解决思路在我前面的一篇文章:Gray Code实现按序产生集合的所有子集 http://blog.youkuaiyun.com/syzcch/article/det原创 2013-01-06 11:36:32 · 4273 阅读 · 1 评论
分享