0

我很难理解基数排序。我在实现代码以使用 2 或 10 的基数时没有问题。但是,我有一个需要命令行参数来指定基数的分配。基数可以是 2 - 100,000 之间的任何值。我花了大约 10 个小时试图理解这个问题。我不要求直接回答,因为这是家庭作业。但是,如果有人可以对此有所了解,请这样做。

有几件事我不明白。基数为 100,000 有什么意义?那怎么行。我知道字母表中的每个字母或每个数字 1-9 都有一个基数。我似乎无法理解这个概念。

如果我不够具体,我很抱歉。

4

2 回答 2

2

任何基数B中的数字N只是 [0, B-1] 范围内的一系列数字。由于我们没有足够的符号来表示“正常”人类书写系统中的所有数字,所以不要考虑它是如何写成字符的。您只需要知道数字是单独存储/写入的

例如,基数为 177 的 255 是一个两位数,其中第一位数字的值为 1,第二位数字的值为 78,因为 255 10 = 1×177 1 + 78×177 0。如果某些文化使用这个基数,他们将有 177 个不同的数字符号,并且他们只用 2 个数字写出来。由于我们只有 10 个符号,我们需要定义一些符号来分隔数字,通常是:. 从 Wolfram Alpha 可以看出,255 10 = 1:78 177

请注意,并非所有人都以 10 为基数。存在以 4、5、6、8、12、15、16、20、24、27、32、36、60 为基数的文化......所以他们会有比我们大多数人更多或更少的符号。然而,在非十进制基数中,如今最常用的只有基数 20、12 和 60。

在基数 100000 中它是相同的。1234567890987654321 将是一个 4 位数字,以符号形式写入,依次为 1234、56789、9876、54321

于 2014-04-17T16:33:02.617 回答
1

我正要在评论中解释它,但基本上你在谈论我们有时所说的“模数运算”。每个数字是 {0...n-1} 并表示乘以 n k,其中 k 是位置。十进制的 255 是 5×10 0 + 5×10 1 + 2×10 2

因此,您的 255 基数 177 很难表示,但在 177 的位置 (177×10 1 ) 有一个 1,在 1 的位置 (177×10 0 ) 有一个78 。

作为一个通用的伪代码算法,你想要类似的东西......

n = input value
digits = []
while n > 1
    quotient = n / base (as an integer)
    digits += quotient
    remainder = n - quotient * base
    n = remainder

你可能需要检查最后的余数,以防出现问题。

当然,你如何表示这些数字是另一回事。 例如, MIME包含通过 Base-64 处理的半标准方式。

如果是我,我只是划定数字并明确表示这是表示,但是如果你想搞乱类似十六进制的扩展名,那就是所有的 Unicode...

于 2014-04-17T16:10:58.403 回答