编程之法-面试和算法心得,pdf.doc

上传人:F****n 文档编号:90921531 上传时间:2019-06-20 格式:DOCX 页数:15 大小:31.09KB
返回 下载 相关 举报
编程之法-面试和算法心得,pdf.doc_第1页
第1页 / 共15页
编程之法-面试和算法心得,pdf.doc_第2页
第2页 / 共15页
编程之法-面试和算法心得,pdf.doc_第3页
第3页 / 共15页
编程之法-面试和算法心得,pdf.doc_第4页
第4页 / 共15页
编程之法-面试和算法心得,pdf.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《编程之法-面试和算法心得,pdf.doc》由会员分享,可在线阅读,更多相关《编程之法-面试和算法心得,pdf.doc(15页珍藏版)》请在金锄头文库上搜索。

1、编程之法:面试和算法心得,pdf篇一:程序员编程艺术:面试和算法心得第二部分算法心得第四章 查找匹配有序数组的查找题目描述给定一个有序的数组,查找某个数是否在数组中,请编程实现。分析与解法一看到数组本身已经有序,我想你可能反应出了要用二分查找,毕竟二分查找的适用条件就是有序的。那什么是二分查找呢?二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。其算法流程如下:一开始,范围覆盖整个数组。 将数组的中间项与T进行比较,如果T比数组的中间项要小,则到数组的前半部分继续查找,反之,则到数组的后半部分继续查找。 如此,每次查找可

2、以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过logN次比较。此时,可能有不少读者心里嘀咕,不就二分查找么,太简单了。然编程珠玑的作者Jon Bentley曾在贝尔实验室做过一个实验,即给一些专业的程序员几个小时的时间,用任何一种语言编写二分查找程序(写出高级伪代码也可以),结果参与编写的一百多人中:90%的程序员写的程序中有bug(我并不认为没有bug的代码就正确)。也就是说:在足够的时间内,只有大约10%的专业程序员可以把这个小程序写对。但写不对这个小程序的还不止这些人:而

3、且高德纳在计算机程序设计的艺术 第3卷 排序和查找第节的“历史与参考文献”部分指出,虽然早在1946年就有人将二分查找的方法公诸于世,但直到1962年才有人写出没有bug的二分查找程序。你能正确无误的写出二分查找代码么?不妨一试,关闭所有网页,窗口,打开记事本,或者编辑器,或者直接在本文评论下,不参考上面我写的或其他任何人的程序,给自己十分钟到N个小时不等的时间,立即编写一个二分查找程序。要准确实现二分查找,首先要把握下面几个要点:关于right的赋值o right = n-1 = while = right = middle-1;o right = n = while = right = m

4、iddle;middle的计算不能写在while循环外,否则无法得到更新。以下是一份参考实现:int BinarySearchint left = 0;int right = n - 1;/如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应: /1、下面循环的条件则是while/2、循环内当 arraymiddle value 的时候,right = midwhile /循环条件,适时而变int middle = left + 1); /防止溢出,移位也更高效。同时,每次循环都需要更新。ifright = middle - 1; /right赋值,适时而变e

5、lse ifleft = middle + 1;elsereturn middle;/可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多/如果每次循环都判断一下是否相等,将耗费时间return -1;总结编写二分查找的程序时如果令 left 篇二:程序员如何快速准备面试中的算法程序员如何快速准备面试中的算法前言我决定写篇短文,即为此文。之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示:但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料。顺便也供节后

6、跳槽、3月春季招聘小高潮、及6月毕业找工作的朋友参考。备战面试中算法的五个步骤对于立志进一线互联网公司,同时不满足于一辈子干纯业务应用开发,希望在后端做点事情的同学来说,备战面试中的算法,分为五个步骤,如下: 1、掌握一门编程语言首先你得确保你已掌握好一门编程语言:C的话,推荐Dennis M. Ritchie & Brian W. Kernighan合著的C程序设计语言,和C和指针;C+ 则推荐C+ Primer,深度探索C+对象模型,Effective C+ 。 掌握一门语言并不容易,不是翻完一两本书即可了事,语言的细枝末节需要在平日不断的编程练习中加以熟练。2、过一遍微软面试100题系列

7、我从20XX年起开始整理微软面试100题系列,见过的题目不可谓不多,但不管题目怎般变化,依然是那些常见的题型和考察点,当然。不考察任何知识点。纯粹考察编程能力的题目也屡见不鲜。故不管千变万化,始终不离两点:看你基本知识点的掌握情况;编程基本功。而当你看了一遍微软面试100题之后(不要求做完,且这个系列的有些答案存在不少问题,建议以编程艺术github版 为准),你自会意识到:数据结构和算法在笔试面试中的重要性。3、苦补数据结构基础如果学数据结构,可以看我们在大学里学的任一本数据结构教材都行,包括链表、数组、字符串、矩阵、树、图等等,如果你觉得实在不够上档次,那么可以再看看STL源码剖析。4、看

8、算法导论算法导论上的前大部分的章节都在阐述一些经典常用的数据结构和典型算法(如二分查找,快速排序、Hash表),以及一些高级数据结构(诸如红黑树、B树),如果你已经学完了一本数据结构教材,那么建议你着重看贪心、动态规划、图论等内容,这3个议题每一个议题都大有题目可出。同时,熟悉常用算法的时间复杂度。如果算法导论看不懂,你可以参看本博客。5、刷leetcode或cc150或编程艺术系列如主要在国外找工作,推荐两个面试编程网站:一个是,而后这个网站的创始人写了本书,叫careercup cracking coding interview,最终这本英文书被图灵教育翻译出版为程序员面试金典。若如果是国

9、内找工作,则郑重推荐我编写的程序员编程艺术,有艺术博客版,以及在博客版本基础上精简优化的编程艺术github版。除此之外,还可看看编程之美,与剑指offer。而不论是准备国内还是国外的海量数据处理面试题,此文必看:教你如何迅速秒杀掉:99%的海量数据处理面试题。此外,多看看优秀的开源代码,如nginx或redis,多做几个项目加以实践之,尽早实习(在一线互联网公司实习3个月可能胜过你自个黑灯瞎火摸爬滚打一年)。当然,如果你是准备社招,且已经具备了上文所说的语言 & 数据结构 & 算法基础,可以直接跳到本第五步骤,开始刷leetcode或cc150或编程艺术系列。后记学习最忌心浮气躁,急功近利,

10、即便练习了算法,也不一定代表能万无一失通过笔试面试关,因为总体说来,在一般的笔试面试中,70%基础+ 30%coding能力,故如果做到了上文中的5个步骤,还远远不够,最后,我推荐一份非算法的书单,以此为大家查漏补缺:1. 深入理解计算机系统2. Stevens著的TCP/IP详解三卷,UNIX网络编程二卷,UNIX环境高级编程:第2版,详见此豆瓣页面;3. 你如果要面机器学习一类的岗位,建议看看相关的算法(如支持向量机通俗导论(理解SVM的三层境界),及老老实实补补数学基础,包括微积分、线性代数、概率论与数理统计(除了教材,推荐一本数理统计学简史)、矩阵论(推荐矩阵分析与应用)等.综上:上述

11、全部过程短则半年,长则三年。最后要强调的是:急功近利者必败,越想快速越要循序渐进,踏实前进,若实在觉得算法 & 编程太难,转产品、运营、测试、运维、前端、设计都是不错的选择,因为虽然编程有趣,但不一定人人适合编程。篇三:编程之算法入门算 法 设 计 题 集第一章 算法初步第一节 程序设计与算法一、算法算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,则相应有算法,但这并不是说问题就有结果。上述的“可行”,是指对算法的研究。待解问题的描述待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的。例如,使用数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可

12、依据相应严格的模型对问题求解。 算法设计算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法。常用的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等。 算法分析算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。 算法的复杂度分时间复杂度和空间复杂度。时间复杂度:在运行算法时所耗费的时间为f。空间复杂度:实现算法所占用的空间为g(也为n的函数)。称O)和O)为该算法的复杂度。二、程序设计 程序程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构

13、算法程序。 程序设计程序设计就是设计、编制和调试程序的过程。 结构化程序设计结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计。由这种方法产生的程序是结构良好的。所谓“结构良好”是指: ()易于保证和验证其正确性; ()易于阅读、易于理解和易于维护。按照这种方法或准则设计出来的程序称为结构化的程序。“逐步求精”是对一个复杂问题,不是一步就编成一个可执行的程序,而是分步进行。 第一步编出的程序最为抽象;第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象; ?第i步编出的程序比第i-1步抽象级要低; ?直到最后,第n步编出的程序即为可执行的程序。 所谓“抽象

14、程序”是指程序所描述的解决问题的处理规则,是由那些“做什么”操作组成,而不涉及这些操作“怎样做”以及解决问题的对象具有什么结构,不涉及构造的每个局部细节。这一方法原理就是:对一个问题(或任务),程序人员应立足于全局,考虑如何解决这一问题的总体关系,而不涉及每局部细节。在确保全局的正确性之后,再分别对每一局部进行考虑,每个局部又将是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精的。采用逐步求精的优点是:()便于构造程序。由这种方法产生的程序,其结构清晰、易读、易写、易理解、易调试、易维护; ()适用于大任务、多人员设计,也便于软件管理。 逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的方法。例求两自然数,其和是667,最小公倍数与最大公约数之比是120:1 、(232,435))。 解两个自然数分别为m和667-m。 处理对象:m、l、g(两数的最大公约数)。处理步骤:对m从到333检查l与g的商为120,且余数为0时,打印m与667-m 。 第一层抽象程序: Program TwoNum; Varm,l,g:integer;Begin for m:=2 to 333 dobegin l:=lcm; 求最小公倍数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号