问题集

 三个警察三个囚徒过河问题

三个警察和三个囚徒共同旅行。一条河挡住了去路,河边有一条船,但是每次只能载2人。存在如下的危险:无论在河的哪边,当囚徒人数多于警察的人数时,将有警察被囚徒杀死。问题:请问如何确定渡河方案,才能保证6人安全过河。


设计DNS服务器中cache的数据结构

设计一个DNS的Cache结构,要求能够满足每秒5000以上的查询,满足IP数据的快速插入,查询的速度要快。

(题目还给出了一系列的数据,比如:站点数总共为5000万,IP地址有1000万等等)


将多个集合合并成没有交集的集合

给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。

(1) 请描述你解决这个问题的思路;

(2) 请给出主要的处理流程,算法,以及算法的复杂度

(3) 请描述可能的改进。


有两个文件,各含50M和500个url,找出共同的URI

一个大的含有 50M 个URI的记录,一个小的含有 500个 URI的记录,找出两个记录里相同的URI。


芯片测试

有 2000 块芯片,已知好芯片比坏芯片多。请设计算法从其中找出一片好芯片,说明你所用的比较次数上限。其中,好芯片和其它芯片比较时,能正确给出另一块芯片是好还是坏。坏芯片和其它芯片比较时,会随机的给出好或是坏。


用C语言将字符串在原串上倒序

用C语言实现一个Reverse函数。功能是将输入的字符串在原串上倒序后返回。


删除所有ascii编码的字符和数字

已知一个字串由GBK汉字和ascii编码的数字和字母混合组成,编写c语言函数实现从中去掉所有ascii编码的字母和数字(包括大小写),要求在原字符串上返回结果。

例如:“http://www.csdn.com/liuning800203”会变成“://../”。

注:函数接口为:int filter_ascii(char* gbk);汉字的GBK编码范围是0x8140-0xFEFE。


判断URL类型

编写一个C语言函数,要求输入一个URL,输出该URL是首页、目录页或者其他URL
如下形式叫做首页:
militia.info/
www.apcnc.com.cn/
http://www.cyjzs.comwww.greena888.com/
如下形式叫做目录页:
http://hi.baidu.com/mianshiti/
thursdaythree.net/greenhouses--gas-global-green-house-warming/ 
请注意:
1)URL有可能带http头也有可能不带
2)动态URL(即含有"?"的URL)的一律不算目录页,如:
www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/


找出给定字符串对应的序号

序列Seq=[a,b,…z,aa,ab…az,ba,bb,…bz,…,za,zb,…zz,aaa,…] 类似与excel的排列,任意给出一个字符串s=[a-z]+(由a-z字符组成的任意长度字符串)。

请问s是序列Seq的第几个。


找出第k大的数字所在的位置

写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。


找出满足条件的数组

给定函数d(n) = n + n的各位之和,n为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如93可以看成由78生成。

定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。


对正整数得到 1 需要操作的次数

实现一个函数,对一个正整数 n,算得到 1 需要的最少操作次数。操作规则为:如果 n 为偶数,将其除以 2;如果 n 为奇数,可以加 1 或减 1;一直处理下去。
例子:

func(7) = 4,可以证明最少需要4次运算

n = 7

n-1 6

n/2 3

n-1 2

n/2 1

要求:实现函数(实现尽可能高效) int func(unsign int n);n 为输入,返回最小的运算次数。

给出思路(文字描述),完成代码,并分析你算法的时间复杂度。


找出 N! 后面 0 的个数

对任意输入的正整数 N,求 N! 的尾部连续 0 的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续 0 的个数是 3。

(不用考虑数值超出计算机整数界限的问题)


判断两棵树是否相等

请实现两棵树是否相等的比较,相等返回 1,否则返回其他值,并说明算法复杂度。

数据结构为:

typedef struct_TreeNode{
  char c;
  TreeNode *leftchild;
  TreeNode *rightchild;
}TreeNode;

函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);
注:A、B两棵树相等当且仅当Root->c==RootB-->c,而且A和B的左右子树相等或者左右互换相等


正向最大匹配分词

在100万个数中找最大的前100个数。


找出被修改过的数字

n个空间(其中n<1M),存放a到a+n-1的数,位置随机且数字不重复,a为正且未知。现在第一个空间的数被误设置为-1。已经知道被修改的数不是最小的。请找出被修改的数字是多少。

例如:n=6,a=2,原始的串为5, 3, 7, 6, 2, 4。现在被别人修改为-1, 3, 7, 6, 2, 4。现在希望找到5。


session和cache的区别

session和cache的区别是什么?


从海量日志中提取访问百度次数最多的IP

海量日志数据,提取出某日访问百度次数最多的那个IP。


将query按照出现的频度排序

有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。如何按照query的频度排序?


找出数组中出现次数超过一半的数

现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。


从两个文件(各含50亿个url)中找出共同的url

给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?


如何找出字典中的兄弟单词

给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。

现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?


蚂蚁爬杆

有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米这五个位置上各有一只蚂蚁,木杆很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还是右是任意的,他们只会朝前走或掉头,但不会后退,当两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走,假设蚂蚁们每秒钟可以走1厘米的距离。

求所有蚂蚁都离开木杆的最小时间和最大时间。


从300万信息中检索最热门的前10条

输入信息是一个字符串,从300万信息中,统计最热门的前10条。每次输入的一个字符串为不超过255byte,内存使用只有1G。

请描述思想,写出算法(C语言),空间和时间复杂度。


从输入URL到显示网页,后台发生了什么

当在浏览器中输入一个 url 后回车,后台发生了什么?

分成如下几个阶段:

1,输入地址。如果不是第一次访问该页面,那么直接从浏览器缓存获得该页面。否则,从服务器获得。这步会依次查找浏览器缓存,系统缓存,路由器缓存,ISP DNS缓存,根域名服务器;
2,发出HTTP请求。利用TCP/IP协议,向服务器发送HTTP请求,然后等待服务器响应;
3,服务器响应该请求。服务器响应该请求,返回页面内容;
4,浏览器解析页面。由于采用异步回发,浏览器在解析页面时,可能仍然会向服务器端发出HTTP请求,与服务器进行交互。

参看:

1)关于HTTP协议:http://www.w3.org/Protocols/rfc2616/rfc2616.txt
2)关于HTTP协议的实验:http://blog.csdn.net/liuning800203/category/733280.aspx
3)Wiki:http://zh.wikipedia.org/wiki/Asp.net#.E5.8F.83.E8.80.83.E8.B3.87.E6.96.99

posted @ 2011-06-06 06:47  船长&CAP  阅读(529)  评论(0编辑  收藏  举报
免费流量统计软件