任意比较器可以转化为等价键进行基数排序吗?

问题描述 投票:0回答:1

在阅读 Rust crate 的文档时Voracious Sort我注意到它比 Rust 标准库提供的基于比较的算法(PDQ)快得多,并且有稳定版本和就地版本可用。

为什么我们不使用基数来表示一切?当然,基数排序只能应用于整数类型。

但是,大多数其他类型的数据都可以(或多或少容易地)转换为整数类型(常见的示例是 IEEE754 浮点数或字符串)。我的问题是:

哪些类型的数据需要(或明显更快)通过比较进行排序,为什么?

或者,更一般地说:

是否有可能将任何(确定性?)键比较器转换为(有限?)基数可排序键映射函数?

看起来应该是一个简单的证明,但我不太能把它放在一起。

我确实知道其他算法对于输入数据的某些分布更好。我问的是数据类型,而不是它们的分布。

algorithm sorting radix-sort
1个回答
1
投票

可以实际上对几乎任何类型的键使用基数排序。

问题是如何为通用排序函数编写接口

要使用通用的基于比较的排序函数,您只需要提供一个比较器,它可以告诉您一个键是否大于或小于另一个键。

要使用通用的 radx 排序函数,您需要实现键的 view,将它们作为数字序列呈现给排序函数。对于除最简单类型之外的所有按键来说,这可能相当困难,而且效率不高。这不是您只想调用排序函数而要做的事情,因此没有足够的需求将通用基数排序包含在标准库中。

© www.soinside.com 2019 - 2024. All rights reserved.