算法分析技巧与设计
文章平均质量分 71
兔美酱xz
这个作者很懒,什么都没留下…
展开
-
算法笔记01--归纳法之整数幂
整数幂算法1:对实数x的n次幂设计一个有效的算法。一种直接的方法是对x用迭代方法自乘n次,这种方法十分低效,因为它需要O(n)乘法。一个高效的方法可以用如下方法推出,令m=n/2,假设已经知道如何计算x^m。那么有两种情况:如果n是偶数,那么x^n = (x^m)^2;否则x^n = x(x^m)^2。算法2:令n的二进制表示为dn-1.....d1,d0。从y=1开始,由n的高位至地位扫原创 2014-11-23 13:27:51 · 1978 阅读 · 0 评论 -
算法笔记02--归纳法之多项式求值(Horner规则)
多项式求值假设有n+2个实数a0,a1,...,an和x的序列,求多项式p_nx = a_nx^n + a_n-1x^n-1 + ...+ a_1x + a_0;则需要乘法:n+n-1 + ...+2+1 = n(n+1)/2需要加法:n可见算法效率为O(n)而p_nx = ((...((((a_n)x + a_n-1)x + a_n-2)x + a_n-3)....)x原创 2014-11-23 15:37:42 · 2263 阅读 · 0 评论 -
算法笔记03--归纳法之生成排列
生成排列生成排列即对n个数的全排列,显然时间复杂度是n指数级的O(n^k)假定可以生成n-1个数的所有排列,那么就可以扩展生成1,2,.....,n的排列。例如1的生成排列即11,2的生成排列即1,2和2,11,2,3的生成排列在1,2的生成排列基础上可以这样得到:1在第1位,2,3的生成排列2在第1位,1,3的生成排列3在第1位,2,3的生成排列那么推广到1,原创 2014-11-23 17:13:26 · 1617 阅读 · 0 评论 -
算法笔记04--分治法之寻找最大最小元素
顾名思义,“分治”名字本身就已经给出了一种强有力的算法设计技术,它可以用来解决各类问题。在它最简单的形式里,一个分治算法把问题实例划分成若干子实例(多数情况是分成两个),并分别递归地解决每个子实例,然后把这些子实例的解组合起来,得到原问题实例的解。寻找最大最小解一种直接的算法如下所示,它返回一个数对(x,y),其中x是最小值,y是最大值1 x2 for i 3 i原创 2014-11-25 13:46:10 · 5059 阅读 · 0 评论 -
详解map、multimap、unordered_map、unordered_multimap
相信有不少同学和我一样刚接触C++ STL,被其深深吸引。但是想弄懂每个模板类不是一个容易事。大家应该对vector、list、stack、queue等类比较了解了,所以今天详细介绍下几个很常用很强大但有点不太好懂的类map、multimap、unordered_map、unordered_multimap。乍一看都差不多都是什么map,但这肯定有所不同。下面就在一个一个讲解的同时,让大家了解这四原创 2015-02-22 18:41:15 · 11371 阅读 · 2 评论