Interview Questions

Given a binary search tree, design an algorithm which creates a linked list of all the nodes at each depth (eg, if you have a tree with depth D, you’ll have D linked lists).    link

 

程序员编程艺术系列  link

 

当今世界最为经典的十大算法--投票进行时  link

 

Algorithm to find top 10 search terms  link   pdf   很可能在面试中问到,比较开放性,可以问  occurs most frequently in the sequence.

 

 

Primality Testing : Non-deterministic Algorithms   topcoder

 

 


Google面试题中的两道趣题   link       others  link

 

看看下面两道题,它的解答非常简单,即使没学过信息学的人也可以想到答案。你能在多短的时间内想出问题的算法来?一小时?一分钟?一秒钟?

1. 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。

2. 给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法运算。

 

 

 

TopCoder的一些题目  link

topcoder 真题讲解  link

 

 

假如P=NP,世界将会怎样?

 

 

link

 

 《来自圣经的证明》收集了数十个简洁而优雅的数学证明,迅速赢得了大批数学爱好者的追捧。如果还有一本《来自圣经的算法》,哪些算法会列入其中呢?最近,有人在 StackExchange 上发起了提问,向网友们征集那些来自圣经的算法。众人在一大堆入围算法中进行投票,最终得出了呼声最高的五个算法:

第五名: BFPRT 算法
    1973 年, Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan 集体出动,合写了一篇题为 “Time bounds for selection” 的论文,给出了一种在数组中选出第 k 大元素的算法,俗称"中位数之中位数算法"。依靠一种精心设计的 pivot 选取方法,该算法从理论上保证了最坏情形下的线性时间复杂度,打败了平均线性、最坏 O(n^2) 复杂度的传统算法。一群大牛把递归算法的复杂度分析玩弄于骨掌 股掌之间,构造出了一个当之无愧的来自圣经的算法。


第四名:快速排序
    快速排序算法是 1960 年由英国计算机科学家 C.A.R. Hoare 发明的,是一种既高效又简洁的排序方法,现在已是学习算法的必修内容之一。快速排序的思想并不复杂,妙就妙在那个线性的数据分割过程,而真正最牛 B 的则是对整个算法的时间复杂度分析。我曾写过一个快速排序平均 O(n log n) 的证明 ,分析过程绝对值得欣赏。

 
第三名:并查集
    严格地说,并查集是一种数据结构,它专门用来处理集合的合并操作和查询操作。并查集巧妙地借用了树结构,使得编程复杂度降低到了令人难以置信的地 步;用上一些递归技巧后,各种操作几乎都能用两行代码搞定。而路径压缩的好主意,更是整个数据结构的画龙点睛之笔。并查集的效率极高,单次操作的时间复杂 度几乎可以看作是常数级别;但由于数据结构的实际行为难以预测,精确的时间复杂度分析需要用到不少高深的技巧。

 
第二名: KMP 算法
    KMP 算法是一种非常有效的字符串匹配算法,它告诉了人们一个有些反直觉的事实:字符串匹配竟然能在线性时间里完成!整个算法写成代码不足 10 行,但其中蕴含的天才般的奇妙思想让算法初学者们望而却步,而它的复杂度分析则更是堪称经典。

 
第一名:辗转相除法
    辗转相除法是 Euclid 的《几何原本》中提到的一种寻找两个数的最大公因数的算法。无论是简洁的算法过程,还是深刻的算法原理,抑或是巧妙的复杂度分析,都称得上是来自圣经的算 法。而扩展的辗转相除法则构造性地证明了,对任意整数 a 和 b ,存在一对 x 、 y 使得 ax + by = gcd(a, b) 。这一结论的普遍性和实用性让它成为了数论中的基本定理之一,在很多数学问题中都能看到它的身影。

 

 

 

我的USACO心得


 程序员编程艺术第一~十章集锦与总结--面试、算法、编程 link


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值