当前位置: 首页 > 编程日记 > 正文

《算法技术手册》一2.4.6 二次方的算法性能

2.4.6 二次方的算法性能

现在考虑一个类似的问题:两个n位的整数相乘。例2-4展示了使用小学课堂上学过的算法实现的乘法运算,其中n位数字的表示方法与之前的加法一样。
例2-4:mult乘法的Java实现
public static void mult (int[] n1, int[] n2, int[] result) {
int pos = result.length-1;
// 清除所有的值
for (int i = 0; i < result.length; i++) { result[i] = 0; }
for (int m = n1.length-1; m>=0; m--) {
int off = n1.length-1 - m;
for (int n = n2.length-1; n>=0; n--,off++) {

  int prod = n1[m]*n2[n]; // 计算部分和,并且加上进位result[pos-off] += prod % 10;result[pos-off-1] += result[pos-off]/10 + prod/10;result[pos-off] %= 10;
}

}
}
同样的,这里也会给出另外一种实现算法——times。这种算法避免了取模运算的高费用,并且忽略了当n1[m]等于0时不必要的内层计算(注意,这里并没有给出times算法实现,读者可以在提供的代码库中找到它)。times算法包含了203行生成的Java代码来消除两个取模操作。那么在需要额外的费用维护和管理生成代码时,这种衍生算法还能够减少总的性能费用吗?
表2-4给出了这些乘法算法的性能,乘法所使用的数据与加法使用的随机生成数据一致。图2-4采用图形化的方式来描述算法性能,可以看到,抛物曲线是平方级算法的典型标志。
2017_09_20_095648
2017_09_20_095722
图2-4:比较mult和times
如图2-4所示,虽然times衍生算法的速度是mult算法的1/2,但是times和mult展现了相同的渐近性能。mult2n / multn的比率大约是4,这证明了乘法的性能是平方级的。我们定义t(n)表示乘法算法在输入规模为n时的实际执行时间。根据这个定义,对于所有的n > n0来说,必然存在某些常数c(c > 0),满足t(n) ≤ c*n2。我们不需要知道c和n0的实际值是多少,只需要知道它们必然存在即可。这个mult算法实现在我们的平台上执行时,常数c为1/7,n0为16。
需要再次说明的是,修改算法实现来提升效率并不会改变算法是平方级性能的事实。尽管如此,还是有其他的算法(Zuras,1994)可以让n位数相乘的明显速度快于平方级。对于像数据加密这种需要频繁实现大数乘法的应用,这类算法非常重要。

相关文章:

如何使用 OpenCV 实现图像均衡?

来源 | 小白视觉志头图 | 下载于视觉中国我们已经练习了很多图像处理——操作图像&#xff08;精确地说是图像矩阵&#xff09;。为此&#xff0c;我们探索了图像的均衡方法&#xff0c;以便在一定程度上增强对比度&#xff0c;以使被处理的图像看起来比原始图像更好&#xff0…

《中国人工智能学会通讯》——1.42 理解情感

1.42 理解情感 安德鲁摩尔认为&#xff0c;人工智能能“感受”人类情感是人工智能研究领域最重要、也最先进的一个方向。扬波利斯基认为&#xff0c;计算机能够理解语言的能力最终会向人和计算机“无缝沟通”的方向发展。 越来越精准的图像、声音和面部识别系统能让计算机更好探…

matlab中help所有函数功能的英文翻译

doc funname 在帮助浏览器中打开帮助文档help funname 在命令窗口打开帮助文档helpbrowser 直接打开帮助浏览器lookfor funname 搜索某个关键字相关函数demo 打开视频教程 转http://blog.renren.com/share/239121107/690877048 里面有些不全的&#xff0c;自己用到的已添加…

C# 静态构造函数

&#xff08;1&#xff09;用于对静态字段、只读字段等的初始化。 &#xff08;2&#xff09;添加static关键字&#xff0c;不能添加访问修饰符&#xff0c;因为静态构造函数都是私有的。 &#xff08;3&#xff09;类的静态构造函数在给定应用程序域中…

破解数据流通痛点,华控清交的隐私计算之道

从无序中寻找踪迹&#xff0c;从眼前事探索未来。 正值 IT 黄金十年新开端&#xff0c; CSDN 欲以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;现在推出年度重磅企划栏目——「拟合」&#xff0c;通过对话企业高管大咖&#xff0c;跟踪报…

mac系统添加VSCode到右键菜单(转)

转自&#xff1a;https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001470969077294a6455fc9cd1f48b69f82cd05e7fa9b40000 在Mac系统上&#xff0c;Finder选中一个目录&#xff0c;右键菜单并没有“通过Code打开”这个操作。不过我们可以…

在 C# 中通过 P/Invoke 调用Win32 DLL

&#xff0c;.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪。毕竟&#xff0c;32 位的 Windows&#xff08;不管何种版本&#xff09;是一个成熟的操作系统&#xff0c;为广大客户服务了十多年。相比之下&#xff0c;.NET Framework 却是一个…

xp/2003开关3389指令

开启3389&#xff1a; echo offtitle 开启3389clsrem 开启3389reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f >nulecho.echo 提示你&#xff1a;3389已经开启 关闭3389&…

TIOBE 新榜单:Python 超越 Java 重回第二,Rust 崛起

作者 | 苏宓出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;TIOBE 官方最新发布了 5 月的编程语言榜单&#xff0c;不妨一起来看一下本月榜单中又有哪些最新的变化呢&#xff1f;Python 重回第二和 4 月相比&#xff0c;本月榜单的 TOP 10 中变化最大的非 Python 与…

Docker编排工具Fig介绍

本文讲的是Docker编排工具Fig介绍&#xff0c;【编者的话】Fig是一个基于Docker的用于快速搭建开发环境的工具&#xff0c;目前Fig团队已经加入Docker公司。Fig通过一个配置文件来管理多个Docker容器&#xff0c;非常适合组合使用多个容器进行开发的场景。Fig可以和Docker一起来…

java调用ffmpeg,mencoder进行视频转换,读取时长等

2019独角兽企业重金招聘Python工程师标准>>> 以前做的一个基于ffmpeg的视频格式转换的程序&#xff0c;现在抽空整理一下&#xff0c;很多地方都是从别的大神那借鉴的&#xff0c;只是把自己的觉得有用的&#xff0c;对别人有帮助的拿出来分享分享&#xff0c;下面是…

数字人民币实现可控匿名交易?产业升级离不开安全可信的“数字底座”

自央行进行数字人民币试点测试工作以来&#xff0c;人们讨论最多的可能是它的便捷性、匿名性。不过&#xff0c;它的意义远不止于人类个体层面。 作为一种面向未来的货币形式&#xff0c;在未来数字经济时代&#xff0c;央行数字人民币的普及无疑将加速全球资产数字化和身份数…

apache+tomcat 搭建负载均衡系统

apachetomcatmod_jk 搭建负载均衡系统。0.os系统采用centos6.8 x64 2.6.32-642.el6.x86_641.首先安装好jdk环境本次采用jdk-8u111-linux-x64.gz jdk和jre的安装目录要不同&#xff0c;否则的话lib目录下没有dt.jar 和tools.jar 要配置好环境变量如下 vi /etc/profile #ad…

从普本到北大:我的跨校跨专业考研经验

首先做一个我考研情况的简介。 经历了2013年考研的混战&#xff0c;据说是史上考研人数顶峰的年份&#xff0c;因为2014改革&#xff0c;不再有自费生之后&#xff0c;人民群众对于所谓学术硕士的需求量激减&#xff0c;继 而投奔价格费用相当&#xff0c;读书年份较少的专业硕…

C#中使用DirectX编程

我感觉声音的播放比较简单。我们从播放声音开始。为什么我这么觉得&#xff1f;我也不知道。这里是展示最最最最最简单的DirectX播放声音的例子&#xff0c;我尽量省略了无关的代码。最后的代码只有19行&#xff0c;够简单了吧&#xff1f; 准备工作&#xff1a;1.安装了Direc…

40+场面试,100%通过率,我想分享的14条经验

来源 | 陈同学在搬砖头图 | 下载于视觉中国大家好&#xff0c;我是陈同学&#xff0c;首先来一个简单的自我介绍和个人的经历分享。我的本科和硕士均就读于哈工大&#xff0c;在研究生期1年时间内自学操作系统、计算机网络、C、数据结构等&#xff0c;累计学习30本书、500博客文…

云端卫士架构师讲DDoS攻击的智能防御之道

DDoS即分布式拒绝服务攻击&#xff0c;这是一场关乎资源的较量&#xff0c;攻击者通过自己控制的大量僵尸主机&#xff0c;向目标设施&#xff08;服务器、运营商网络和基础架构等&#xff09;发起洪水猛兽般的流量型攻击&#xff0c;或是连绵不绝的应用型攻击。 如果将受害者比…

C#中方法参数的四种类型

C&#xff03;中方法的参数有四种类型&#xff1a;&#xff0d;值参数&#xff1a;不含任何修饰符。方法中的形参是实参的一份拷贝&#xff0c;形参的改变不会影响到内存中实参的的值&#xff0c;实参是安全的。&#xff0d;引用参数&#xff1a;以ref修饰符声明。传递的参数实…

赠书 | 算力时代,用 Python 来快速解决复杂问题

Python作为一种编程语言&#xff0c;拥有简洁、高效的表达能力。与此同时&#xff0c;Python语言环境中还配备各种软件库&#xff0c;即模块。结合实际问题&#xff0c;选择适当的模块&#xff0c;便可生成简单、快速、正确的程序。书中列举了一些数值计算的简单例题&#xff0…

用for实现Go的while和do...while

Go的while和do...while实现 Go语言没有while和do...while语法&#xff0c;我们可以通过for实现&#xff1a;即break在业务代码执行前相当与while&#xff0c;break在业务代码执行后相当do...while while for {if condition {break}xxxxxxxx } do...while for {xxxxxxxxif cond…

DTCC:数据库安全重点在数据拷贝过程中

本文讲的是DTCC&#xff1a;数据库安全重点在数据拷贝过程中&#xff0c;2017年5月11日-13日&#xff0c;2017中国数据库技术大会于北京国际会议中心盛大开幕。作为国内最受关注的数据库技术大会&#xff0c;本届大会以“数据驱动价值发现”为主题&#xff0c;汇集多个领域的百…

Log4J配置方式Java工程测试

2019独角兽企业重金招聘Python工程师标准>>> Log4J配置方式 1、 导入jar包 Commons-logging .jarLog4j-1.2.17.jar2、 编写log4j.properties 文件 ############## ############################## 优先级 INFO ,输出到console_log 和filelog 两个位置 log4j.root…

C#“装箱”(boxing)与“拆箱”(unboxing)

装箱和拆箱&#xff1a;任何值类型、引用类型可以和object&#xff08;对象&#xff09;类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型&#xff0c;或者把这个值类型转换成一个被该值类型应用的接口类型&#xff08;interface-type&#xff09;…

无人机、IoT 设备都有漏洞?专访以色列老牌安全企业Check Point | 拟合

从无序中寻找踪迹&#xff0c;从眼前事探索未来。2021 年正值黄金十年新开端&#xff0c;CSDN 以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;推出年度重磅企划栏目——「拟合」&#xff0c;通过对话企业技术高管大咖&#xff0c;跟踪报…

sql server 在占用服务器内存居高不下怎么办【转】

在管理一个测试服务器的时候&#xff0c;内存使用率居高不下&#xff0c;在资源管理器中查看到 sql server 2008 占用了80%的系统资源&#xff0c;于是找到了一下资料&#xff0c;并解决了Sql Server 2008 占用内存过大的问题。 转自百度经验http://jingyan.baidu.com/article…

C# checked、unchecked操作符

checked和unchecked操作符用于整型算术运算时控制当前环境中的溢出检查。下列运算参与了checked和unchecked检查&#xff08;操作数均为整数&#xff09;&#xff1a;1&#xff09; 预定义的&#xff0b;&#xff0b;和――一元运算符。2&#xff09; 预定义的&#xff0d;一…

TPAMI 2021 | 深度赋智AutoDL系列竞赛世界冠军方案首次公开

导读&#xff1a;「深度赋智」斩获NeurIPS-AutoDL 2019系列竞赛总决赛世界冠军&#xff0c;在图像/音频/视频/文本/表格不同场景的十个数据集上稳定获得八项第一和均分第一。为共同推动AutoDL技术的快速发展&#xff0c;冠军方案的技术细节首次公开&#xff0c;最新相关论文已被…

转: 如何实现jQuery的Ajax文件上传

【PHP文件上传】 在开始之前&#xff0c;我觉得是有必要把通WEB上传文件的原理简单说一下的。实际上&#xff0c;在这里不管是PHP&#xff0c;JSP&#xff0c;还是ASP处理上传的文件&#xff0c;其实都是WEB早已把文件上传到服务器了&#xff0c;我们只是运用上传处理函数来处理…

Mybatis遍历查询 ——foreach

第一步&#xff1a; 在xxxMapper接口中添加一个函数&#xff0c;返回一个list&#xff0c;这里的参数是一个integer类型的集合 public List<Emp> findEmpByList(Param("list") List<Integer> list); 第二步&#xff1a; 在xxxMapper.xml 中添加statement…

C#中如何获取注册表信息

实现方式&#xff1a;利用Microsoft.win32类提供的注册表类访问系统注册表获取ODBC数据服务列表。 具体实现&#xff1a; Microsoft.win32提供了RegistryKey类&#xff0c;用来访问系统的注册表。 ///定义注册表子Path string strRegPath "SOFTWARE/ODBC/ODBC.INI…