我应该在基数排序中使用哪个基数?以及如何在碱基之间进行转换



如果我必须对以 10 为底的整数列表进行排序,首先我将这个整数转换为例如基数 2,然后执行基数排序,最后将整数转换回基数 10?

通常,如何使用与列表中的整数基数不同的基数进行基数排序?

一般来说,这取决于输入的表示方式。

如果您的输入表示为固定宽度的整数值,则使用除法和 mod 可以轻松地在基数之间进行转换。例如,您可以通过计算 n % b 来获取数字 n 的最后一个基数 b 数字,也可以通过计算 n / b(向下舍入(来删除该数字。

如果您的输入表示为字符串,则很难重新解释其他基中的字符。如果不使用花哨的算法技术,您通常可以切换到基数的幂,其中数字块被视为单个数字。您还可以使用较小的基数,例如,取每个数字,以较小的基数单独重写这些数字,然后使用一次少于一位数字的基数排序。

如果你有兴趣使用一种非常重量级的理论技术,本文演示了一种以二进制形式对任何基数中的数字进行编码的方法,该方法允许对数字进行恒定时间随机访问而不会损失空间。这肯定比其他方法先进得多,常数因素可能会在实践中使其效率低下,但它表明理论上可以使用任何您想要的基础。

最新更新