Han's時間、線形空間、整数ソートアルゴリズム


38

Yijie Hanの、線形空間、整数ソートアルゴリズムに精通している人はいますか?この結果は、かなり短い論文(時間と線形空間での決定論的ソート。J. Alg。50:96–105、2004)に表示されます。適応。私の問題は、詳細に深く入り込むことなく、かなり手を振って書かれていることです。これは以前の論文に大きく依存しており、中でも特にHanによる別の論文(線形空間での高速整数ソートの改善)O(nloglogn)O(nloglogn)。Information and Computation 170(1):81–94)はほぼ同じスタイルで書かれています。私はこれらの2つの論文、特に以前の結果をどのように適合させて使用するかを理解するのに大きな困難を抱えています。助けていただければ幸いです。

もちろんこれはあまりに広範で曖昧すぎて適切な質問とは言えませんが、明確に定義されたいくつかの質問と回答にまたがって議論を展開したいと思っています。

先に進むために、ここに私の最初の具体的な質問があります。情報の補題2で。比較 論文には、それぞれが RAMワードにパックされた小さな整数のセットでm番目に小さい整数を見つけるための、再帰的な時間アルゴリズムがあります。アルゴリズムの説明では、ベースケース処理方法については言及していません。この場合、時間で選択を行う必要があり。これをどのように行うことができますか?O(n/klogk)nkk=O(n)O(logk)


13
彼に手紙を書くのは完全に適切です:hanyij@umkc.edu。
ジョセフ・オルーク

はい。この一般的な問題については以前に説明しましたが、これに対処する正しい方法は著者にメールを送ることです。
スレシュヴェンカト

17
これには、7年前の論文に関する特定の質問が含まれ、既に査読プロセスを経ています。Ariは著者にメールを送信できましたが、これはこのサイトにとって理想的な質問のようです。たわみがわかりません。
ハックベネット

18
もちろん、私が最初にしたことはハンを書くことでした。答えはありません。その後、整数選別研究を行った他の人と連絡を取り、彼は、この文書は面倒で時間をかけて投資する価値がないと判断したと言いました。私がここに来たのはその時です。ハンを知っていて、私の代わりに彼の注意を引くことができる人がいたら、それも素晴らしいでしょう。
アリ

4
一般的な並べ替えには、下限はありません。まったく逆です。ソートは、この境界を持つ比較に制限されています。ここでの問題は、入力を制限するのではなく、計算モデルを強化することです。私の計算モデルは、ユニットコストのRAMフレーバーのいずれかであり、合理的な仮定(語長に依存する定数の可用性など)を許可します。Ω(nlogn)
アリ

回答:


18

私はちょうど同じことを疑問に思っていました。

幸いなことに、2011年に発行されたジャーナル記事で、このことを説明しているものを見つけることができました。さらに、それを表示するためにサブスクリプションは必要ありません:指数ツリーソートの実装とパフォーマンス分析

記事全体を読んで、その実装方法を学び、その基礎となる理論をよりよく理解することをお勧めします。また、指数ツリーがクイックソートおよびバイナリツリーに対してどのように積み重ねられるかを示します。Hanの時間、線形空間、整数ソートアルゴリズムにO(nloglogn)関連する抜粋を次に示します

イージー・ハンは、線形空間で予想される時間まで複雑さを減らすアイデアを与えました。[6] 彼が使用する手法は、Anderssonの指数検索ツリー[8]の整数のパスダウンと整数のビットの線形時間多重分割です。整数を指数検索ツリーに一度に1つずつ挿入する代わりに、彼はすべての整数を指数検索ツリーの1レベルずつ受け渡しました。このような協調的な受け渡しにより、線形時間で複数の除算を実行する機会が得られるため、アルゴリズムが高速化されます。このアイデアはスピードアップを提供するかもしれませんが、実際の実装では、整数をバッチで処理することは非常に困難です。

[6] Y. Han、O(n log log n)時間および線形空間における決定論的ソート、34th STOC、2002年。

[8] A. Andersson、線形空間での高速決定論的ソートと検索、IEEE Symposium on Foundations of Computer Science、1996年。


なぜ下票なのか?
スレシュヴェンカト

1
このジャーナル記事リンクを指数ツリーウィキペディアのページに追加しました。参考までに、この記事は質問の後に発行される可能性があります。
AT

@AT、あなたの答えを少し広げて、それが質問にどのように答えるか説明してください。現在、それが与える唯一のものは、ある雑誌の記事へのリンクです。
カヴェー

1
まあ、私はすでにハンの論文をあきらめたので、このヘルプを提供できたことをうれしく思います。今日ここに戻ったとき、私は本当に何も見ることを期待していませんでした。ありがとう!この新しい論文を読んで、Hanの論文の進歩に役立つかどうかを確認します。
アリ

2
さて、私は今それを読んでおり、おそらく私はそれを完全に誤解したことを認めますが、それを除けば、わずかな問題があるように見えます。著者は、彼らの木は、高さOを持っていると主張が、木は、高さがあれば、それは持っている葉、したがって未満合計でノード。各ノードがキーを保持していると思います。次に、ツリーに含まれるのは未満キー。場合は、その後。とにかく、著者が正しいとしても、Oソートもハンの説明も行わないため、役に立たない。(loglogn)h(h+1)!2(h+1)!h+22(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)
アリ

1

答えについてはよくわかりませんが(紙に目を通していません)、これが役立つはずです。数値は1つの単語にまとめられるため、1つの単語に対する操作にはO(1)時間かかります。たとえば、h個のビットがそれぞれk個ある場合、ワードサイズはk、hに依存し、k、hは数値の範囲にも依存します。したがって、多くの数字が1つの単語に収まるように、数字の範囲を縮小できる範囲縮小手法を使用します。その後、適切なビットマスクを作成すると、一度に2つの単語を考慮して、短い整数から大きな整数を分離できます。これはO(1)時間で実行できます。(Ontuition:このため、wordに格納されている各数値にはフラグビットが関連付けられており、2つのワードを減算します...フラグビットが続く場合、数値は小さくなります)。

同様に上記を使用して、O(log k)時間でk個の数字を含む単語をソートすることもできます(ビットソート)。

編集:ワードにパックされた0からm-1の範囲の2k個の数値をソートするアルゴリズム。各数値のサイズLは= log(m + k)+2です。

K1は1:000000 1:000000 1:000000 1:000000 .......コロンの前のビットはフラグビットとも呼ばれ、各シーケンスはLビット長であり、ワードK_1で2k回繰り返されます。 (コロンは理解のためだけです)

K2は(2k-1)(2k-2).... 1バイナリで書かれています。アルゴリズムのスケッチ:

t = log kから0まで繰り返します。

パート1-元の単語Zを2つの単語AとBに分けます。

  1. Tを、(L-1-t位置)を左にシフトし、結果をとANDすることにより取得します。M = T-(TはL-1桁シフト)としましょう。K 1K2K1

  2. ZとMを組み合わせて、結果()を右にシフトします。これはAを与えます2tL

  3. B = Z-(Z&M)。

パート2

  1. M =((A OR)-B)&K 1K1K1

  2. M = M-(Mは左にL-1桁シフト)。

  3. MIN =(B&M)OR(A-(A&M))

  4. MAX =(A&M)OR(B-(B&M))

  5. MAXは桁シフトされます。2tL

  6. 最後に、MAXとMINを適切にOR結合すると、Zが返されます。

スケッチを提出しました。必要な詳細を記入してください。


あなたが何を提案しているのか明確ではありません。整数はすでに小さく、それらのk個はすでに1つの単語にパックされているという仮定です。サイズをさらに小さくすることを提案していますか?もしそうなら、あなたは何をしますか?また、O(log k)時間で単一の単語にパックされたバイトニックシーケンスをソートする方法、またはO(log ^ 2 k)時間で一般的な(非ビットニック)シーケンスをソートする方法を知っています。O(log k)時間で一般的なシーケンスをソートするアルゴリズムを知っている場合、それをさらに詳しく説明してください。(このようなアルゴリズムは、もちろん選択の問題を解決します。)
アリ

さらにサイズを縮小することはありませんが、答えに必要のないサイズを縮小する方法を提案していました。混乱させて申し訳ありません。
-singhsumit

誤解しない限り、これはバイトニックシーケンスをソートするアルゴリズムのように見えます。一般的なシーケンスはソートしません。たとえば、3が左端(最上位)のフィールドにあるシーケンス3,0,2,0をソートしますか?
アリ

3 0 2 0は分離され、nはA = 3 2およびB = 0 0になり、MAXは3 2になり、MINは0 0になります。その後、新しいZは3 2 0 0になります。各反復でこれらのサイズは2倍になり、最終的にlog k時間で答えが得られます。
-singhsumit

いいえ。数字は圧縮されず、シフトダウンされるだけです。最初の反復では、位置の上位ビットが異なる数値のペアを分割し、A = 0 3 0 2とB = 0 0 0 0を取得します。したがって、MIN = 0 0 0 0、MAX = 0 3 0 2、 Z = 3 0 20。2番目の反復では、位置の下位ビットが異なるペアを分割します。したがって、再びA = 0 3 0 2、B = 0 0 0 0を取得し、再びZを変更しません。
アリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.