摘要: 原文:求递归算法时间复杂度:递归树 另外见地址2递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考虑一个例子: T(n) = 2T(n/2) + n2 迭代2次可以得: T(n) = n2 + 2(2T(n/4) + (n/2) 2) 还可以继续迭代,将其完全展开可得: T(n) = n2 + 2((n/2) 2 + 2((n/22)2 + 2((n/23) 2 + 2((n/24) 2+…+2((n/2i) 2 + 2T(n/2i + 1)))…)))) ……(1) 而当n/2i+1 == 1时,迭代结束。 将(1)式小括号展开,可得: T(n) ... 阅读全文
posted @ 2014-03-13 21:17 无缰之马 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 1.题目 编写两个任意位数的大数相乘的程序,给出计算结果。2.题目分析 该题相继被ACM、华为、腾讯等选作笔试、面试题,笔者2014年替师兄去腾讯笔试就遇到此题,当然若无准备要写出这种程序,还是要花一定的时间的。故,觉得有必要深入研究一下。搜索了网上的大多数该类程序和算法,发现,大数乘法主要有模拟手工计算的普通大数乘法,分治算法和FFT算法。其中普通大数乘法占据了90%以上,其优点是空间复杂度低,实现简单,时间复杂度为O(N²),分治算法虽然时间复杂度降低为, 但其实现需要配 合字符串模拟加减法操作,实现较为复杂, 参考博客1http://cnn237111.blog.51cto.. 阅读全文
posted @ 2014-03-13 16:14 无缰之马 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 1、二叉树遍历分析 二叉树的遍历有四种,先序、中序、后序和层序,其中,中序遍历配合其中任何一种遍历的结果都可以重建二叉树,先序和后序配合却无法重建二叉树。本人觉得编程之美书上代码清单3-12给出的代码不一定是最好的,代码冗长,复杂。在此给出自己的尝试和结果。2、先序+中序重建二叉树 先给出一个子函数,检验字符search_char是否在字符串*s的区间[pbeg, pend],也是是否能构建二叉树的判断依据。代码如下:bool charisexist(char search_char,char *s,int pbeg,int pend,int &loc){ string temp=s; 阅读全文
posted @ 2014-03-13 13:44 无缰之马 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 1.问题定义 给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号。 要求遍历输出的结果分别为图2,图3和图4,其中图3和图4是扩展问题。 图1 图2 图3 图42.原问题 编程之美书上,采用的是容器构成的数组来实现的,相比于递归算法,时间复杂度大大降低,仅为O(n),但其空间复杂度并非最优。此处采用STL中的Queue来解决此问题,代码如下:节点数据:struct node{ char value; node* pleft; node* pright;};实现代码:queue Queue3;//-... 阅读全文
posted @ 2014-03-05 20:14 无缰之马 阅读(160) 评论(0) 推荐(0) 编辑