摘要:6月14日消息,苹果公司在招聘员工时,会向求职者问一些“可汗学院”(Khan Academy)提出的考验智商的谜题。你可能没听说过“可汗学院”,但“可汗学院”的谜题被苹果采用一定是有其道理的。可汗学院由孟加拉裔美国人萨尔曼•可汗(Salman Kahan)创立,是一家由谷歌和比尔&梅琳达•盖茨基金会背后支持的教育性非营利组织,主旨在于利用网络影片进行免费授课,目前已经有关于数学、历史、金融、物理、化学、生物、天文学等科目的内容。苹果在面试过程中随时都有可能向求职者抛出这些考验智商与逻辑的问题,因此如果你向往进入苹果工作,这些艰涩的问题在面试前必须谨慎对待仔细研究,因为苹果的原则是——不 阅读全文
转:trie树--详解
2013-09-04 22:04 by youxin, 508 阅读, 0 推荐, 收藏,
摘要:前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie性质好多人说trie的根节点不包含任何字符信息,我所习惯的trie根节点却是包含信息的,而且认为这样也方便,下面说一下它的性质 (基于本文所讨论的简单trie树)1.字符的种数决定每个节点的出度,即branch数组(空间换时间思想)2.branch数组的 阅读全文
Trie三兄弟——标准Trie、压缩Trie、后缀Trie
2013-09-04 17:13 by youxin, 1735 阅读, 0 推荐, 收藏,
摘要:1.Trie导引Trie树是一种基于树的数据结构,又称单词查找树、前缀树,字典树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。用于存储字符串以便支持快速模式匹配,主要应用在信息检索中,Trie支持的主要查询操作是模式匹配和前缀匹配。Trie树可以看着是一个确定有限状态自动机,有限状态自动机另一篇博文字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽有介绍。在计算机科学中,trie,又称前缀树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一 阅读全文
Boyer–Moore (BM)字符串搜索算法
2013-09-04 15:24 by youxin, 718 阅读, 0 推荐, 收藏,
摘要:在计算机科学里,Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。它的效率来自于这样的事实:对于每一次失败的匹配尝试,算法都能够使用这些信息来排除尽可能多的无法匹配的位置。假设被检索文字列是“1234567890”,检索文字列是“MO 阅读全文
位运算技巧4
2013-09-03 21:48 by youxin, 543 阅读, 0 推荐, 收藏,
摘要:位运算进制转换:要求:分别实现十进制整数按二进制、十六进制输出。两种方法实现按二进制输出:方法1:由于整数在计算机中是按二进制存储的,我们只需要将其每个bit按顺序打印出来即可,如果某位为1,则打印字符‘1’,否则打印字符‘0’。我给出的代码如下:void printBinary(int num){ for(int i=0;i>(31-i))&1); //cout bits(num); for(int i=31;i>=0;i--) { cout=0;i-=4) { int tmp=num>>i; tmp=tmp&... 阅读全文
c++ bitset使用
2013-09-03 19:27 by youxin, 2062 阅读, 0 推荐, 收藏,
摘要:A bitset is a special container class that is designed to store bits (elements with only two possible values: 0 or 1,trueorfalse, ...).bitset是一个特殊的容器专... 阅读全文
cout输出各种进制
2013-09-03 19:15 by youxin, 596 阅读, 0 推荐, 收藏,
摘要:cout使用:int main(){int a=10;cout(a)<<endl;getchar();return 0;}C++ 操作符注:下面的scientific 和 fixed不能同时使用double a=123.456789012345;对a赋初值(1) cout<<a;输出: 123.456(2) cout<<setprecision(9)<<a;输出: 123.456789(3) cout<<setprecision(6);恢复默认格式(精度为6)(4) cout<< setiosflags(ios∷fixed 阅读全文
cout输出流的执行顺序
2013-09-03 19:11 by youxin, 512 阅读, 0 推荐, 收藏,
摘要:一道题目:#include using namespace std;int g = 0;templateint foo(){ int value = ++g; return value;}int main(){ cout () () () () ()的值为1,再计算foo()的值为2,。。。所以输出是4321。 阅读全文
内存对齐理解
2013-09-03 17:41 by youxin, 553 阅读, 1 推荐, 收藏,
摘要:每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。vs默认是#pragma pack(8)注意gcc默认是#pragma pack(4),并且gcc只支持1,2,4对齐。。1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从 阅读全文
算法导论:用2个栈实现一个队列,用2个队列实现一个栈
2013-09-03 09:59 by youxin, 978 阅读, 0 推荐, 收藏,
摘要:用2个栈实现一个队列:转的一篇文章:大多数人的思路是:始终维护s1作为存储空间,以s2作为临时缓冲区。入队时,将元素压入s1。出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。见下面示意图:上述思路,可行性毋庸置疑。但有一个细... 阅读全文
浙公网安备 33010602011771号