数据结构和算法
jackfirst86
这个作者很懒,什么都没留下…
展开
-
模式匹配 -- KMP 算法原理与实现
模式匹配的一种改进算法----KMP算法 这种改进算法是D.E.Knuth与V.R.Pratt和J.H.Morris同时发现的,因此人们称它为克努特-莫里斯-普拉特算法(简称为KMP算法)。该算法可以在O(n+m)的时间数量级上完成串的模式匹配操作。其改进在于:每当一趟匹配过程中出现字符比较不等时,不需回溯i指针,而是利用已经得到的‘部分匹配’的结果将模式向右‘滑动’尽可能原创 2010-05-05 13:12:00 · 776 阅读 · 0 评论 -
几种经典的Hash算法实现
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希转载 2011-07-26 14:37:21 · 782 阅读 · 0 评论 -
数据相似性检测算法
<br />1、引言<br /> "数据同步算法研究"一文研究了在网络上高效同步数据的方法,其中有个前提是文件A和B非常相似,即两者之间存在大量相同的数据。如果两个文件相似性很低,虽然这种方法依然可以正常工作,但数据同步性能却不会得到提高,甚至会有所降低。因为会产生部分元数据转载 2011-04-01 09:53:00 · 1358 阅读 · 0 评论 -
数值交换算法
常见的有三种方法:(1)使用临时变量 (2)不使用中间变量,仅使用加法运算 (3)不使用中间变量,使用异或XOR操作#include template void swap_var(T &a, T &b){ T tmp; tmp = a; a = b; b = tmp;} template void swap_add(T &a, T &b){ a = a - b; b = a + b; a = b - a;}template voi原创 2011-04-01 10:42:00 · 429 阅读 · 0 评论 -
字符串Hash函数评估
<br />Hash查找因为其O(1)的查找性能而著称,被对查找性能要求高的应用所广泛采用。它的基本思想是:<br />(1) 创建一个定长的线性Hash表,一般可以初始化时指定length;<br /><br />(2) 设计Hash函数,将关键字key散射到Hash表中。其中hash函数设计是最为关键的,均匀分布、冲突概率小全在它;<br /><br />(3) 通常采用拉链方法来解决hash冲突问题,即散射到同一个hash表项的关键字,以链表形式来表示(也称为桶backet);<br />原创 2011-04-01 09:54:00 · 614 阅读 · 0 评论 -
高效存储技术研究
<br />1 引言<br />物质、能量和信息是自然科学研究的三个基本对象,处理、传输和存储是信息计算的三大基本任务。随着信息化技术水平的不断提高,数据已经取代计算成为了信息计算的中心,数据将成为企业最终有价值的财富。1998年图灵奖获得者Jim Gray曾断言:现在每18个月新增的存储量等于有史以来存储量之和。根据预测,2020年数据宇宙将达到35.2 ZB(1 ZB = 1百万PB),比2009的0.8ZB增加44倍。在如此强大的实际需求推动下,人们不断追求海量存储容量、高性能、高安全性、高可用性、可转载 2011-04-01 09:49:00 · 510 阅读 · 0 评论 -
重复数据删除(De-duplication)技术研究
<br />1、Dedupe概述<br /> De-duplication,即重复数据删除,它是一种目前主流且非常热门的存储技术,可对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。如下图所示。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。Dedupe技术可以带许多实际的利益,主要包括以下诸多方面:<br /> (1) 满足ROI(投资回报率,Return On Investment)/TCO(总持有成本,Total Cost of O转载 2011-04-01 09:48:00 · 625 阅读 · 0 评论 -
重复数据删除(De-duplication)技术研究
<br />1、Dedupe概述<br /> De-duplication,即重复数据删除,它是一种目前主流且非常热门的存储技术,可对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。如下图所示。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。Dedupe技术可以带许多实际的利益,主要包括以下诸多方面:<br /> (1) 满足ROI(投资回报率,Return On Investment)/TCO(总持有成本,Total Cost of O转载 2011-04-01 09:47:00 · 505 阅读 · 0 评论 -
重复数据删除(De-duplication)技术研究
<br />1、Dedupe概述<br /> De-duplication,即重复数据删除,它是一种目前主流且非常热门的存储技术,可对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。如下图所示。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。Dedupe技术可以带许多实际的利益,主要包括以下诸多方面:<br /> (1) 满足ROI(投资回报率,Return On Investment)/TCO(总持有成本,Total Cost of O转载 2011-04-01 09:47:00 · 461 阅读 · 0 评论 -
数据同步算法研究
<br />1、引言 <br /> 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像、备份、复制、同步,数据下载、上传、共享等等,最为简单的做法自然就是对数据进行完全复制。然而,数据在网络上来回被复制多次后就会存在大量副本,很多情形下这些文件副本之间仅有很小的差异,很可能是从同一个文件版本演化而来。如果对文件进行完全复制,在文件较大的情况下,会占用大量网络带宽,同步时间也会较长。目前,广域网WAN的带宽与访问延迟仍然是急需解决的问题,完全复制使得很多网络应用无法提供良好的服务质原创 2011-04-01 09:45:00 · 480 阅读 · 0 评论 -
区间模糊排序
<br />问题描述<br /> <br /> 考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是n个形如[a(i), b(i)]的闭区间(这里小括后起下标的作用,后同),其中a(i) <= b(i)。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排列<i(1), i(2), ..., i(n)>,使得存在一个c(j)属于区间[a(i(j)), b(i(j))],满足c(1) <转载 2011-03-28 17:47:00 · 468 阅读 · 0 评论 -
有关字符串翻转的问题总结
<br />原题1:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。<br />原题2:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。<br />例如输入“I am a student.”,则输出“student. a am I”。<br />第2道题曾经在转载 2011-03-28 16:06:00 · 426 阅读 · 0 评论 -
第一个只出现一次的字符--总结
<br />题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。<br />思路:我的想法和原文作者的基本是一样的,就是用hash表来统计字符串中每个字符出现的次数。我和他的做法不一样的地方在于,原文作者是通过第二次遍历字符串来得到第一个只出现一次的字符,而我的想法是,维护一个链表,最后通过遍历这个链表得到满足条件的字符。两种方法其实差不多。<br />我的代码:<br />#define HASH_LEN 256 struct node{ char转载 2011-03-28 16:04:00 · 363 阅读 · 0 评论 -
模糊排序问题(Fuzzy sort)
<br />算法导论第2版的7-6,首先理解题目就花了n久,从网上找了些思路,下面具体来说<br />题目内容:<br />考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是n个形如[ai, bi]的闭区间,其中ai<= bi。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排列<i1, i2, ..., in>,使得存在一个cj属于区间[aij, bij],满足c1 <= c2 <=转载 2011-03-28 17:46:00 · 2387 阅读 · 0 评论 -
15道海量数据处理的问题,牛人不牛人都可以试试!
1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 2. 有10个文件,每个文件1G, 每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序 3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词 4. 海量日志数据,提取出某日访问百度次数最多的那个IP。5.2.5亿个整数中找出不重复的整数,内存空间不足以容纳这转载 2011-03-28 14:09:00 · 587 阅读 · 0 评论 -
直面经典:重温KMP(不着一图,尽得精髓)
<br /> KMP 算法,每一个初学者都曾被它搞迷糊,在数据结构教材上,这个算法出现的如此之早,你怎能指望一个还没搞懂二叉树遍历的人来理解KMP呢,记得越快,忘得越快。直到多年以后回过头来看看,这才发现KMP算法如神谕般震撼了我。实在无法想象当初Knuth、Pratt、Morris三人竟然同时发现了它。 <br /><br />我们假设一个场景,你手上拿着一串红蓝两种颜色的珠子,墙上挂着一串更长的珠子,同样是红蓝两色的,你的任务就是找出和你手中珠子排列顺序相同的一段。 <br /><br />最转载 2011-02-24 17:39:00 · 454 阅读 · 0 评论 -
3 Awesome Free Math Programs
http://math-blog.com/2007/06/02/3-awesome-free-math-programs/Mathematical software can be very expensive. Programs like Mathematica, Maple and Matlab are incredibly powerful, flexible and usually well documented and supported. Their price tags however are转载 2010-09-19 08:39:00 · 521 阅读 · 0 评论 -
欧几里德算法及其扩展算法
一、欧几里德算法1、欧几里德算法概述: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gc原创 2011-07-26 15:38:58 · 1935 阅读 · 0 评论