July_algorithm 10.面试精讲.pdf
《July_algorithm 10.面试精讲.pdf》由会员分享,可在线阅读,更多相关《July_algorithm 10.面试精讲.pdf(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面试精讲七月算法邹博2015年11月15日10月算法在线班2/73时间复杂度 假定函数MyFunc()的时间复杂度为O(1),则下列代码的时间复杂度关于整数n是多少?(NlogN)/(N)注:表示复杂度是紧的,如堆排序中,建堆的时间复杂度为(N),而非(NlogN);当然,可以说建堆的时间复杂度为O(NlogN),因为O记号不要求上确界。10月算法在线班3/73时间复杂度分析 内层循环中,对于给定的i,j从 累加到i,循环次数为 外层循环中,i从1到n遍历,每次变成当前值的3倍,即1,3,9,27,通项为 将内层循环次数按照递增3倍做累加后,得循环总次数:3ii 32Nkkk3,2,1,03N
2、Timekkkk3133131323279313233281322732932332132110月算法在线班4/73图示分析 从下面的图示能够清楚的反映这一问题:上图中,当外层循环的i位于紫色位置时,内层循环执行的是紫色的;下次循环,当外层循环的i位于红色位置 3*i时,内层循环执行的是红色的,依次类推。所以,循环次数的上限为N。从而,时间复杂度为O(N)。10月算法在线班5/73集合的表达 将全集I划分为若干子集S1,S2,Sn,使得S1S2Sn=I,且S1S2Sn=。则S1,S2,Sn称为全集I的一个可行划分。思考:用何种数据结构方便表达呢?10月算法在线班6/73集合的性质 自反性(a)
3、,对称性(a、b)传递性:如果c是b的子结点,b是a的子结点,则a、b、c位于相同的集合中。由于集合中元素是等价的,选择任意一个元素作为代表,其他元素都指向该元素,即完成一个集合的表达;称指向元素为子结点,被指向元素为父结点。10月算法在线班7/73Code10月算法在线班8/73Code10月算法在线班9/73并查集的应用 某国家有N个小岛组成,经过多年的基础设施积累,若干岛屿之间建立了若干桥梁。先重新完善该国的行政区划,规定只要有桥梁连接的岛屿则归属同一个城市(可以通过其他岛屿中转),问该国一共多少个城市?求给定图G的连通分量的数目。解决方案:集合划分10月算法在线班10/73Code10
4、月算法在线班11/73思考:有向图呢?对一个有向图,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通的。判断图是强连通图的算法:任取有向图G的某结点S,从S开始进行深度优先搜索,若可以遍历G的所有结点,则将G的所有边反向,再次从S开始进行深度优先搜索,如果再次能够遍历G的所有结点,则G是强连通图,两次搜索有一次无法遍历所有结点,则G不是强连通图。此外,上述搜索可以换成广度优先搜索等其他方案。10月算法在线班12/73Trie树 Trie树是一种哈希多叉树,又称字典树、单词查找树或前缀树,用于在大量字符串中快速检索。英文字母的字典树是一个26叉树 数字的字典树是一个10叉树。10月算
5、法在线班13/73Trie数的特点及性质 典型应用:统计和排序大量的字符串(但不仅限于字符串),所以经常被文字处理系统用于文本词频统计。优点:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。缺点:如果存在大量字符串且这些字符串基本没有公共前缀,则相应的Trie树将非常消耗内存。三个基本性质:根结点不包含字符,除根结点外每一个结点都只包含一个字符。从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串。每个结点的所有子结点包含的字符都不相同。10月算法在线班14/73Trie树举例 词典:a、b、c、aa、ab、ac、ba、ca、aba、abc
6、、baa、bab、bac、cab、abba、baba、caba、abaca、caaba10月算法在线班15/73Trie树举例10月算法在线班16/73压缩:左孩子-右兄弟10月算法在线班17/73对左孩子-右兄弟表示法的思考 只记录有效索引指针,形成如下结构 利用“左孩子-右兄弟”表示方法,如何将一颗树转换成二叉树?如何将N颗树(森林)转换成二叉树?10月算法在线班18/73树转换成二叉树10月算法在线班19/73树转二叉树的右孩子 任意一颗树转换成二叉树,右孩子为空的数目为原树非叶结点+1。对于一颗树(非二叉树),因为任何一个非叶结点必然有孩子,所以,它必然有最右孩子。从而,这个最右孩子转
7、换到二叉树结点后,右指针必然为空。同时,根结点必然没有兄弟,所以,根结点转换成二叉树结点后,必然右孩子为空。任意颗树转换成二叉树,右孩子为空的数目为原树非叶结点+1。如果是若干个树转二叉树,这若干个树最右边的那个树,是没有右孩子的。10月算法在线班20/73Trie树应用举例 给定一颗边的权值都是正整数的树,求某两个结点间的路径S,使得该路径所包含的所有边权的异或值最大。A-B-C 34=7(最优解)A-B-D 36=5 C-B-D 46=210月算法在线班21/73算法分析 朴素解法枚举所有结点对,求得所有路径异或权。时间复杂度O(n2)问题分析异或的性质:ab=(ac)(bc)求出从根节点
8、到每个节点的异或值Xi,这样任意两个点(i,j)做异或XiXj即是他们之间的异或权(相同部分异或抵消)从根节点到每个节点的异或值可以通过一次深度优先搜索解决,时间复杂度O(n)问题转化为求n个数中异或值最大的两个数字10月算法在线班22/73利用Trie树 将数字看成二进制的0/1串,先将所有数字从最高位起放入一个二叉Trie树中;枚举每个数字a,从最高位开始,寻找尽量与a对应位不同的数字;时间复杂度O(len);总体时间复杂度O(N*len)10月算法在线班23/73空间复杂度的简化 Trie树的状态转移函数:g(s,c)=t s表示当前状态,c表示转移条件,t表示下一个可接受状态:(DFA
9、的状态转移)base数组中的每一个元素相当于Trie树的一个节点,其值做状态转移的基值,check数组相当于校验值,用于检查该状态是否存在。bases+c=t checkt=s10月算法在线班24/73Trie树的双数组表示法10月算法在线班25/73Trie树逻辑结构10月算法在线班26/73Trie树的资源号修改10月算法在线班27/73资源号修改伪代码10月算法在线班28/73字符串的插入 记待插入字符串为a1a2ah-1ahah+1an,其中,在当前Trie树中找到了前缀a1a2ah-1,而ah是第一个未找到的字符,记Trie树中字符ah-1转移得到的结点为sr。算法:以sr为根,插入
10、新结点st:st由ah转移得到将st指向尾后缀ah+1an 这里,将后缀串ah+1an直接加入后缀池,减少不必要的分支,进一步降低空间复杂度。由于后缀池的引入,如果插入的字符串最后查找成功的字符没有分支,而是在后缀池中,如何操作?10月算法在线班29/73字符串的插入 记待插入字符串为a1a2ah-1ahah+k-1ah+kan,其中,在当前Trie树中找到了前缀a1a2ah-1,而ahah+k-1b1bm是在后缀池中,记Trie树中最后一个分支结点为sr,即字符ah-1转移得到sr。算法:以sr为根,插入新结点st:st由ahah+k-1转移得到以st为根,插入新结点su:su由b1转移得到
11、将su指向后缀池中的b2bm以st为根,插入新结点sv:sv由ah+k转移得到将sv指向后缀池中的ah+k+1an10月算法在线班30/73双数组Trie树结构总结 Trie树逻辑结构清晰简练,优雅自然,在海量数据中查找某数据,和海量数据规模无关,只和待查找数据长度本身有关,时间复杂度为O(len),常常可以认为是O(1)。可以看做是以数据元素为关键字的多Hash结构;海量数据的复杂度分析未考虑内存调度等问题。双数组的存储结构晦涩难懂,增删困难。实践中,往往离线将海量数据建立Trie树双数组结构,少量删除时可以继续使用。若大量删除,则离线建立新的Trie树双数组结构,适时替换。10月算法在线班
12、31/73围棋中的正方形 围棋棋盘由横纵19*19条线组成,请问这些线共组成多少个正方形?假定只考虑横纵方向,忽略倾斜方向。10月算法在线班32/73算法分析 以(i,j)为右下角的正方形数目f(i,j)jijifjif,1,jijifjif,1,jijifjifjif,1,1max,10月算法在线班33/73算法分析jijifjif,1,1,10月算法在线班34/73算法结论 综上,得出递推关系:显然有初始关系:jijifjijifjifjif,1,1,1,1max,0,000,jfif10月算法在线班35/73Code10月算法在线班36/73思考 本题的关键是如何将问题分解成更小规模的问
13、题,从而解决问题。这个思想比题目本身更重要。事实上,jijif,min,jijifjijifjifjif,1,1,1,1max,10月算法在线班37/73Code210月算法在线班38/73如果手头没有编译器呢?如果数一下边长是1、2、318的正方形各有多少个,能够很快得到结论。21096371918182122210月算法在线班39/73字符串的交替连接 输入三个字符串s1、s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成,即不改变s1和s2中各个字符原有的相对顺序,例如当s1=“aabcc”,s2=“dbbca”,s3=“aadbbcbcac”时,则输出true,但如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- July_algorithm 10.面试精讲 10. 面试
限制150内