摘要:
1在一个字符串中找到第一个只出现一次的字符,如输入abac,则输出b本题看似很简单,开个长度为256的表,对每个字符hash计数就可以了,但很多人写的代码都存在bug,可能会发生越界访问。这是C/C++语言上的一个陷阱,C/C++中的char有三种类型:char、signed char和unsigned char。char类型的符号是由编译器指定的,一般是有符号的。在对字符进行hash时,应该先将字符转为无符号类型,不然,下标为负值时,就会出现越界访问。另外,可以用一个cache数组,记录当前找到的只出现一次的字符,避免对原字符串进行第二次遍历。char get_first_only_one( 阅读全文
文章分类 - 数据结构与算法(转)
MySQL索引背后的数据结构及算法原理
2012-03-30 05:05 by Rollen Holt, 5017 阅读, 收藏,
摘要:
原文地址:http://www.codinglabs.org/html/theory-of-mysql-index.html#nav-2-1摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。第 阅读全文
从Trie树(字典树)谈到后缀树(10.28修订)
2012-03-30 04:53 by Rollen Holt, 2084 阅读, 收藏,
摘要:
作者:July、yansha。出处:http://blog.csdn.net/v_JULY_v。引言 常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两个问题。 第一个问题: 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。 之前在此文:海量数据处理面试题集锦与Bit-map详解中给出的参考答案:用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平均长度),然后是找出出现最频繁的前10个词。也可以用堆来实现(. 阅读全文
KMP字符串模式匹配详解
2011-06-03 10:32 by Rollen Holt, 516 阅读, 收藏,
摘要:
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一.简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int pos ){/*若串S中从第pos(S的下标0≤pos<StrLength(S))个字符起存在和串T相同的子串,则称匹配成功,返回第一个这样的子串在串S中的下标,否则返回-1*/int i = pos, j = 0;while ( S[i+j] != '/0'&&am 阅读全文
(转)排序和算法总结
2011-04-28 01:15 by Rollen Holt, 753 阅读, 收藏,
摘要:
1. 基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。2. 排序过程:【示例】: 初始关键字 [49 38 65 97 76 13 27 49]第一趟排序后 13 [38 65 97 76 49 27 49]第二趟排序后 13 27 [65 97 76 49 38 49]第三趟排序后 13 27 38 [97 76 49 65 49]第四趟排序后 13 27 38 49 [49 97 65 76]第五趟排序后 13 27 38 49 49 [97 97 76]第六趟排序后 13 27 38 49 49 76 [76 阅读全文
寻找总和为n的连续子数列之算法分析
2011-03-19 00:23 by Rollen Holt, 309 阅读, 收藏,
摘要:
作者:lzprgmr来源:博客园发布时间: 2011-03-15 11:58阅读: 102 次原文链接全屏阅读 [收藏] 看到有这么道算法题在博客园讨论,算法eaglet和邀月都已经设计出来了,花了点时间读了下,学到点东西顺便记录下来吧。 题目是从1...n的数列中,找出总和为n的连续子数列。 这里先设好算法中需要用到的关键变量:s:目标子数列的第一个元素k:目标子数列的长度 那么目标子数列可以表示为(s, k) 1. naive算法(n^2) 最笨的,但是最容易的想到的方法,就是穷举所有的子数列:for s = 1 to n for k = 1 to n-s+1 if sum(s, k) = 阅读全文
常见算法笔试或面试题
2010-12-16 12:56 by Rollen Holt, 513 阅读, 收藏,
摘要:
源文档:http://www.cnblogs.com/zhenjing/archive/2010/10/18/1854020.htmlProblem 1: Is it a loop ? (判断链表是否有环?) Assume that wehave a head pointer to a link-list. Also assumethat we know the list is single-linked. Can you come up an algorithm to checkwhether this link list includes a loop by using O(n) tim 阅读全文
140个Google的面试题
2010-12-16 12:01 by Rollen Holt, 558 阅读, 收藏,
摘要:
本文来源:http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.html(墙)某猎头收集了140多个Google的面试题,都张到他的Blog中了,主要是下面这些职位的,因为被墙,且无任何敏感信息,所以,我原文搬过来了。Product Marketing ManagerProduct ManagerSoftware EngineerSoftware Engineer in TestQuantitative Compensation AnalystEngineering ManagerAdWords 阅读全文
8皇后问题
2010-12-16 00:36 by Rollen Holt, 1304 阅读, 收藏,
摘要:
八皇后问题是一个古老而著名的问题,它是回溯算法的典型例题。该问题是十九世纪德国著名数学家高斯于1850年提出的:在8行8列的国际象棋棋盘上摆放着 八个皇后。若两个皇后位于同一行、同一列或同一对角线上,则称为它们为互相攻击。在国际象棋中皇后是最强大的棋子,因为它的攻击范围最大,图6-15显示 了一个皇后的攻击范围。图6-15 皇后的攻击范围现在要求使这八个皇后不能相互攻击,即任意两个皇后都不能处于同一行、同一列或同一对角线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的 象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。现代教学中,把八皇后问题当成一个经典 阅读全文
堆区和堆栈的浅谈
2010-12-16 00:35 by Rollen Holt, 2611 阅读, 收藏,
摘要:
一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后由系统释放。4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放 阅读全文
红黑树的介绍和实现1
2010-12-16 00:34 by Rollen Holt, 2903 阅读, 收藏,
摘要:
一、红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种。二叉搜索树在最坏的情况下可能会变成一个链表(当所有节点按从小到大的顺序依次插入后)。这种低效产生的原因是树没有维持一定的平衡性,要提高搜索效率,就要想办法来维持树左边的平衡,也就是要尽时降低树的高度,可行的做法就是用一些策略在每次修改树的内容之后都调整树的结构,使之满足一定的平衡条件。其中一种满足一定平衡条件而且目前应用广泛的是红黑树。它可以在每一次插入或删除节点之后都会花O(log N)的时间来对树的结构作修改,以保持树的平衡。而红黑树的查找方法与二叉搜索树完全一样,也能够在O(log N) 阅读全文
[转载][答案V0.2版]精选微软等数据结构+算法面试100题[1-20]
2010-12-16 00:31 by Rollen Holt, 528 阅读, 收藏,
摘要:
原文地址:[答案V0.2版]精选微软等数据结构+算法面试100题[1-20]作者:叛逆年少精选微软等数据结构+算法面试100题--答案公布-------我很享受思考的过程,个人思考的全部结果,都放在了这篇帖子上,[整理]精选微软等数据结构+算法面试100题现在,我要,好好整理下,这篇帖子我已做出来的题目答案 了。展示自己的思考结果,我觉得很骄傲。:)。----------------------------------------------------------2010年 10月18日下午 July--------------------------------1.把二元查找树转变成排序的 阅读全文
[转载]算法王帖:精选经典的24个算法 [3.BFS和DFS优先搜索]
2010-12-16 00:29 by Rollen Holt, 1017 阅读, 收藏,
摘要:
原文地址:算法王帖:精选经典的24个算法[3.BFS和DFS优先搜索]作者:叛逆年少算法王帖:精选经典的24个算法[2.Dijkstra算法]算法王帖:精选经典的24个算法[1.A*搜索算法]-------------------------------------------------翻遍网上,关于此类BFS和DFS算法的文章,很多。但全都是抄来抄去,最后,都说不出个所以然来。此文,我自作主张,加精。读完此文,我想,你对图的广度优先搜索和深度优先搜索定会有个通通透透,彻彻底底的认识。---------------------首先,看下算法导论一书关于 此DFS 深度优先搜索算法和 BFS 阅读全文
KMP字符串模式匹配详解1
2010-12-16 00:28 by Rollen Holt, 368 阅读, 收藏,
摘要:
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一.简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int pos ){int i = pos, j = 0;while ( S[i+j] != '\0'&& T[j] != '\0')if ( S[i+j] == T[j] )j ++;//继续比较后一字符else{i ++; j = 0;//重新开始新的一轮匹配}if ( T[j] == '\0')re 阅读全文