自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zzran的专栏

学会等待。。。

  • 博客(27)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 最常公共子序列的动态规划求法

假设X={x1.x2,...xm}, Y={y1,y2,...yn}为两个序列,并设Z={z1,z2,z3...zk}为X,Y的一个最常公共子序列。则有:(1)xm=yn的时候zk=xm=yn而且Zk-1是Xm-1和Yn-1的一个LCS(2)xm!=yn的时候,zk!=xm,蕴含Z是Xm-1和Y的一个LCS(3)xm!=yn的时候,zk!=yn,蕴含Z是X和Yn-1的一个LCS下面

2012-10-31 21:32:18 909

原创 ASCII码表

ASCII码表 (0~255)2008-11-24 22:22:54Dec Hex Char 0 0 NUL (null)1 1 SOH (start of heading)2 2 STX (start of text)3 3 ETX (end of text)4 4 EOT (end of transmission)5 5 ENQ (enquiry)6 6 ACK (ackno

2012-10-31 17:50:07 1687

原创 Parallel In-Place Merge

Merging sorted arrays in parallel and in place can be done very efficiently, using this algorithm. Comparisons with the performance of similar STL functions are included.IntroductionIn my ar

2012-10-29 21:27:56 1856

原创 block swaping 原地归并排序的基础(in-place parallel merge sort)

这三种方法均验证过,结果很准确。个人最喜欢第三种方法,就是reversal那种,简单明了,而且速度还很快,看具体应用于哪种场合。Algorithms for swapping blocks of data appear simple, but vary widely in their performance profiles. Choosing the right one can be

2012-10-29 20:16:47 2264

原创 三元查找树-插入和查找的速度快于hash表

原文看着还是挺简单的,所以就没做翻译,同时水平有限,可能翻译过来时候一些细节的内容就会丢失,还有,原网站是国外的,需要注册,而且很麻烦,源码下载不下来,故原文中的一些函数不知道实现的细节,此当给大家拓展写思路吧,最后附上我自己实现的代码。还有,不要嫌文章太长,可以花一段时间去阅读,你会感受到老外思维的缜密,我们应该学习人家什么地方。When you have to store a set of

2012-10-28 10:51:02 5046

原创 在O(n)时间内找到数组中的第i小的元素

这个是一个叫做randomized-select的算法,这个算法巧妙地运用了快速排序的特性。同时这个算法的期望时间为O(n).这是算法导论上的一节内容,为了方便理解,所以就写给出算法的伪代码,并加以解释: RANDOMIZED-SELECT(A, p, r, i)1 if(p==r)2 return A[p];3 q=RANDOMIZED-PARTITION(A,p,r);

2012-10-25 20:18:03 4808 4

原创 同时寻找一个数组中的最大元素和最小元素--你会有所收获

给定一个数组a,含有n,寻找这个数组中的最大元素和最小元素,刚看到这个题目的时候,觉得这个问题没什么思考性,因为这个问题很简单,就是设定一个初始最大值和初始最小值,然后循环遍历数组,进行比较,至多会在2(n-1)的时间内找到最大值和最小值。下面给出一种分析的方法,使得这个问题能够在3*(n/2)内结束。首先要判定n是奇数还是偶数,如果是奇数的话,假设min=max=a[1].然后遍历数组,但是

2012-10-25 12:05:08 3631

原创 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)

粗糙的给出了分析,最近比较累,以后会改进的。题目中包括三个小的问题,由简单到复杂:1,如果只有一个出现一次,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全部做异或运算,那么出现两次的数字全部异或掉了,得到的结果就是只出现一次的那个数字。2,如果有两个只出现一次的数字,设定为a,b。也是应用异或,但是数组元素全部异或的结果x

2012-10-24 21:09:14 14716 6

原创 http返回码的含义

态代码 状态信息 含义  100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)  101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)  200 OK 一切正常,对GET和POST请求的应答文档跟在后面。201 Created 服务器已经创建了文档,Location头给出了它的

2012-10-23 14:38:26 1161

转载 字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。

源博文地址:http://blog.csdn.net/wumuzi520/article/details/8087501字母a-z,数字0-9,现需要其中任意3个作为密码,请输出所有可能组合。首先,看到这问题的时候我们就会想到动态规划。先给出比较简单的例子,就是给定1,2,3,4,5个数字,选出3个数字进行打印。从后往前分析:先分两种情况,如果选择5,那么剩下的两个可以从1,2,3,4中选

2012-10-22 20:49:12 8223

原创 给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,0.5,8

#include#include#includefloat get_max(float a,float b,float c){ if(a>b) { if(a>c) return a; else return c; } else { if(b>c) return b; else return c; }}float get_min(flo

2012-10-21 21:50:30 1582

原创 判断整数序列是不是二元查找树的后序遍历结果

二元查找树的定义为:(1)若左子树不空,则左子树上所有节点的值均小于其根节点的值。(2)若右子树不空,则右子树上所有节点的值均小于其跟节点的值(3)其左右子树也均为二叉查找树。那么先给定一个数字序列5、7、6、9、11、10、8,判断这个序列是否是二元查找树的后根遍历。可以回想一下后序遍历的性质,先访问左子树,然后访问右子树,最后访问根节点。结合以上这些性质,就可以理解到,应该从给

2012-10-21 19:57:01 2837 1

原创 求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。

用递归算法写一个函数,求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1。这个是原题目的要求,本人现在水平不高,所采用了非递归的形式。递归的会在有想法后给出。下面贴上代码,共大家参考:#include#includeint get_max_char_count(char *s,char *ret){ assert(s!=NULL); c

2012-10-21 19:04:08 3049

原创 长度为1的线段,随机在其上选择两点,将线段分为三段,问这3个字段能组成一 个三角形的概率是多少

http://blog.csdn.net/qibaoyuan/article/details/5978325这是引用博客的地址,作者分析的很好,但是为了清晰还是说明一点,就是把x,y的取值放在坐标轴上进行考虑,从0到1的那段。那三条边的长度就为x,y-x,1-y。假设我们选择的两个点的坐标是x和y(先假设x 那么由三角形两边和大于第三边的性质,有: x+y-x>1-y

2012-10-19 17:32:06 10741 1

原创 1000瓶水中找 出有毒的那瓶,毒性一周后发作,一周内最少需要多少只老鼠

这个题是对bit位的应用,1000接近1024,所以需要10个bit位,对瓶子进行编号,从0到999,这样需要10只老鼠。瓶子的编号分别为:00000,0000000000,0000100000,00010,00000,0001100000,0010100000,00111。。。。。。11111,00111同时给老鼠编号,从1,2,...10,从低位开始,让第n

2012-10-17 22:28:41 5729 4

原创 如何找到一个数组中的两个数,他们的和为0

这个题目我的想法是首先对数组进行排序,应用快速排序。排好顺序之后,设定两个指针,一个指向数组的前端,一个指向数组的末端,然后两个数相加,如果大于0,则后端指针向前移动,如果小于0,则前面指针向后移动。因为这样的数组中肯定会有负数的。如果等于0,则找到两个数,并打印出来。这个解法的时间复杂度为O(nlogn)+O(n).下面给出代码,如果有不正确的地方,希望大家指出。#includeint par

2012-10-17 21:04:42 2993

原创 不要使用库函数,写出void *memcpy(void *dst, const void *src, size_t count),其中dst是目标地址,src是源地址。

拷贝的时候要注意源内存地址和目的地址之间的关系,就是源内存地址和目标地址是否交叉。1,如果没有交叉的情况,那直接循环拷贝就可以了。2,如果有交叉的情况,交叉的情况也分为两种第一种如图所示:这种情况是:src>=dst&&src第二种如图所示:这种情况就是:dst>src&&dst下面以数组:int arr[] = {0, 1, 2, 3, 4, 5, 6

2012-10-17 09:51:15 5981 5

原创 对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为?

这个题主要考察的是对haffman树的解法。先给出代码,因为其中还有点小错误,但是影响不大。#include #include#includetypedef struct HuffmanNode{ unsigned int weight; int parent,lchild,rchild;}HuffmanNode,*HuffmanTree;typedef char ** H

2012-10-16 17:19:19 5223 1

原创 给定一个整数,打印出它的所有素数因子--两种方法,两种效率。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。(2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。先给出代码,然后我在解释这个

2012-10-16 13:45:31 25261 2

转载 一种计算机,其有如下原子功能

100、一种计算机,其有如下原子功能:1、赋值   a=b2、+1操作,++a; a+1;3、循环,但是只支持按次数的循环   for(变量名){/*循环里面对变量的修改不影响循环次数*/}4、只能处理0和正整数5、函数调用    fun(参数列表)请用伪代码的形式分别在这个计算机上编程实现变量的加法、减法、乘法。fun_add(a , b){}fun_

2012-10-16 11:29:57 1335

原创 一个数是否是另一个数的平方

这个题目肯定不能用sqrt这个函数,如果用了话就违背了本题的考察点。为了解析这个题目,给出一个数学公式:(n+1)^2=n^2+(2n+1)(n+1)^2=(n-1)^2+[2(n-1)+1]+(2n+1).....(n+1)^2=1+(2*1+1)+(2*2+1)+...+[2(n-1)+1]+(2n+1)可以自己动手验证这个公式的正确性。下面给出代码:(注:下面的代

2012-10-16 10:56:07 3339

原创 输出一个字符串中没有重复的字符。如“baaca”输出“bac”。

这个问题同样是应用hash映射。直接给出代码:#include#includevoid filtrate(char *s){ int hash[256]={0}; int len=strlen(s); int i; for(i=0;i<len;i++) hash[s[i]]++; for(i=0;i<len;i++) if(hash[s[i]]!=0) { p

2012-10-15 21:40:16 1818 3

原创 atof的实现

atof是atoi的拓展实现,本人用c语言实现的,挺简单的,只是为了能够记录自己的学习历程,或者能给大家帮上一下小忙,心里就满足了。#include#include#includeint is_digit(char ch){ if(ch>='0'&&ch<='9') return 1; else return 0;}int is_space(char ch){ if

2012-10-15 21:11:48 7582

原创 一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程

这个解法主要引子一篇博客的解答,我只是实现,方法引于:http://blog.csdn.net/yahohi/article/details/7985328。我实现了第二种方法。解法一:使用hash_map和链表。 首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,

2012-10-15 17:52:14 6149 3

原创 在一个字符串中找到第一个只出现一次的字符

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。这个问题能够让我们想起hash表,因为包括汉字或者其他字符在内的所有字符都可以用16个bit也就是两个字节表示,所以总共有256个字节。要想求出一个字符串中第一个只出现一次的字符,首先是要统计每个字符出现的次数,然后在重新遍历字符数组,找到第一个hash表值为1的对应的字符。这也是hash表的应用。#includ

2012-10-09 17:09:28 3652 2

原创 fibonacci数列和跳台阶问题

首先百度之后知道,fibonacci数列其实在科学中有着广泛的应用,下面一句话引子百度百科:在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。了解fibonacci数列的人都知道它的推到公式:   0                       n=0f(n)=1                       n=1         f(n-1)+f(n-2)   n>

2012-10-09 15:28:12 1005

原创 判断输入的字符串是否为ip地址

首先给出一个c函数的原型:int sscanf(const char *buffer,const char *format,[argument ]...)它的返回值是参数的数据,也就是argument的个数,buffer:存储的数据,format:格式控制字符串,argument:选择性设定字符串。这个程序从标准流读取数据,可以进行无限制的输入。下面贴出代码,然后引出另外一个问题,将字符串ip转换

2012-10-08 12:41:51 4736

an efficient implemention of double array trie

这个是一个double-array的实现,就是用数组来存储trie,以减少空间的利用率。

2013-01-06

单词资源文件

用于海量数据处理的英文单词,大概在1m左右,没有太大的。

2012-12-27

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

TA关注的人

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