比 O(nlog(n)) 做得更好 — 5.结束语和基准

news2024/10/6 6:48:25

这就是 groupSort 真正优于 mergeSort 的地方。

长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩

最后的想法

我们知道,将一个大问题分解为一系列更小、更简单的问题是一种基本的编程范式。通过检查这些关于排序的想法,可以看出,有时,我们也可以从将我们的问题变成一个完全不同的问题中受益。通过这样做,我们也许能够使用真正提高效率和速度的工具和方法——我们在原始环境中无法使用的工具和方法。

这种方法在大数据环境中似乎具有非凡的价值。在这些环境中,我可能有数以百万计的数据点,如果不是数以百万计的数以百计,甚至数十亿的数据点,其范围将相对较小。从下面的基准中可以看出,这就是 groupSort 真正开始明显优于 mergeSort 的地方。

基准

使用的 Python 版本:3.9.7

处理器:AMD Ryzen 5 3600 6 核处理器 3.60 GHz

内存:16.0 GB

显卡:NVIDIA GeForce RTX 2060 Super

原版 Python groupSort 与 C 实现的 timSort

首先,让我真正说明一下我的观点。我将用普通 Python 编写的方法与 Python 的 sorted() 函数进行比较,根据 Wikipedia的说法,该函数是 mergeSort 和 insertSort 的组合,并使用 C 实现。我运行了 100 次迭代的测试,生成了一个随机数组每次100万个元素和10万个范围(不包括在时间统计中)。结果如下:

Timsort,即Python的sorted()函数:

基本组排序:

Vanilla Python 阈值比较

groupSort 与 timSort(~rng 5000 万,大小 100 万)

groupSort 与 quickSort(~rng 2500 万,大小 100 万)

groupSort vs. countSort(组总是~2x 快)

groupSort 与 bucketSort(~rng 380 万,大小 100 万)

与 mergeSort 的详细比较

现在,关于普通 Python 中的 groupSort 与普通 Python 中的 mergeSort 的基准比较。

在前面的部分中,所有代码示例都是单次运行。在这里,我将提供这些场景在多次迭代中平均时的屏幕截图。

包含 100 万个元素的数组,具有1亿个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

100 万个元素的数组,1000万个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

100 万个元素的数组, 100万个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

100 万个元素的数组, 10 万个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

100 万个元素的数组,10000个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

100 万个元素的数组,1000个范围,100 次迭代

使用基本组排序:

使用数字桶分组排序:

使用合并排序:

(完结)

https://medium.com/@ajchristian86/doing-better-than-o-nlog-n-part-5-68895553fb99

推荐书单

《Pandas1.x实例精解》

本书详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。

链接:https://u.jd.com/UKjx4et

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

长按关注《Python学研大本营》

长按二维码,加入Python读者群

扫码关注《Python学研大本营》,加入读者群,分享更多精彩

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

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

相关文章

vmware虚拟机黑屏问题

💐文章适合于所有的相关人士进行学习💐 1.问题描述 VMware虚拟机出现了黑屏现象,打开虚拟机挂起能看到显示,但一开就黑屏。下面就给大家说说虚拟机黑屏怎么办,vmware虚拟机开机黑屏的解决方法。 大多数同学在安装第…

策略验证_卖出口诀_长箭射天股价落地

写在前面: 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法,文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

mysql运行报错:

Install/Remove of the Service Denied!解决办法:Install/Remove of the Service Denied解决办法 上面报错看这篇:MySQL本地连接报错:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061) 上面报错看这篇&#xf…

【Ubuntu】实现windows和ubuntu之间的共享文件

实现windows和ubuntu之间的共享文件一、配置windows和ubuntu之间的共享文件夹(方式1)二、通过将windows中的文件拖拽到ubuntu的终端之上(方式2)一、配置windows和ubuntu之间的共享文件夹(方式1) VMware菜单…

UE Select File / Folder Window 插件说明

本插件可以在蓝图中打开系统自带的文件/文件夹选择窗口。并且可以在打包出发行包。 1. Open Load File Window 打开文件读取选择窗口,只能单选文件,此函数只是返回文件路径,不会真正读取文件信息 输入 Dialog Title :打开窗口的…

[附源码]java毕业设计图书管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java EE|软件视角下的操作系统

文章目录前言操作系统的概念及常见的OS举例操作系统的定位以及它的功能/职责/作用全程高能!!!敲黑板警告!!!一、进程概念(感性认知)二、进程的描述和组织!!&a…

步进电机实验

一、实验目的: 掌握步进电机的控制方法 二、实验内容与要求: 编写实验程序,利用8255的B口来控制步进电机的运转。 三、实验环境: PC机一台,TD-PITE实验装置一套。 四、实验步骤: 1、参考下图连接实验…

Linux下如何操作寄存器

本期主题: linux下操作寄存器 往期链接: linux设备驱动中的并发linux设备驱动中的编译乱序和执行乱序linux设备驱动之内核模块linux字符驱动linux字符驱动之ioctl部分linux字符驱动之read、write部分linux驱动调试之Debugfs 文章目录1.为什么有这个问题…

内网信息收集(基于红日靶场1)

net view # 查看局域网内其他主机名 net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域 net user # 查看本机用户列表 net user /domain # 查看域用户 net localgroup administrators # 查看本地…

合宙esp32 环境搭建和使用方法

文章目录1.环境搭建2.问题2-1:exec: "cmd": executable file not found in %PATH%3.合宙esp32 使用3-1引脚定义3-1-1:板载LED3-2下载程序:3-3测试程序4.ESP32-C3开发板相关资料1.环境搭建 1-1:下载esp32 安装包 链接&a…

[一篇读懂]C语言八讲:数据结构概述

[一篇读懂]C语言八讲:数据结构概述1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 逻辑结构与存储结构1 逻辑结构2 存储结构顺序存储链式存储3 顺序存储与链式存储分析顺序存储优缺点链式存储优缺点3. 时间复杂度与空间复杂度1 算法定义2 时间复杂…

攻防世界1-misc

1-misc 题目描述:无 题目环境:https://download.csdn.net/download/m0_59188912/87094807 打开压缩包,提示密码是出题人生日。 使用archpr爆破压缩包。 得到密码:20001228 解压压缩包,得到两个文件,一个图片…

[附源码]java毕业设计网吧购物系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【CSDN|每日一练】代写匿名信

目录 运行结果题目描述输入描述:输出描述:示例代码结语运行结果 题目描述 小Q想要匿名举报XX领导不务正业! 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。 现在小Q找来了报纸,和自己的举报信的Txt, 你能帮他确定一下是否能够完成匿名信…

6242. 二叉搜索树最近节点查询

目录题目关键词代码题目 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 queries 。 请你找出一个长度为 n 的 二维 答案数组 answer ,其中 answer[i] [mini, maxi] : mini 是树中小于等于 queries[i] 的 最大值…

Vue-Router学习记录

目录 一.使用路由 1.1配置路由 1.2采用路由 二.路由懒加载 三.路由重定向 四.嵌套路由 五.路由跳转 1.1标签式 1.2编程式 1.3路由的query参数 1.4命名路由 前言: vue 属于单页面应用,所谓的路由,就是根据浏览器路径不同,用不同的…

常见Lidar点云数据处理及可视化软件汇总

常见的点云处理及可视化软件有: CloudCompare、Globalmapper、Pix4d、ArcGIS(Pro)、Lidar 360、PCL等等。 文章目录1. CloudCompare2. Globalmapper3. Pix4d4. ArcGIS(Pro)5. Lidar 3606. PCL1. CloudCompare CloudCo…

2022年11月20日 15点 纳指正在走到一个黄金分割点附近,是否会真的按照自然规则做调整,可以看看数据的威力。

行情核心源头: 纳斯达克指数, 是否会符合大数据规则,走黄金分割线规则 [数据说话] 第一波下跌3820, 反弹2299点,反弹了60%,接近61.8%第二波下跌4159,反弹2612,反弹了62.8%,接近61.…

借助第三方工具网站完成消息自动推送

文章目录前言pushplus是什么pushplus测试使用代码发送注意的问题总结前言 寻找消息推送的起因是之前买过一台云服务器,用于开发环境搭建和学习,最近想用它进行一些数据分析,而数据分析的结果如果每次都需要登录服务器来看就有点“太老土”了…