ImageVerifierCode 换一换
格式:PPT , 页数:100 ,大小:4.25MB ,
资源ID:1379878      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1379878.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(July面试算法讲座PPT.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

July面试算法讲座PPT.ppt

1、面试 算法 机器学习July,西电华为创新俱乐部2014-9-3,晚7:009:?,2,本次讲座大纲,第一部分、面试笔试面试考什么解决笔试面试题的常用算法常用算法的时间复杂度O(N)时间复杂度内能解决的问题第二部分、算法如何学习算法循序渐进(KMP)相互串联(以Trie树、后缀树,贪心、动态规划为例)追本溯源(二叉树、红黑树、2-3-4树、B树为例)海量数据处理面试题十种解决之道第三部分、机器学习SVM的简单介绍,与SMO的简单推导,3,以前的不足,对着PPT 一本正经念到底堆砌知识、没有要害100页PPTPPT上字多、不够一目了然体力不支、互动太少,4,第一部分、面试,5,笔试面试考什么,6

2、,笔试偏基础,语言基础int hope;int*hope;double(*p)3;void(*func)();操作系统线程与进程的区别产生死锁的条件如何规避死锁C+内存分配堆、栈、自由存储区、全局/静态存储区,常量存储区网络协议TCP建立连接的三次握手数据库概率论与数理统计推荐数理统计学简史,7,面试偏算法,数据结构上的增删改查查找、遍历、排序算法分治、递归、回溯贪心、动态规划海量数据处理,8,基于各个数据结构上的增删改查,字符串字符串库函数的编写,例如atoi 等字符串查找、翻转、匹配数组查找(如二分查找、杨氏矩阵查找)链表翻转、遍历、查找、删除、合并Hash表查找树遍历(前序、中序、后序)

3、set、map高级树的查找(红黑树、B树、R树)图遍历查找(DFS、BFS)最短路径算法,9,知道了考什么,怎么破,10,笔试面试常用算法,穷举(递归回溯)“万能的”求n个数的全排列&8皇后(N皇后问题)分治分而治之,然后归并递归回溯DFS空间换时间hashtable巧用数据结构堆能排序,考虑排序前后两个指针往中间扫若已经排好序,想想有无必要二分不能排序贪心最小生成树 Prim,Krusal最短路 dijkstra动态规划如 01背包问题,每一步都在决策细节处理注意边界条件,11,各类算法的时间复杂度,12,O(1)到 O(nlogn),O(1)基本运算,%,寻址Hash表的期望复杂度O(lo

4、gn)二分查找O(n1/2)枚举约数O(n)线性查找建立堆O(nlogn)归并排序快速排序的期望复杂度基于比较排序的算法下界,13,O(n2)到 O(nn),O(n2)集合里枚举所有二元组、朴素最近点对O(n3)集合里枚举三元组、Floyd最短路、普通矩阵乘法O(2n)枚举全部的子集O(2nn)TSP的动态规划算法O(n!)枚举全排列O(nn)枚举1.n的n维数组的全部元素总结O(1)O(logn)O(n1/2)O(n)O(nlogn)O(n2)O(n3)O(2n)O(2nn)O(n!)O(nn),14,各种排序算法的时间复杂度,15,O(N)的时间复杂度能解决什么问题?,16,O(N)时间内

5、能解决的问题,字符串字符串循环位移最长回文子串数组寻找最小的K个数2-sum最大连续子数组和快排的partition奇偶排序荷兰国旗问题完美洗牌问题最大面积直方图最大连续乘积子数组查找排序杨氏矩阵查找出现次数超过一半的数字建立堆计数排序二叉查找树的前中后序遍历ManacherKMP,17,字符串翻转,把字符串 abcdef 左旋转 3 位得到字符串 defabc。要求时间复杂度为 O(n),空间复杂度为 O(1)。暴力移位三步翻转(字符串 abcdef-defabc)X:abc,Y:def;X-XT,得:abc-cba;Y-YT,得:def-fedXTYT,得到:cbafed-defabc,即

6、(XTYT)T=YX,18,寻找最小的k个数,输入1,2,3,4,5,6,7和8这8个数字请输出其中最小的4个数字:1,2,3和4,19,寻找和为定值的两个数,输入数组1、2、4、7、11、15和数字15由于4+11=15,因此输出4和11解答:百试不厌:暴力穷举如果无序,先排序,排完序后,i j前后两个指针往中间扫,20,编程艺术github,21,第二部分、算法,22,如何学习算法?,23,算法学习方法论,基础很重要学习什么,心中有大纲算法解决什么问题,解决策略是什么广搜一层一层往外遍历,寻找最短路径策略:队列最小生成树最小代价连接所有点策略:贪心(Prim:贪心+权重队列)Dijkstr

7、a寻找单源最短路径策略:贪心+非负权重队列Floyd多结点对的最短路径策略:动态规划方法论循序渐进对比联系从简单入手,追本溯源,24,如何学习算法之一,要则一:循序渐进KMP,25,有一个算法,本科期间无数人被虐过,是哪个算法?,26,字符串的查找匹配,有一个文本串S和一个模式串P请查找P在S中的位置,27,暴力!,一步步往后匹配,28,继续暴力,匹配失败,回溯,29,改进暴力!,利用模式串中具有相同的前缀后缀不做没用的重复匹配,30,找模式串中最大的相同前缀后缀,考察前缀后缀得到:最大前缀后缀公共元素长度,31,失配时,模式串向右移动的位数为已匹配字符数-失配字符的上一位字符所对应的最大长度

8、值,32,基于前后缀的最大公共元素长度匹配 1/2,D跟空格 失配时向右移动的位数=已匹配的字符数-上一位字符B对应的最大公共元素长度6-2=4再度失配,向右移动:2-0=2 位,33,基于前后缀最大公共长度匹配 2/2,A跟空格失配,向右移动一位D跟C 失配时向右移动的位数为已匹配的字符数-上一位字符B对应的最大长度即:6-2=4匹配成功。,34,“前后缀”概念引申出next 数组,前缀后缀的最大公共元素长度失配时移动位数:已匹配字符数-失配字符的上一位字符所对应的最大长度值next数组把上面的“最大长度值”整体向右移动一位,然后初始值赋为-1失配时移动位数:失配字符所在位置-失配字符对应的

9、next 值j-next j 注意:无论是哪种匹配方法,得出的向右移动位数一样,35,基于next 数组匹配 1/2,Next数组失配时移动位数:j-nextjj 从0开始计数:向右移动 6-2=4 位再次失配向右移动:j-nextj=2-0=2 位,36,基于next 数组匹配 2/2,接上移动两位之后A 跟空格不匹配,再次后移一位D处失配,向右移动 j-nextj=6-2=4 位,37,KMP算法,假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j=-1,或者当前字符匹配成功(即Si=Pj),都令i+,j+,继续匹配下一个字符;如果j!=-1,且当前字符匹配失败(即Si!=P

10、j),则令 i 不变,j=nextj。此举意味着失配时模式串P相对于文本串S向右移动了j-next j 位。,38,int KmpSearch(char*s,char*p)int i=0,j=0;int sLen=strlen(s);int pLen=strlen(p);while(i sLen,39,next 数组的递推计算,对于值k,已有p0 p1,.,pk-1=pj-k pj-k+1,.,pj-1,相当于nextj=k。下面的问题是:已知next 0,.,j,如何求出next j+1呢?pk=pjpk!=pj,40,41,void GetNext(char*p,int next)int

11、pLen=strlen(p);next0=-1;int k=-1;int j=0;while(j pLen-1)/pk表示前缀,pj表示后缀 if(k=-1|pj=pk)+k;+j;nextj=k;else/拿前缀去跟后缀匹配,如果pk跟pj失配,继续递归前缀索引p nextk k=nextk;,42,43,如何学习算法之二,要则二:把相关算法串联起来,相互比对贪心、动态规划,44,贪心与动规,贪心:“最优子结构+局部最优”动态规划:“最优独立重叠子结构+全局最优”。枚举所有状态,然后剪枝,寻找最优状态同时将每一次求解子问题的结果保存在一张“表格”中以后再遇到重叠的子问题,从表格中保存的状态中

12、查找(俗称记忆化搜索),45,动态规划,46,两个简单的例子,最短路径:A-B经过x1,x2,x3故枚举所有可能从A到B要经过的路径选择一条最优如何求最优比较如何比较?写DP方程,求min比如二维数组最小路径和一个二维矩阵M*N矩阵matrix中,找出一条路径,只能向右或向下,求路径经过元素之和最小当前位置(i,j)上一个位置只可能是(i-1,j)或(i,j-1)pathij=min(pathij-1,pathi-1j)+matrixij,47,寻找和为定值的多个数,输入两个整数 n 和 m,从数列1,2,3.n 中 随意取几个数,使其和等于 m,要求将其中所有的可能组合列出来。list1.p

13、ush_front(n);/典型的01背包问题find_factor(sum-n,n-1);/放n,n-1个数填满sum-n list1.pop_front();find_factor(sum,n-1);/不放n,n-1个数填满sum动态规划适用条件最优子结构独立重叠子问题,48,如何学习算法之三,要则三:从简单入手,追本溯源二叉树、红黑树、2-3-4树、B树,49,追本溯源,红黑树为何要有RB-Tree完全平衡完全二叉树高度平衡AVL树先理解二叉树的插入、删除后理解红黑树的插入修复、删除修复B树先学习2-3-4树,理解结点饱和分裂,结点稀缺合并为何?因为2-3-4 树在计算机科学中是阶为 4

14、 的B树意味着什么?意味着2-3-4树中每个结点的关键字数目是:1-3个(ceil(m/2)-1)=n=m-1m为阶数,即孩子树,等于4,50,二叉树到完全二叉树,树的深度越小,搜索时间logn(n即为树的深度),51,AVL树,高度平衡树AVL树中任何节点的两个子树的高度最大差别为一,52,红黑树的5个性质,每个结点要么是红的,要么是黑的。根结点是黑的。每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。如果一个结点是红的,那么它的俩个儿子都是黑的。对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。,53,二叉树的插入,插入一个节点,54,红黑树的插入

15、,插入一个元素后,需要修复,修复有两种手段重新着色旋转操作:左旋与右旋,55,红黑树的插入修复代码,3种插入修复情况,56,2-3-4树,57,2-3-4树的查找,58,2-3-4树的插入 1/3,59,2-3-4树的插入 2/3,60,2-3-4树的插入 3/3,关键字数要超过4时就要开始分裂4阶的B树的关键字数满足:大于等于1,小于等于3,61,2-3-4树一次完整的插入示例 1/2,不断插入多个元素的过程,62,2-3-4树一次完整的插入示例 1/2,接上,继续插入元素N、B、X,63,看过了红黑树的插入看过了2-3-4树分裂接下来,看另外一种新树它与红黑树最大的区别在于,它的结点可以有

16、许多子女,从几个到几千个,64,B树,出现缘由二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,65,一棵B树的示例,查找文件29一直往下,3次磁盘IO操作和3次内存查找,66,B树的插入示例 1/5,一棵5阶(即树中任一结点至多含有4个关键字,5棵子树)B树根结点至少得有2个孩子5阶,2-4 个key,3-5 个childrenB树除根结点之外的结点(包括叶子结点)的关键字的个数n必须满足:(ceil(m/2)-1)=n=m-1 2=关键字数=4m为孩子数,即子树的数目,等于5,67,B树的插入示例 2/5,插入以下字符字母到一棵空的B 树中非根结点关键字数小了(小于2个)就合并大了(超过4个)就分裂):C N G A H E K Q M F W L T Z D P R X Y S,68,B树的插入示例 3/5,C N G A H E K Q M F W L T Z D P R X Y S当咱们插入E,K,Q时,不需要任何分裂操作:插入M需要一次分裂,M恰好是中间关键字元素,以致向上移到父节点中:,69,B树的插入示例 4/5,C N G A H E

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1