0

基数ソートを理解するのに苦労しています。基数 2 または基数 10 で動作するコードの実装に問題はありません。ただし、基数を指定するコマンド ライン引数が必要な割り当てがあります。基数は 2 ~ 100,000 の範囲です。この問題を理解するのに約 10 時間費やしました。これは宿題なので、直接の回答は求めていません。ただし、誰かがこれに光を当てることができる場合は、してください。

わからないことがいくつか。ベースが 100,000 であることのポイントは何ですか? それはどのように機能しますか。アルファベットのすべての文字、または 1 ~ 9 のすべての数字にベースがあることを理解しています。私はこの概念に頭を包むことができないようです。

十分に具体的でなかったら申し訳ありません。

4

2 に答える 2

2

基数Bの数値Nは、範囲 [0, B-1] の一連の数字です。「通常の」人間の書記体系ではすべての数字を表すのに十分な記号がないため、文字でどのように書かれているかを考えないでください。数字が別々に保存/書き込まれることを知っておく必要があります

たとえば、基数 177 の 255 は 2 桁の数値で、255 10 = 1×177 1 + 78×177 0であるため、最初の桁の値は 1 で、2 番目の桁の値は 78です。一部の文化がこの基数を使用する場合、数字には 177 の異なる記号があり、2 桁だけで書きます。記号は 10 個しかないので、数字を区切る記号を定義する必要があります:。Wolfram Alpha からわかるように、255 10 = 1:78 177

すべての人が底 10 で数えるわけではないことに注意してください。底4、5、6、8、12、15、16、20、24、27、32、36、60 で数える文化が存在するため、次のようになります。私たちのほとんどよりも多かれ少なかれシンボル。ただし、非 10 進数の基数の中で、基数 20、12、および 60 のみが現在最も一般的に使用されています。

ベース100000では同じです。1234567890987654321 は、値 1234、56789、9876、54321 の順に記号として書かれた 4 桁の数字になります。

于 2014-04-17T16:33:02.617 に答える
1

コメントで説明しようとしましたが、基本的には、「モジュラー演算」と呼ばれるものについて話しているのです。各桁は {0...n-1} で、n kの倍数を表します。ここで、k は位置です。255 は 10 進数で 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 までを処理する準標準的な方法が含まれています。

それが私だったら、数字を区切り、それが表現であることを明確にしますが、16進数のような拡張子をいじりたい場合は、Unicodeがすべてあります...

于 2014-04-17T16:10:58.403 に答える