`
binbin8497
  • 浏览: 46417 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

百度笔试题二

阅读更多

1编程:

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

 

2 编程:

用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。

 

3 英文拼写纠错:

在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包含了正确英文单词的词典,请你设计一个拼写纠错的程序。

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

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

(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。

 

4 寻找热门查询:

搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。

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

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

 

5 集合合并:

给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}

要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出

{aaa bbb ccc ddd hhh},{eee fff}, {ggg}

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

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

(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。

////////////////////////////////1

1 题

char *revert(char * str)

{

int n=strlen(str);

int i=0;

char c;

for(i=0;i<n;i++)

{

c=str;

str=str[n-i];

str[n-i]=c;

}

return str;

}

 

///////////////////////////////////

 

2 题

void * memmove(void *dest,const void *src,size_t n)

{

assert((dest!=0)&&(src!=0));

char * temp=(char * )dest;

char * ss=(char * )src;

int i=0;

for(;i<N;I++)

{

*temp++=*ss++;

}

return temp;

}

 

/////////////////////////////////////////////////

 

3 题

(1)思路 :

字典以字母键树组织,在用户输入同时匹配

(2)

流程:

每输入一个字母:

沿字典树向下一层,

a)若可以顺利下行,则继续至结束,给出结果;

b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);

算法:

1.在字典中查找单词

字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母

一个字母匹配.算法时间就是单词的长度k.

2.纠错算法

情况:当输入的最后一个字母不能匹配时就提示出错,简化出错处理,动态提示

可能 处理方法:

(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;

(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可

以有更多的)

根据分析字典特征和用户单词已输入部分选择(a),(b)处理

复杂性分析:影响算法的效率主要是字典的实现与纠错处理

(a)字典的实现已有成熟的算法,改进不大,也不会成为瓶颈;

(b)纠错策略要简单有效 ,如前述情况,是线性复杂度;

(3)改进

策略选择最是重要,可以采用统计学习的方法改进。

 

//////////////////////////////////////////////

 

4 题

(1)思路:

用哈希做

(2)

首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度

(注意值与日志项对应关系)

选出前十的频度,取出对应的日志串,简单不过了。

哈希的设计是关键。

 

//////////////////////////////////////////////////

 

5 题

(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,就终止。

 

(2)处理流程:

1.将集合按照大小排序,组成集合合并待处理列表

2.选择最小的集合,找出与之有交集的集合,

如果有,合并之;

如果无,则与其它集合是独立集合,从待处理列表 中删除。

3.重复直到待处理列表为空

算法:

1。将集合按照大小从小到大排序,组成待处理的集合列表。

2。取出待处理集合列表中最小的集合,对于集合的每个元素,依次在其他集合中搜索

是否有此元素存在:

1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置 。转3。

2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集合列表。转3。

3。如果待处理集合列表不为空,转2。

如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。

算法复杂度分析:

假设集合的个数为n,最大的集合元素为m,排序的时间复杂度可以达到n*log(n)

然后对于元素在其他集合中查找,最坏情况下为(n-1)*m

查找一个集合是否与其他集合有交集的最坏情况是m*m*(n-1)

合并的时间复杂度不会超过查找集合有交集的最坏情况。

所以最终最坏时间复杂度为O(m*m*n*n)

需要说明的是:此算法的平均时间复杂度会很低,因为无论是查找还是合并,都是处于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先与最大的集合进行比较,这些都最大的回避了最坏情况。

 

(3)可能的改进:

首先可以实现将每个集合里面的字符串按照字典序进行排列,这样就可以将查找以及合并的效率增高。

另外,可能采取恰当的数据结构也可以将查找以及合并等操作的效率得到提高。

分享到:
评论

相关推荐

    百度历年笔试题

    百度笔试题常常涉及到算法与数据结构的运用,如排序算法(快速排序、归并排序等)、查找算法(二分查找、哈希查找)以及常用的数据结构(链表、栈、队列、树、图)。这些基础知识是解决问题的基础,熟练掌握能提高...

    百度笔试题 百度 笔试题

    【百度笔试题】中的知识点主要涉及三个方面:编程题、算法题和系统设计。下面将分别对这三个方面进行详细的解析。 1. **编程题** 这道编程题要求编写一个函数`is_include(char *a, char *b)`,判断字符串`b`的所有...

    嵌入式软件笔试题合集.zip

    嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集嵌入式软件笔试题合集...

    百度笔试题 百度笔试题

    【百度笔试题】涵盖的内容广泛,涉及编程、算法、系统设计等多个方面,下面将逐一解析这些题目中的知识点。 1. **编程题 - 字符串判断**: 这道题目要求编写一个函数来判断字符串b的所有字符是否都在字符串a中出现...

    百度笔试题——一套完整的百度笔试题

    【百度笔试题】是应聘者在申请百度职位时可能会遇到的测试内容,涵盖了一系列的编程基础知识,主要包括排序算法、多线程同步、内存管理、网络协议、数据结构和操作系统等主题。下面是对这些知识点的详细解释: 1. *...

    百度笔试题(含部分参考答案)

    这些题目涵盖了计算机科学和软件工程中的多个核心概念,主要涉及数据结构、算法、操作系统、网络协议、编程语言特性和软件开发技术。以下是每个题目及其相关的知识点详解...准备这样的笔试题可以提高在IT行业的竞争力。

    08百度笔试题(北京)

    【标题解析】:“08百度笔试题(北京)”指的是2008年百度公司在北京市进行的一次技术笔试,主要针对系统开发工程师等职位。题目旨在考察应聘者的编程能力、算法理解和系统设计思维。 【描述解析】:16号的百度北京...

    腾讯百度笔试题

    "腾讯百度笔试题"集合了这两家互联网巨头历年来的技术笔试题目,覆盖了多个关键领域,如C语言、数据结构和操作系统等。这些知识点是计算机科学和技术专业学生以及求职者必须掌握的基础。 首先,让我们深入探讨C语言...

    百度最全笔试题

    【数据结构与算法】:在Java笔试题中,常见数据结构如数组、链表、栈、队列、树、图等,以及排序(如冒泡排序、快速排序、归并排序)和查找(如二分查找、哈希查找)算法的实现和应用是重点考察内容。对于复杂度分析...

    百度笔试试题(很齐全)

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点:...以上知识点覆盖了笔试题目中的主要内容,包括函数设计、数据结构与算法、计算机基础知识等多个方面,旨在帮助考生全面掌握相关领域的核心概念和技术细节。

    百度笔试试题(不容易)

    2. **baidu.rar** - 这个RAR文件可能是包含多份历年百度笔试题目的压缩包,可能包括不同部门、不同级别的面试题目,考生可以通过解压来获取更丰富的学习材料。 3. **质量部笔试题.rar** - 明确指出是质量部的笔试...

    百度笔试题---数据库

    在本文中,我们将深入探讨数据库相关知识,特别是针对百度笔试题中的几个SQL查询和数据库优化策略。首先,我们来看题目提供的关系模式: User(userId, userName) - 用户关系,包含用户ID和用户名。 Article...

    百度笔试题汇总 doc格式

    本人收集的几套百度笔试题。 doc格式,需要找工作的可以看看

    百度笔试题 百度 技术笔试

    ### 百度笔试题知识点解析 #### 选择题解析 **1. 在以下选项中,哪一个不是编程语言?** A. Shell B. 鲢 C. 直译 D. 选 - **答案:B. 鲢** - **解析:**在给出的选项中,“鲢”并非一种编程语言。“Shell”是一种...

    2007百度笔试题.txt

    ### 2007百度笔试题解析 #### 选择题 1. **题目**: 在以下选项中,哪个关键字与其他三个不同? - A. Shell - B. 鲢 - C. 法 - D. 选 **知识点**: - 这个问题显然存在一定的误导性。在计算机领域,“Shell...

    百度历年的笔试题汇总

    有txt格式的,有的是俺在网上搜的网页直接保存下来的。有的题目给出了参考答案,不过不一定正确。我当初笔试的是质量部的软开,笔试题附其中了,其余的更多是运维部的笔试题吧。

    2012年百度笔试题

    百度 笔试题 2012

    百度技术笔试题

    很好的百度笔试题,想去百度的人可以做一下,预预热

    百度笔试题面试题集总

    在IT领域,面试和笔试题通常涵盖了计算机科学的基础知识,包括数据结构、算法、数据库理论以及编程语言的应用。以下是对给定文件中提到的一些知识点的详细解释: 1. **堆和栈的区别**: - **堆**:动态内存分配的...

    百度公司笔试题

    从给定的百度公司笔试题中,我们可以提炼出多个IT领域的知识点,主要集中在数据结构、算法、编程语言特性以及操作系统原理上。以下是对这些知识点的详细解析: ### 数据结构与算法 1. **排序算法的特性**:题目...

Global site tag (gtag.js) - Google Analytics