两个n位大整数相乘算法

上传人:仙*** 文档编号:180925406 上传时间:2023-01-08 格式:DOC 页数:6 大小:52.04KB
收藏 版权申诉 举报 下载
两个n位大整数相乘算法_第1页
第1页 / 共6页
两个n位大整数相乘算法_第2页
第2页 / 共6页
两个n位大整数相乘算法_第3页
第3页 / 共6页
资源描述:

《两个n位大整数相乘算法》由会员分享,可在线阅读,更多相关《两个n位大整数相乘算法(6页珍藏版)》请在装配图网上搜索。

1、两个n位大整数相乘算法求最大元和次大元1。问题描述 从多个数中一次性查找出元素最大的值和最小值,查找元素规模即元素的个数n,用分治的思想编制程序,实现分治的最大元和最小元求法。进一步改进算法,使之能一次性求出最大和和次大元(即第二大元素).2.算法设计思想及描述分治发的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立与原问题相同。递归地解决这些问题,然后将各个子问题的解合并得到原问题的解。基于课堂的分析知道,对于本问题k的值取为2,这样可以使子问题的规模是相同的,有利于算法实现。为平衡分治时子问题的规模,这里约定需要查找元素的规模n是2的幂次方。用数组存储需要查找的

2、元素,用结构体存储返回的最大元和最小元。每次得到局部的最大元和局部次大元,然后局部最大元和最大元比较得到新的局部最大元,次大元和次大元比较得到新的局部次大元.深入分析,这种方式局部次大元是错误的.如两组元素中,a1b1,a2b2,当然a1和a2中较大的是新的局部最大元,但是b1和b2中较大的元素不是这四个元素中第二大的。这样的方法漏掉了b1可能是次大元的情况,也就是说所有的元素中的次大元可能在与最大元比较的时候被漏掉了。弥补的方法就是每次将每个元素比自身小的元素都用一个淘汰数组保存起来,最后次大元就是最大元的淘汰数组中第二大的那个元素。3. 算法分析运用分治算法解决此问题,是因为这种方法的优越

3、行,下面通过时间复杂度的比较来说明.通常算法,设置一个变量,等于需要比较的数组的第一个元素,然后依次与后面的n1经行比较,需要比较n-1次得到最大元。同理,求得最小元的比较次数仍然是n1次。设表示比较的次数则对于这种算法得到的值为分治算法求最大元比较解方程结果为,虽然二者都是线性增长的,可是增长率要小一些。实际编程时的实现有细微差距.另外,求最大元,次大元的时候次大元总是在最大元的淘汰数组中,所以求次大元时,多了从最大元数组中找次大元的情形,n取对数,增长率仍然是比较小的.4. 代码#include ”iostream.h” #define N 10 int max(int a,int b)

4、return((ab)?a:b); int min(int a,int b) return(ab)?a:b); void Search(int a,int *max0,int *second0,int n) int g30; int i,m; int max1,max2,second1,second2; if(n=1) *max0=a0; second0=a0; else if(n=2) max0=max(a0,a1); second0=min(a0,a1); else m=n/2; for(i=0;im;i+) gi=ai; Search(g,&max1,&second1,m); for(i

5、=0;inm;i+) gi=ai+m; Search(g,&max2,&second2,nm); *max0=max(max1,max2); *second0=max(min(max1,max2),max(second1,second2)); void main() cout用分治法同时求最大元和次大元n”; int aN; int i,max,second; coutai; Search(a,&max,&second,N); cout”输出结果:n; coutmax=max”n”; coutsecond=” 0) ? 1 : -1)double doubleegerMultiply(doub

6、le X, double Y, double N)double sign = SIGN(X) SIGN(Y);double x = abs(X);double y = abs(Y);if((0 = x) (0 = y)return 0;if (1 = N)return xy;elsedouble XL = x / (double)pow(10。, (double)N/2); double XR = x XL (double)pow(10., N/2);double YL = y / (double)pow(10。, (double)N/2);double YR = y YL * (double

7、)pow(10., N/2);double XLYL = IntegerMultiply(XL, YL, N/2);double XRYR = IntegerMultiply(XR, YR, N/2);double XLYRXRYL = IntegerMultiply(XL XR, YR - YL, N/2) + XLYL + XRYR;return sign (XLYL * (double)pow(10., N) + XLYRXRYL * (double)pow(10。, N/2) + XRYR);double _tmain(double argc, _TCHAR* argv)double x = 1234;double y = 4321;coutx * y = IntegerMultiply(x, y, 4)endl;cout”x y = ”x*yendl;return 0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!