通常,在分析算法的计算复杂性时,都将加法和乘法运算当做基本运算来处理,即将执行一次加法或乘法运算所需的计算时间当做一个仅取决于计算机硬件处理速度的常数。然而,当需要精确地表示大整数并在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的算法运算。下面就来学习一下如何使用算法来计算大整数的乘法。设X和Y都是n位二进制整数,现在要求计算它们的乘积XY。算法的基本思想如下:将n位二进制整数X和Y都分为2段,每段长为n/2(为了叙述简单,假设n是2的幂),由此可以得到X = A2n/2+ BY = C2n/2+ DXY = (A2n/2+ B)(C2n/2+ D) = AC2n+ Read More
二分搜索算法是运用分治策略的典型例子,适用于从已经排序好的n个元素中找出某一特定元素x,注意前提是该数组是已经排序了的。二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x作比较,如果x=a[n/2],则找到x,算法介绍;如果x<a[n/2],则只需要在数组a的左半部分继续搜索;如果x>a[n/2],则只要在数组a的有半部分继续搜索。在最坏的情况下,二分搜索算法需要用O(logn)的时间(这个不是很懂,望某些人可以解答一下)。具体算法描述:(C++版)template< class Type >int BinarySerarch(Type a[] Read More
分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立。递归地解这些子问题,然后将各个子问题的解合并并得到原问题的解。它的一般的算法的设计模式如下:divide-and-conquer(P){ if(|P|<=n0) adhoc(P); divide P into smaller subinstances P1,P2,P3,...,Pk; for(i=1;i<=k;i++) yi = divide-and-conquer(Pi); return merge(y1,y2,y3,...,yk);}说明:|P|表示问题P的规模 ... Read More