optimization - 在(快速)排序时,分区而不是旋转有显着的好处吗?
问题描述
在快速排序算法的每个阶段,都会选择一个枢轴,并且数据被双向划分为低于和高于该枢轴的元素(并且一些平局打破等于它)。
现在,每次旋转都需要传递数据。此外,枢轴作为中值元素的相对位置的方差非常高。取而代之的是,可以想象取 k 个元素的样本 iid ,并将数据划分为 k+1 个部分,使用样本元素作为不同部分的边界。虽然有些部分可能太小或太大,但大多数都应该没问题;其余的将需要一些更正(例如通过计数),但这应该是可行的。
我没有在(二进制)快速排序上尝试过这种方法,但想知道这种方法是否在实践中被使用,以及这样做是否真的有好处。
PS - 如果你能谈谈并行化的适应性(在 CPU 上使用 AVX-512,使用 Xeon Phi,使用 GPU 等)——那将非常有帮助。
解决方案
推荐阅读
- javascript - sapui5 - 为 smartTable 实现自定义排序器
- php - 如何使用用户名检查电话号码和密码以输入我的帐户?laravel8x
- docker - 如何恢复 docker 容器数据
- php - 在 AWS S3 中将多个文件从一个存储桶复制到另一个存储桶的最佳方法是什么?
- azure - 如何在 Azure 中获取多会话 VM 的用户级 CPU 利用率
- python - 将文本文件转换为十六进制 - 换行问题
- ssis - 一次处理多个 SSAS 多维数据集
- python - 将命令行命令转换为通常的 python 字符串
- reactjs - 在反应中克隆 github 项目
- javascript - 如何为多次使用相同钩子的屏幕创建测试?反应测试库