July面试算法讲座PPT.ppt

上传人:b****1 文档编号:1379878 上传时间:2022-10-21 格式:PPT 页数:100 大小:4.25MB
下载 相关 举报
July面试算法讲座PPT.ppt_第1页
第1页 / 共100页
July面试算法讲座PPT.ppt_第2页
第2页 / 共100页
July面试算法讲座PPT.ppt_第3页
第3页 / 共100页
July面试算法讲座PPT.ppt_第4页
第4页 / 共100页
July面试算法讲座PPT.ppt_第5页
第5页 / 共100页
点击查看更多>>
下载资源
资源描述

July面试算法讲座PPT.ppt

《July面试算法讲座PPT.ppt》由会员分享,可在线阅读,更多相关《July面试算法讲座PPT.ppt(100页珍藏版)》请在冰豆网上搜索。

July面试算法讲座PPT.ppt

面试算法机器学习July,西电华为创新俱乐部2014-9-3,晚7:

009:

2,本次讲座大纲,第一部分、面试笔试面试考什么解决笔试面试题的常用算法常用算法的时间复杂度O(N)时间复杂度内能解决的问题第二部分、算法如何学习算法循序渐进(KMP)相互串联(以Trie树、后缀树,贪心、动态规划为例)追本溯源(二叉树、红黑树、2-3-4树、B树为例)海量数据处理面试题十种解决之道第三部分、机器学习SVM的简单介绍,与SMO的简单推导,3,以前的不足,对着PPT一本正经念到底堆砌知识、没有要害100页PPTPPT上字多、不够一目了然体力不支、互动太少,4,第一部分、面试,5,笔试面试考什么,6,笔试偏基础,语言基础inthope;int*hope;double(*p)3;void(*func)();操作系统线程与进程的区别产生死锁的条件如何规避死锁C+内存分配堆、栈、自由存储区、全局/静态存储区,常量存储区网络协议TCP建立连接的三次握手数据库概率论与数理统计推荐数理统计学简史,7,面试偏算法,数据结构上的增删改查查找、遍历、排序算法分治、递归、回溯贪心、动态规划海量数据处理,8,基于各个数据结构上的增删改查,字符串字符串库函数的编写,例如atoi等字符串查找、翻转、匹配数组查找(如二分查找、杨氏矩阵查找)链表翻转、遍历、查找、删除、合并Hash表查找树遍历(前序、中序、后序)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(logn)二分查找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)时间内能解决的问题,字符串字符串循环位移最长回文子串数组寻找最小的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,即(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解答:

百试不厌:

暴力穷举如果无序,先排序,排完序后,ij前后两个指针往中间扫,20,编程艺术github,21,第二部分、算法,22,如何学习算法?

23,算法学习方法论,基础很重要学习什么,心中有大纲算法解决什么问题,解决策略是什么广搜一层一层往外遍历,寻找最短路径策略:

队列最小生成树最小代价连接所有点策略:

贪心(Prim:

贪心+权重队列)Dijkstra寻找单源最短路径策略:

贪心+非负权重队列Floyd多结点对的最短路径策略:

动态规划方法论循序渐进对比联系从简单入手,追本溯源,24,如何学习算法之一,要则一:

循序渐进KMP,25,有一个算法,本科期间无数人被虐过,是哪个算法?

26,字符串的查找匹配,有一个文本串S和一个模式串P请查找P在S中的位置,27,暴力!

一步步往后匹配,28,继续暴力,匹配失败,回溯,29,改进暴力!

利用模式串中具有相同的前缀后缀不做没用的重复匹配,30,找模式串中最大的相同前缀后缀,考察前缀后缀得到:

最大前缀后缀公共元素长度,31,失配时,模式串向右移动的位数为已匹配字符数-失配字符的上一位字符所对应的最大长度值,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失配时移动位数:

失配字符所在位置-失配字符对应的next值j-nextj注意:

无论是哪种匹配方法,得出的向右移动位数一样,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!

=Pj),则令i不变,j=nextj。

此举意味着失配时模式串P相对于文本串S向右移动了j-nextj位。

38,intKmpSearch(char*s,char*p)inti=0,j=0;intsLen=strlen(s);intpLen=strlen(p);while(isLen,39,next数组的递推计算,对于值k,已有p0p1,.,pk-1=pj-kpj-k+1,.,pj-1,相当于nextj=k。

下面的问题是:

已知next0,.,j,如何求出nextj+1呢?

pk=pjpk!

=pj,40,41,voidGetNext(char*p,intnext)intpLen=strlen(p);next0=-1;intk=-1;intj=0;while(jpLen-1)/pk表示前缀,pj表示后缀if(k=-1|pj=pk)+k;+j;nextj=k;else/拿前缀去跟后缀匹配,如果pk跟pj失配,继续递归前缀索引pnextkk=nextk;,42,43,如何学习算法之二,要则二:

把相关算法串联起来,相互比对贪心、动态规划,44,贪心与动规,贪心:

“最优子结构+局部最优”动态规划:

“最优独立重叠子结构+全局最优”。

枚举所有状态,然后剪枝,寻找最优状态同时将每一次求解子问题的结果保存在一张“表格”中以后再遇到重叠的子问题,从表格中保存的状态中查找(俗称记忆化搜索),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.push_front(n);/典型的01背包问题find_factor(sum-n,n-1);/放n,n-1个数填满sum-nlist1.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的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,红黑树的插入,插入一个元素后,需要修复,修复有两种手段重新着色旋转操作:

左旋与右旋,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树分裂接下来,看另外一种新树它与红黑树最大的区别在于,它的结点可以有许多子女,从几个到几千个,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-12=关键字数=4m为孩子数,即子树的数目,等于5,67,B树的插入示例2/5,插入以下字符字母到一棵空的B树中非根结点关键字数小了(小于2个)就合并大了(超过4个)就分裂):

CNGAHEKQMFWLTZDPRXYS,68,B树的插入示例3/5,CNGAHEKQMFWLTZDPRXYS当咱们插入E,K,Q时,不需要任何分裂操作:

插入M需要一次分裂,M恰好是中间关键字元素,以致向上移到父节点中:

69,B树的插入示例4/5,CNGAHE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

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

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