ソートの複雑さ


8

数値の配列のソートがにとって難しいことを示すことは難しくありません。入力が1と0の配列である場合、それは本質的機能であるC O U N T(所定のNビット、出力バイナリにおける1の数)以来C O U N Tはのための完全であるT C 0、それが可能ですA C 0で、単項数を2進数に変換し、(対数的に)小さな2進数を単項数に変換しますTC0CoあなたtCoあなたtTC0C0

S o r t x= U n a r y C o u n t xCoあなたtバツ=BarySortバツ
Sort(x)=Unary(Count(x))

T C 0のTC0は本質的にバイナリ文字列をソートすることです(たとえば、100011から000111)。これは、配列内の数値が制限されている場合により一般的に当てはまります。私の質問は、数が制限されていない場合はどうなりますか?

無制限の数値の配列をソートする問題はまだますか?N C 1のようなより大きなクラスのためにそれは完全ですか?TC0NC1


ところで、「ビットの配列のソートは -complete」のリファレンスを知っている場合は 、私に知らせてください。TC0
Kaveh 2012年

クック&グエンをチェックしましたか?
Yuval Filmus

2
@Kaveh、削減はチャンドラ、ストックマイヤー、ヴィシュキンで、「一定の深さの削減可能性」、SIAM J. Comput。13(2)、1984
。– Jan Johannsen、2012年

回答:


9

あなたが持っていると仮定数字のx 1... X nは幅のM ログのn。一般性を失うことなく、すべての数値は異なります(余分なlog nの下位ビットを追加します)。二つの数字はACに比較することができる0ようにACで、0我々はごとに、計算することができるX I、バイナリーベクターVで定義のV 、J = 1であれば、X jのX I。TCで0我々は、並べ替えることができ、Vへのバツ1バツメートルログログバツvvj=1バツjバツvw(ACで探し、次いで、及び0)の位置ように、W 、K = 1一方、W のk - 1 = 0(ここで、W 0 = 0W N + 1 = 1)。これらの値は、所与のKそれぞれについて、I [ N ]、我々はACでソートされた配列計算することができる0。合計すると、TC 0回路が得られます。kwk=1wk1=0w0=0w+1=1k[]


素敵なトリック:)(配列内の小さい数の数を数える)、Yuvalに感謝します。
カヴェ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.