文章分类 - 算法与基础技术
摘要:From:http://blog.csdn.net/orbit/article/details/7062218 RLE(Run Length Encoding)行程长度压缩算法(也称游程长度压缩算法),是最早出现、也是最简单的无损数据压缩算法。RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于第一种情况,对连续的重复数据块进行压缩,压缩方法就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据。对于第二种情况,RLE算法有两种处理方法,一种处理方法是用和第一种情况一样的方法处理连续的不重复数据块,仅仅是表示块数的属性总是1;另
阅读全文
摘要:【题 目】某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄进行排序,可以使用O(1)的辅助空间。【思 路】在数据结构和算法的学习中,排序肯定是重中之重,然而仔细回想我们学习过的排序算法,无论是冒泡排序,归并排序,插入排序,希尔排序,甚至著名的快速排序,时间复杂度都达不到O(n),这些算法的时间复杂度要么为O(n2),要么为O(nlogn),然而这道题却要求我们用O(n)的时间复杂度排序,到底是什么原因呢? 通过简单的思考,我们发现,员工虽然有几万名,但是要排序的年龄却不是只有几万种,我们考虑一个人正常的工作年龄22——60岁,再发到范围也 不过0——99岁(夸张了点.
阅读全文
摘要:华丽的递归——将正整数表示为平方数之和来自:http://www.cnblogs.com/KBTiller/archive/2011/12/04/2275232.html题目:There live square people in a square country.Everything in this country is square also.Thus, the Square Parliament has passed a law about a land.According to the law each citizen of the country has a right to buy
阅读全文
摘要:http://mitpress.mit.edu/sicp/full-text/sicp/book/SICP课本全文。录像:http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/MIT计算机入门课。Structure and Interpretation of Computer Programs
阅读全文
摘要:常见OJ评判结果对照表,作为ACMer你懂得!Waiting:你的程序刚刚提交,正在等待OJ评测你的程序。Compiling:OJ正在编译你的程序。Accepted:OK!你的程序是正确的 ^_^。Wrong Answer:你的程序运行的结果和正确结果不同。状态页面CASE那一览显示的是你的程序在第几个样例上出错的。Time Limit Exceeded:你的程序运行时间太长了,超过了对应题目的时间限制。Memory Limit Exceeded:你的程序运行所用的内存太多了,超过了对应题目的限制。Output Limit Exceeded:你的程序输出了太多的内容了,超过了OJ的限制,轻检查
阅读全文
摘要:Map Reduce – the Free Lunch is not over?分类:网络程序设计软件架构2010-01-30 13:04316人阅读评论(1)收藏举报现在已经进入了一个张口就是“今天你云了没?”的时代,应该好好研究研究大规模数据存储和处理了,像google的map reduce技术,开源的hadoop;map reduce的思想来自于函数式编程语言,看来要想进步提高,还得眼界开阔啊!转载一篇孟岩关于map reduce的文章。Map Reduce – the Free Lunch is not over?微软著名的C++大师Herb Sutter在2005年初的时候曾经写过一
阅读全文
摘要:一致性hash算法(consistent hashing)张亮consistent hashing算法早在1997年就在论文Consistent hashing and random trees中被提出,目前在cache系统中应用越来越广泛;1基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用方法计算object的hash值,然后均匀的映射到到N个cache;hash(object)%N一切都运行正常,再考虑如下的两种情况;1一个cache服务器m down掉了(在实际应用中必须要考虑这种情况),这样
阅读全文
摘要:【算法08】数对之差的最大值 题目:数组中,数字减去它右边(不要求相邻)的数字得到一个数对之差。求所有数对之差的最大值。例如:数组{2, 4, 1, 16, 7, 5, 11, 9},数对之差的最大值是11,是16-5的结果。 分析1:这道题我们同样可以用遍历的方法,固定一个数字,然后逐一减去它右边的数字,得到各个数对之差,然后比较选出最大值;对于数列中的每一个数字做如此操作,然后去所有最大值的最大值。然而和所有枚举算法的弊端一样,这样的算法效率比较低,所有的数对只差共有n*(n-1)/2,因而时间复杂度为O(n^2)。 分析2:联想到我们在“【算法05】左旋转字符串中”将一个大的字符分...
阅读全文
摘要:红黑树之前看了很多写红黑树的博客,但是感觉都讲的不太清楚!没说这样操作如何使他保持平衡的,于是疑惑重重,就看不下去了,一次不经意看到一个人说维基百科的红黑树讲的好,我就随便点了一下一看——这下疯了~,怎么讲的这么好!可以说是把一个复杂的问题,讲得简单化!这太幸福了!于是我就慢慢学会了!强烈推荐维基的这个讲解,再也找不到比这还好的讲解了!不知道它上边其它的怎么样,反正这个很好!!既然学会了,走过来了,我也要留下脚印!下面将是我对红黑树的总结,里面的性感的图片都是维基百科红黑树上的^_^!我讨论的红黑树需建立在会平衡二叉树的基础上去学,即若不懂“旋转”操作,请看平衡二叉树的旋转操作。红黑树(RBT
阅读全文
摘要:红黑树维基百科,自由的百科全书红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。这不只是使它们在时间敏感的应用如实时应用
阅读全文
摘要:Learn Vim Progressivelytl;dr: Want to learn vim (the best text editor known to human kind) the fastest way possible. I suggest you a way. Start by learning the minimal to survive, then integrate slowly all tricks.Vim the Six Billion Dollar editorBetter, Stronger, Faster.Learn vim and it w...
阅读全文
摘要:【算法06】顺时针打印矩阵题目:给定一个矩阵,从外向内顺时针打印矩阵中的每一个数字。例如:给定矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出应该为:{1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10}分析:这道题的意思非常直观,给人的感觉也是so easy,然而实际去做的时候会发现,如果结构划分的不好,会出现很多的循环,而且包括对各种边界条件的判定,题目不难,但是给人的感觉——很烦!我分享一下,我做这道题的思路。循环条件怎么判定?一个矩阵,给定起点(startX,startY)和终点(endX,endY)(即位于...
阅读全文
摘要:数学之美——快排为什么快(转载)转载标签:杂谈目录0. 前言1. 猜数字2. 称球3. 排序3.1 为什么堆排比快排慢3.2 为什么快排其实也不是那么快3.3 基排又为什么那么快呢4. 信息论!信息论?5. 小结0.前言知道这个理论是在TopLanguage上的一次讨论,先是g9转了David MacKay的一篇文章,然后引发了牛人们的一场关于信息论的讨论。Anyway,正如g9很久以前在Blog里面所说的:有时无知是福。俺看到一点新鲜的科普也能觉得造化神奇。刚才读Gerald Jay Sussman(SICP作者)的文章,Building Robust Systems – an essay,
阅读全文
摘要:【算法05】左旋转字符串题目:字符串的左旋转操作:把字符串前面的若干字符移到字符串的后面。例如:字符串abcdefg左旋转2位得到cdefgab。请实现左旋转字符串函数,要求对于长度为n的字符串,时间复杂度为O(n),辅助内存为O(1)。分析1:看到这道题我们最直观的思路就是:如果要把长度为n的字符串左移k位,那么我们可以动态分配长度为k的临时数组,存储前面k个字符,然后将后面的字符逐一向前移动k位,然后将临时数组中的字符拷贝到后面k位。但是这种方法使用的k个额外位置产生了过大的存储空间的消耗。分析2:我们也可以定义一个子函数,该函数的功能是将一个字符串左旋转1位(其时间正比于n),然后调用该
阅读全文
摘要:高效率编辑器 VIM-操作篇,非常适合 VIM 新手2007-01-27ToyPosted inFeatured,Text Editor,TutorialsRSSTrackback虽然从很久前就开始用 VIM 了,但一直都是半调吊子,翻来覆去只用自己会的命令。最近为了提高书写代码的效率,还有 coding 时候的乐趣,又重新钻研了一下 VIM,发现了一篇很好的 VIM 入门的文章,原文是英文版的,我觉得非常适合 VIM 使用入门,所以翻译了过来。这里是简单的介绍了 VIM 的操作方式,并没有说为什么要用 VIM,如果你想知道答案可以去 Google,VIM 被誉为编辑器之神。这篇教程写了在不同
阅读全文
摘要:【算法01】寻找丑数 题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。 分析:寻找一个数是不是满足某种数(质数,水仙数)等,最简单的方法就是遍历,对于任意一个丑数必定可以写成2^m*3^n*5^p,因而对于一个丑数,只含有2,3,5因子,也就意味着该数number%2==0;number%3==0;number%5==0,如果一个数能被2整除,我们就连续除以2;能被3整除,我们就连续除以3;能被5整除,我们就连续除以5;如果最后得到1,则该数是素数..
阅读全文
摘要:O/R Mapping 基本概念(欢迎指正)Posted on 2005-07-04 16:16idior阅读(14725)评论(36)编辑收藏近日 有关o/r m的讨论突然多了起来. 在这里觉得有必要澄清一些概念, 免的大家讨论来讨论去, 才发现最根本的理解有问题.本文并不保证所有观点正确, 只是个人在某一特定时期的理解.1. 何谓Entity?实体(类似于j2ee中的Entity Bean)通常指一个承载数据的对象, 但是注意它也是可以有行为的! 只不过它的行为一般只操作自身的数据. 比如下面这个例子:classPerson{stringfirstName;stringlastName;p
阅读全文
摘要:OR Mapping的数据模式程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论。O/R Mapping的概念也就应运而生了。为什么要提出O/R Mapping概念 程序语言已经由面向过程的模型全面转向为面向对象的模型,UML的出现更加革新了软件开发方法论。然而 数据库模型却从未随着开发语言的进步而随之革新,仍然使用面向关系的数据库模型。关系模型对现实世界的建模通常是不可能的,反过来讲,现实世界的对象实体 必须转变成行和列的格式存放在数据库中,这样使得面向对象的开发方法论的优势无法全面呈现出来,应用程序简洁性也遭受到损害。 程序语言已经由面向过程的模..
阅读全文
摘要:演化架构和紧急设计: 利用可重用代码,第 1 部分代码与设计之间的关系Neal Ford, 软件架构师, ThoughtWorks Inc.通过本系列的前几期,您已经知道,我的观点是软件的每个部分都包括可重用的代码块。 例如,公司处理安全性的方式在整个应用程序甚至多个应用程序中可能都是一致的。 这就是我所说的惯用模式的实例。这些模式代表对构建软件特定部分时遇到的问题的常用解决方案。惯用模式有两种类型:技术模式—— 包括事务、安全性和其他基础结构元素。域模式—— 包括单个应用程序内或跨多个应用程序的业务问题的解决方案。在前几期中,我将大部分注意力放在如何发现这些模式上面。但是,发现模式之后,必须
阅读全文
浙公网安备 33010602011771号