运动基元_Java更快地对基元数组进行排序?

运动基元

看来,在不久的将来,Java中的原语排序数组可能会提高性能。 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ,标题为“ Dual-Pivot Quicksort的新优化版本 ”,其中Yaroslavskiy撰写了“ Dual-Pivot Quicksort的优化和更快版本”,他已经“开始工作了”。在……过去5年中。”

“ 新的Dual-Pivot Quicksort优化版本 ”消息包括有关Dual-Pivot Quicksort的一些历史背景; 突出显示了新版本在随机数据,“近乎结构化的数组”和“周期输入”方面的相对性能; 提供所涉及更改的全面摘要; 并提供用于更改的开放代码审查的链接 。

Dual-Pivot Quicksort算法是2009年引入Java的。Yaroslavskiy在2009年9月撰写的另一篇core-libs-dev邮件列表中 写道: “ 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort ”。 “我想与您分享新的Dual-Pivot Quicksort,它比已知的实现(理论上和实验上)都快。 我想建议用新的替代JDK的Quicksort实现。” 在描述“新的Dual-Pivot Quicksort如何使用* two *枢轴元素”而不是所有早期方案使用的单个枢轴元素之前,该帖子描述了“经典Quicksort算法”方案以及对该方案的一些修改。

原始消息“ 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort ”具有一些其他有趣的历史细节,并在此处突出显示。

  • 乔恩·本特利(Jon Bentley)在一封邮件中粘贴了一封电子邮件,指出:“我认为弗拉基米尔(Vladimir)对Quicksort的贡献远远超过了我以前做过的任何事情,并在Hoare的原始设计和Sedgewick的分析上位居前列。” 该消息还提供了有关快速排序的发展的简短但有趣的历史背景。 该信息充分说明了雅罗斯拉夫斯基的贡献,但我认为它也充分说明了乔恩·本特利的性格。
  • 乔什·布洛赫(Josh Bloch)在此消息中粘贴了一封电子邮件,其中说:“我相信此代码最终可能会移植到多种语言并以Bentley和McIlroy的出色方式(大约成功20种成功)广泛部署年)。” 事实证明是这种情况,因为其他语言(或语言库)在某种程度上采用了该算法,包括JavaScript , Python和Ruby 。

通过在原始数组类型上使用Arrays.sort()方法的重载版本,可以看到新的改进版本的Dual-Pivot Quicksort可能带来的性能改进。 搜索项“ Dual-Pivot Quicksort”在Javadoc生成的与Arrays类的JDK 9版本相关的HTML输出中出现14次:

  • Arrays.sort(int [])
  • Arrays.sort(int [],int,int)
  • Arrays.sort(long [])
  • Arrays.sort(long [],int,int)
  • Arrays.sort(short [])
  • Arrays.sort(short [],int,int)
  • Arrays.sort(char [])
  • Arrays.sort(char [],int,int)
  • Arrays.sort(byte [])
  • Arrays.sort(byte [],int,int)
  • Arrays.sort(float [])
  • Arrays.sort(float [],int,int)
  • Arrays.sort(double [])
  • Arrays.sort(double [],int,int)

因为快速排序仅用于对基元进行排序,所以对双数据点快速排序的这些性能增强功能仅影响基元上的方法,而不会影响倾向于使用合并排序的Arrays.sort(Object [])之类的方法。

据我所知,这些性能改进没有针对Java的特定版本,但是它们似乎已经进行了广泛的审查和测试,因此与基元数组排序有关的性能改进可能很快就会到来。您附近的Java版本。

参考资料

  • Dual-Pivot Quicksort算法 (2009年9月)
  • 用新的Dual-Pivot Quicksort替换java.util.Arrays中的Quicksort (2009年9月)
  • Dual-Pivot Quicksort的新优化版本 (2018年1月)
    • 关联代码更改
  • 证明JDK的Dual Pivot Quicksort正确 (2017年8月)
  • 为什么双轴Quicksort快速? (2015年11月)
  • 工程速查 (2013年1月)
  • 快速分拣–三向和双枢轴 (2013年6月)
  • StackOverflow.com上的相关线程:
    • Yaroslavskiy的双重枢纽快速排序算法

翻译自: https://www.javacodegeeks.com/2018/01/faster-sorting-arrays-primitives-coming-java.html

运动基元

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 rpmbuild -- 用于创建 rpm 格式的二进制软件包和源码软件包

文章目录一、命令介绍二、命令选项(一)从 specfile 建立(二)从 tarball 包建立(三)从 source package 包建立(四)其它选项(五)所有 rpm 都可使用的选项&#…

只做macd二次金叉_【教你一招】MACD低位二次金叉

原标题:【教你一招】MACD低位二次金叉来源:K线密码MACD低位二次金叉技术要点1、第二次金叉离第一次金叉距离越近越好;2、MACD第二次金叉的位置以高于第一次金叉为好;3、MACD第二次金叉时结合K线形态上的攻击形态研判(如&#xff1…

计算机领域专业术语中英文对照(时常更新)

机器学习 线性回归(linear regression) 多标签分类(multi-label classification,MLC) 验证集(validation) 均方误差(MSE) 偏差(bias) 方差(variance) 深度学习 多层感知机(MLP) 反向传播(Back Propagation) 张量(Tensor) 随机梯度下降(SGD) 向量(Vector) 标量(Sc…

owasp maven_OWASP依赖性检查Maven插件–必须具备

owasp maven我不得不非常遗憾地承认,我不知道OWASP依赖检查maven插件 。 自2013年以来似乎已经存在。显然GitHub上已有千个项目正在使用它。 过去,我手动检查了依赖项,以根据漏洞数据库检查它们,或者在很多情况下,我只…

软件包管理器 RPM 升级软件包过程分析

升级软件包 alsaplayer-0.99.76-2.2.fc4.i386.rpm,并显示详细的升级信息: rpm -Uvv alsaplayer-0.99.76-2.2.fc4.i386.rpm把显示内容当中对我们有用的挑出来: D: opening db environment /var/lib/rpm/Packages joinenv D: opening d…

ubtunu打开firefox_Linux Ubuntu 终端命令行打开firefox报错

1,报错$ firefox(firefox:2673): GConf-WARNING **: Client failed to connect to the D-BUS daemon:Failed to connect to socket /tmp/dbus-80Eq35bHIz: Connection refused(firefox:2673): GConf-WARNING **: Client failed to connect to the D-BUS daemon:Fail…

自然语言处理领域基本概念笔记

自然语言处理 词向量: 自然语言处理问题要转化为机器学习的问题,首先就要把单词数学化表示,就是用n维实数向量来代表一个单词。 对话系统 对话系统发展历程的三个阶段: 1.基于符号规则和模板的对话系统 2.基于统计机器学习的…

spring-junit4_基于Spring的应用程序-迁移到Junit 5

spring-junit4这是关于将基于Gradle的Spring Boot应用程序从Junit 4迁移到闪亮的新Junit 5的快速文章。Junit 4测试继续与Junit 5 Test Engine抽象一起工作,该抽象为在不同编程模型中编写的测试提供支持。例如,Junit 5支持能够运行JUnit 4测试的Vintage …

如何理解 inode

一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候&#xff0c…

go语言os.exit(1)_Go语言-信号os.Interrupt和信号syscall.SIGTERM的应用

实例package mainimport("fmt""os""os/signal""sync""syscall""time")func worker(stop for {select {case fmt.Println("exit")returndefault:fmt.Println("running...")time.Sleep(3)}}}fu…

深度学习基本概念笔记

注意力机制(Attention Mechanism): 注意力机制受到人类视觉注意力机制的启发,即关注图像特定部分的能力。即当神经网络发现输入数据的关键信息后,通过学习,在后继的预测阶段对其予以重点关注。 Attention Mechanism可以帮助模型对输入的X每个…

java api 开发_Java开发人员应该知道的前20个库和API

java api 开发优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库。 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edition之后 ,Joshua Bloch建议在Java 3rd Edition中使用现有的API进行开发&#x…

Linux 系统的硬链接和软链接详解

文章目录什么是链接链接用来干什么的硬链接和软链接的区别硬链接和软链接的图示总结我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),…

js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域

JavaScript 监听元素是否进入/移出可视区域常规操作防抖节流IntersectionObserver兼容的代码常规操作通常的做法是,监听srcoll事件,根据元素的offset来判断。window.addEventListener(scroll, this.scrollHandle, true);使用getBoundingClientRec()来获取…

人工智能领域论文常见基本概念笔记

BLEU分数: 一个比较候选文本翻译与其他一个或多个参考翻译的评价分数。 AUC: 衡量学习器优劣的一种指标,Roc曲线下与坐标轴围成的面积(0.5~1),越接近1,检测方法真实性越高。 Image Caption: 一般有几种叫法:图像描述,图像标注…

okta-spring_通过Okta的单点登录保护Spring Boot Web App的安全

okta-spring“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和…

Mac 键盘符号整理

图标介绍⌘Command⇧Shift⇪Caps Lock⌥Option Alt⌃Control↩Enter⌫Delete⌦Fn Delete↑上箭头↓下箭头←左箭头→右箭头⇞Fn ↑ Page Up⇟Fn ↓ Page DownHomeFn ←EndFn →⇥Tab 右制表符⇤Shift Tab 左制表符⎋Esc Escape⏏电源开关键

团队的英文翻译缩写_魔兽世界各种英文/拼音/缩写的翻译/解释

大灾变缩写为CTM团队副本名称缩写:VOA(国服简称为宝库,拼音缩写为BK....):Vault of Archavon 八十年代团队副本阿尔卡冯的宝库,台服译作亞夏梵穹殿。位于冬拥湖(台服译作冬握湖)。分10人和25人难度。没有困难模式。NAXX: Naxxrama…

机器学习常见基本概念笔记

机器学习 监督学习和非监督学习: 有监督学习的方法就是识别事物,识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。比如分类和回归。 而无监督学习方法只有要分析的数据集的本身,预先没有什么标签。如果发现数据集呈现…

adf开发_在EL表达式中引用ADF Faces组件

adf开发EL表达式通常用于在页面上指定ADF Faces组件的属性值。 有趣的是,我们可以使用component关键字来引用要为其评估EL表达式的组件实例。 这是略与此类似Java中。 例如,在以下代码段中,按钮的提示被评估为按钮的文本值,并且它…