コンピュータサイエンスでの並べ替えと「現実の」世界での並べ替え


87

私はソフトウェアのソートアルゴリズムと、O(nlogn)障害を乗り越えるための可能な方法について考えていました。実用的な意味での高速ソートは不可能だと思いますので、そうは思わないでください。

そうは言っても、ほとんどすべてのソートアルゴリズムでは、ソフトウェアは各要素の位置を知っている必要があるようです。それ以外の場合、いくつかの並べ替え基準に従って各要素をどこに配置するかをどのように知ることができますか?

しかし、私がこの考えを現実の世界と交差させたとき、遠心分離機は、密度によって分子を「分類」するときに、各分子がどの位置にあるのかわかりません。実際、各分子の位置は関係ありません。しかし、各分子が密度と重力の法則に従っているという事実のために、比較的短期間で何兆ものアイテムを何兆もの分類することができます-それは私に考えさせられました。

各ノードにいくらかのオーバーヘッド(各ノードに追加された値またはメソッド)を使用して、リストの順序を「強制」することは可能でしょうか?遠心分離機のようなもので、各要素のみが(他のノードとの関係で)空間内の相対位置を気にします。または、これは計算のルールに違反していますか?

ここで取り上げられた大きなポイントの1つは、自然の量子力学的効果と、それらがすべての粒子に同時に並行して適用される方法だと思います。

おそらく、古典的なコンピューターは本質的にソートをのドメインに制限しますがO(nlogn)、量子コンピューターはそのしきい値を超えてO(logn)並列に動作するアルゴリズムにできる可能性があります。

基本的に並列バブルソートである遠心分離機は正しいように思われるという点は、時間計算量がO(n)です。

次の考えは、自然が分類O(n)できるのなら、なぜコンピューターができないのかということだと思います。


44
遠心分離機は、超並列バブルソートの実装であり、特別なものではありません。
el.pescado 2017年

3
あるときnだけの配列整理するプロセッサ(コア)nの項目を簡単に達成することができますO(n)複雑さを。厳しい真実は、通常、2..10コアのみのCPUで長い配列(数千および数百万のアイテム)をソートする必要があるということです。
Dmitry Bychenko 2017年

24
n log nは、アイテムのペア比較するソートで実行する必要がある比較の数であることに注意してください。ソートアルゴリズムがアイテムのペアを比較する必要はありません。ペアワイズ比較を行わないソートを思い付くことができれば、n lognよりも速くすることができます。
エリックリペット2017年

7
あなたが見逃しているのは、ソリューション内のこれらの分子のそれぞれが処理ユニットであるということです。分子を数えるエミュレーターはありません-分子はそれ自体を数えます。類似のコンピューターには、ソートするアイテムと同じ数のプロセッサーコアと独立したメモリがあります。O(n)それ自体では何もわかりません。これは、同様の制約を持つアルゴリズムを比較し、同様のアーキテクチャで実行する場合にのみ役立ちます。アルゴリズムの複雑さの入門コースでは、遠心分離機や実際のコンピューターとはほとんど関係のない非常に単純化されたモデル「コンピューター」を使用します:)
Luaan 2017年

4
この質問はcs.stackexchange.comに属しているため、トピック外として閉じることに投票します
Robert Fraser

回答:


71

編集:私は遠心分離機のメカニズムを誤解していました、そしてそれは比較をしているように見えます、それで超並列のもの。ただし、2つのプロパティを比較するのではなく、並べ替えられているエンティティのプロパティを操作する物理プロセスがあります。この回答は、その性質のアルゴリズムを対象としています。

遠心分離機は、要素間の比較では実際には機能しないが、実際には個々の要素の特性(「遠心力」)によって分離された分類メカニズムを適用します。一部のソートアルゴリズム、特に基数ソートはこのテーマに分類されます。このソートアルゴリズムが並列化されると、遠心分離機の例に近づくはずです。

他のいくつかの非比較ソートアルゴリズムは、バケットソートカウントソートです。バケットソートは、遠心分離機の一般的な考え方にも当てはまることがわかります(半径はビンに対応する可能性があります)。

各要素が分離して考慮されるもう1つのいわゆる「ソートアルゴリズム」は、スリープソートです。ここでは、遠心力ではなく時間がソートに使用される大きさとして機能します。


これは実際には正しい答えです。ビンと入力にO(1)時間でアクセスできる場合、ビンソート/基数ソートにはO(n)の複雑さがあります。
pjc50 2017年

5
「他の誰かがすぐにスリープソートについて考えますか?」と尋ねるつもりでした。
どうやら

遠心分離機は要素を比較することによって機能します。ハッシュ関数は(主に)密度です。たとえば、プロパンと空気の混合物を遠心分離すると、プロパンが境界に分類されます。しかし、プロパンと水を遠心分離すると、プロパンが中央に分類されます(水はより密度が高くなります)。このプロセスは、「バブルソート」にちなんで名付けられた物理的なプロセスとほぼ同じです。
ナット

SleepSortの複雑さは、実際にはスケジューラーの複雑さに依存していませんか?
モーウェン2017年

@Morwenn古いLinuxスケジューラーはO(1)でしたが、新しいものはO(log n)でした。これらの両方は、睡眠中の一定の要因によって上回っています
user1952500 2017年

35

計算の複雑さは、常にいくつかの計算モデルに関して定義されます。たとえば、Brainfuckで実装されている場合、一般的なコンピューターでOn)であるアルゴリズムはO(2 n)である可能性があります。

遠心分離機の計算モデルには、いくつかの興味深い特性があります。例えば:

  • 任意の並列処理をサポートします。溶液中にいくつの粒子が含まれていても、それらはすべて同時にソートできます。
  • 質量による厳密な線形ソートの粒子ではなく、非常に近い(低エネルギー)近似を提供します。
  • 結果の個々の粒子を調べることは現実的ではありません。
  • 異なるプロパティでパーティクルを並べ替えることはできません。質量のみがサポートされています。

このようなものを汎用コンピューティングハードウェアに実装する能力がないことを考えると、モデルには実際的な関連性がない可能性があります。しかし、そこから学ぶべきことがあるかどうかを確認することは、まだ検討する価値があります。たとえば、非決定論的アルゴリズム量子アルゴリズムはどちらも現在実際に実装可能ではありませんが、どちらも活発な研究分野です。


ネイチャー/フィジクスは一般的に並列です(そのため、シリアルコンピューターでシミュレーションするのは計算コストが非常に高くなります)。そのため、OPのアナロジーには大きな欠陥があります。粒子/分子が試験管の長さなどに沿って移動するのにはまだ時間がかかります。したがって、試験管が長いほどスレッドあたりの作業量が多くなりますが、試験管が広いほど平行度が高くなります。(そして、遠心分離機は試験管の領域全体でソートされないことに注意してください。したがって、マージなしの多くの並列ソートですが、途中で何らかの相互作用が発生する可能性があります。並列コンピューターでの実際のソートとは異なり、最終的にマージされます)
Peter Cordes

29

秘訣は、遠心分離機を使用してリストを並べ替える可能性しかないということです。他の実際の並べ替え[要出典]と同様に、リストを並べ替えた確率を変更できますが、すべての値(アトム)をチェックしないと確実ではありません。

「遠心分離機をどのくらいの時間実行する必要がありますか?」という質問について考えてみます。
ピコ秒だけ実行した場合、サンプルは初期状態よりもソートされていない可能性があります。または、数日間実行した場合、完全にソートされている可能性があります。しかし、実際に内容を確認しないとわかりません。


それはかなり良い点です。どうして知っていますか?繰り返しになりますが、適切なルールが十分に適切である場合、あなたも知りたいですか?(つまり、確率を低くして無視できるようにした場合)。
クリス2017年

粒子が遠心分離機の端に到達するのにかかる時間をいつでも計算できます。加速度(w ^ 2 * r、ここでwは角速度)がわかっていて、時間を計算できます。
user1952500 2017年

1
本当ですが、それはブラウン運動他の原子力、および量子物理学(ありがとう、小さなことです!)によって混乱しているため、状態を確認するまで、リストを並べ替えたことを完全に確信することはできません。
ti7 2017年

1
非常に小さな粒子がない場合は、量子効果を無視できます。粒子が非常に小さい場合、ソートアルゴリズムは機能する必要はなく、実際、量子効果のために機能することに依存することはできません。また、不確定性原理により、状態を確実にチェックすることはできません(1つのパーティクルをチェックすると、他のパーティクルが移動することになります)。
user1952500 2017年

1
@Krisええと、遠心分離機が完全に分類されないことはわかっています。血液遠心分離機での血液凝固の防止など、実際の目的で違いが重要でなくなるまで、これを続けます。しかし、ウラン遠心分離機を見てください。それらは、はるかに「近い」(分離が難しい)アイテムを分類する必要があり、少量の目的の材料を生産するために莫大な費用をかけて何度も何度も分類し続ける巨大な設備を必要とします。そして、遠心分離機には一定のサイズがあり、分離時間はチューブの幅に比例します... O(n)とだけ言うことはできません。
ルアン2017年

5

コンピュータベースの「注文」の実際の例は、「ドローンの群れ」として知られる、互いに協調して動作する自律型ドローンです。ドローンは、個人としてもグループとしても機能および通信し、複数のターゲットを追跡できます。ドローンは、どのドローンがどのターゲットを追跡するかをまとめて決定し、ドローン間の衝突を回避する必要があることは明らかです。これの初期のバージョンは、フォーメーションにとどまりながらウェイポイントを移動するドローンでしたが、フォーメーションは変更される可能性があります。

「ソート」の場合、ドローンは特定の順序で線またはパターンを形成するようにプログラムでき、最初は任意の順列または形状でリリースされ、集合的かつ並行して、順序付けられた線またはパターンをすばやく形成します。

コンピュータベースのソートに戻ると、1つの問題は、メインメモリバスが1つあり、多数のオブジェクトがメモリ内を並行して移動する方法がないことです。

各要素の位置を知る

テープソートの場合、各要素(レコード)の位置は「テープ」にのみ「認識」され、コンピューターには認識されません。テープベースのソートは、一度に2つの要素を処理するだけでよく、テープの実行境界(ファイルマーク、または異なるサイズのレコード)を示す方法が必要です。


4

私見、人々はlog(n)を考えすぎています。O(nlog(n))は実質的にO(n)です。また、データを読み取るためだけにO(n)が必要です。

クイックソートなどの多くのアルゴリズムは、要素をソートするための非常に高速な方法を提供します。実際には非常に高速なクイックソートのバリエーションを実装できます。

本質的に、すべての物理システムは無限に並列です。あなたは砂粒の中に原子のバットロードを持っているかもしれません、自然は各原子の各電子がどこにあるべきかを理解するのに十分な計算能力を持っています。したがって、十分な計算リソース(O(n)プロセッサ)がある場合は、log(n)時間でn個の数値を並べ替えることができます。

コメントから:

  1. k個の要素を持つ物理プロセッサを考えると、最大でO(k)の並列性を実現できます。n個の数値を任意に処理する場合でも、kに関連するレートで処理します。また、この問題を物理的に定式化することもできます。エンコードしたい数に比例した重みを持つn個の鋼球を作成できます。これは、理論的には遠心分離機で解決できます。ただし、ここで使用している原子の量はnに比例します。一方、標準的なケースでは、プロセッサ内のアトムの数は限られています。

  2. これについて別の考え方をすると、各番号に小さなプロセッサが接続されていて、各プロセッサが隣接するプロセッサと通信できる場合、これらすべての番号をO(log(n))時間で並べ替えることができます。


しかし、計算はそれだけではありません-自然の物理的特性を使用していくつかの作業を行いますか?私はここで量子コンピューティングに取り組んでいるかもしれませんが、それが物理的に実行できるのであれば、計算的に実行できるはずですか?おそらく古典的な計算は、O(nlogn)とO(logn)の間の障害です。
クリス2017年

2
@Kris正確ではありません。k個の要素を持つ物理プロセッサを考えると、最大でO(k)の並列性を実現できます。n個の数値を任意に処理する場合でも、kに関連するレートで処理します。また、この問題を物理的に定式化することもできます。エンコードしたい数に比例した重みを持つn個の鋼球を作成できます。これは、理論的には遠心分離機で解決できます。ただし、ここで使用している原子の量はnに比例します。一方、標準的なケースでは、プロセッサ内のアトムの数は限られています。
ElKamina 2017年

その制限はQMオブジェクトにも適用されますか?好奇心から
クリス2017年

1
@Kris私はそれに答えるのに十分な深さでQMを理解していません。
ElKamina 2017年

心配ない!私はとても好奇心が強く、眠れないようです。興味深い回答をありがとうございます。
クリス2017年

4

私は大学を始めたとき、高校卒業後の夏のオフィスで働いていました。私はAPComputer Scienceで、とりわけソートと検索について勉強しました。

私はこの知識を、思い出せるいくつかの物理システムに適用しました。

自然なマージソートを開始します…

システムは、引き出しのバンクにファイルする必要があるファイルカードサイズのティアオフを含むマルチパートフォームを印刷しました。

私はそれらの山から始めて、最初に山を分類しました。最初のステップは5かそこらを拾うことです、あなたの手に簡単に整頓するのに十分な数です。ソートされたパケットを下に置き、各スタックを交差させて別々に保ちます。

次に、スタックの各ペアをマージして、より大きなスタックを作成します。スタックが1つになるまで繰り返します。

…挿入ソートを完了する

次のカードは同じ開いている引き出しの少し下にあるため、並べ替えられたカードをファイリングする方が簡単です。

基数ソート

これは、何度も教えようとしたにもかかわらず、私がどうやってそんなに速くやったのか誰も理解していませんでした。

小切手スタブ(パンチカードのサイズ)の大きなボックスを並べ替える必要があります。大きなテーブルでソリティアをプレイしているように見えます—取引、積み重ね、繰り返し。

一般に

30年前、私はあなたが何を求めているかに気づきました。比較レコードの処理、およびキャッシュのレベルに相対的なコストがあるため、アイデアは物理システムに直接転送されます。

よく理解されている同等物を超えて

あなたのトピックについてのエッセイを思い出します、そしてそれはスパゲッティの種類をもたらしました。キー値を示すために乾麺の長さをトリミングし、レコードIDでラベルを付けます。これはO(n)であり、各アイテムを1回処理するだけです。

次に、バンドルをつかんで、テーブルの一方の端をタップします。それらは下端に整列し、ソートされます。一番長いものを簡単に外して、繰り返すことができます。読み出しもO(n)です。

ここ「現実の世界」では、アルゴリズムに対応していないことが2つあります。まず、エッジの位置合わせは並列操作です。すべてのデータ項目はプロセッサでもあります(物理法則が適用されます)。したがって、一般に、使用可能な処理をnでスケーリングし、基本的に古典的な複雑さをnの係数で除算します。

次に、エッジを揃えるとどのように並べ替えが行われますか?実際のソートは、読み出したあなたにもかかわらず、あなたがワンステップで最長のを見つけることができますしているんでした最長のを見つけるために、それらのすべてを比較します。ここでも、nの因数で除算するため、最大のものを見つけるのはO(1)になります。

もう1つの例は、アナログコンピューティングの使用です。物理モデルは問題を「即座に」解決し、準備作業はO(n)です。原則として、計算は、準備されたアイテムの数ではなく、相互作用するコンポーネントの数に応じてスケーリングされます。したがって、計算はn²でスケーリングされます。私が考えている例は、重み付き多要素計算です。これは、マップに穴を開け、穴を通過する文字列から重みをぶら下げ、リング上のすべての文字列を収集することによって行われました。


スパゲッティの並べ替えは楽しい読み物でした。考えるのは楽しかったですが、一番長い麺をスキャンする行為を批判します。麺をスキャンするので、これは実際にはO(1)操作ではありません。1万本の麺と長さが似ている数本の麺を想像してみてください...これはO(1)の「目玉」操作ではありません。実際には、分類されていないすべての麺をスキャンして、最長のものを見つける必要があります。
thisClark 2017年

手のひらを束全体に置き、手に触れた最も高い麺を1つ引き抜くことで、すべての麺を「スキャン」できます。麺の長さが非常に近い場合は、より正確な「手」の表面を使用して、最も高い麺をつかみます。麺は選択ソートのように連続して選択されるのではなく、一度に選択されるため、O(n)の「計算」能力が利用可能です。
Bradd Szonye 2017年

1
@ThisClarkには、より正確なジグが必要です。麺を揃える下部のストップに平行な平らな面です。1本の麺(最も高い)に触れて圧縮するまで、慎重に下げます。すべての麺に対する平面の高さの比較は、その麺によって並行て行われます。あなたはより高い係数が必要であることを示唆していますが、その議論はBig-Oを変えません。
JDługosz

3

ソートはまだO(n)の合計時間です。それよりも速いのは、並列化によるものです。

遠心分離機は、n個のコアに並列化されたn個の原子のバケットソート見なすことができます(各原子はプロセッサとして機能します)。

並列化によってソートを高速化できますが、プロセッサの数が制限されているため、一定の係数でのみソートできます。O(n / C)は依然としてO(n)です(CPUのコア数は通常<10、GPUは<6000)


2

遠心分離機はノードを分類していません。ノードに力を加えてから、ノードと並行して反応します。したがって、各ノードがその「密度」に基づいて上下に並行して移動するバブルソートを実装する場合は、遠心分離機を実装する必要があります。

現実の世界では、非常に大量の並列タスクを実行できることに注意してください。コンピューターでは、物理処理装置の数に等しい最大の実際の並列タスクを実行できます。

結局、2つのノードで同時に変更することはできないため、要素のリストへのアクセスも制限されます。


1

各ノードにいくらかのオーバーヘッド(各ノードに追加された値またはメソッド)を使用して、リストの順序を「強制」することは可能でしょうか?

コンピュータプログラムを使用して並べ替える場合、並べ替える値のプロパティを選択します。これは通常、数字の大きさまたはアルファベット順です。

遠心分離機のようなもので、各要素のみが(他のノードとの関係で)空間内の相対位置を気にします

このアナロジーは、単純なバブルソートを適切に思い出させます。各反復で小さい数値がどのように発生するか。あなたの遠心分離機ロジックのように。

それで、これに答えるために、私たちは実際にソフトウェアベースのソートでそのようなことをしませんか?


1
私はあなたが正しいと思います。ここで私が類推を失ったのは、各分子が並行して作用することを忘れたということだと思います。だから、それは並列バブルソートのようになります...
クリス2017年

1

まず、2つの異なるコンテキストを比較しています。1つは論理(コンピューター)で、もう1つは物理学です。これは、(これまでのところ)数式を使用してその一部をモデル化でき、プログラマーとしてこの数式を使用してシミュレートできることが証明されています。 (の一部)論理作業の物理学(例:ゲームエンジンの物理学エンジン)。

第二に、物理学ではほとんど不可能なコンピュータ(論理)の世界でいくつかの可能性があります。たとえば、メモリにアクセスして各エンティティの正確な位置を毎回見つけることができますが、物理学ではハイゼンベルグの不確定性原理が大きな問題です。

第三に、遠心分離機とその操作を実世界でコンピューターの世界にマッピングしたい場合、それは誰か(神)があなたに物理学のすべての規則が適用されたスーパーコンピューターを与え、あなたがその中で小さな分類をしているようなものです遠心分離機を使用して)そしてあなたの分類問題がo(n)で解決されたと言うことによって、あなたはバックグラウンドで起こっている巨大な物理シミュレーションを無視しています...


0

もう1つの見方は、遠心分離機で説明していることは、「スパゲッティソート」(https://en.wikipedia.org/wiki/Spaghetti_sort)と呼ばれるものに類似しているということです。さまざまな長さの未調理のスパゲッティロッドの箱があるとします。それらをこぶしで持ち、手を緩めて垂直に下げ、両端がすべて水平のテーブルに載るようにします。ブーム!それらは高さでソートされています。O(一定)時間。(または、ロッドを高さで取り出して...スパゲッティラックに入れる場合はO(n)だと思いますか?)

スパゲッティの数はO(一定)ですが、スパゲッティの音速が有限であるため、最長のストランドの長さはO(n)であることがわかります。したがって、無料で提供されるものはありません。


それは私が11時間前に言ったのと同じことです。そして、物理システムがどのようにnまたはn²で除算し、アルゴリズムと計算のモデルを維持できるかについて説明しました。
JDługosz

0

考えてみてください:「遠心分離機ソート」は本当にスケーリングが優れているのでしょうか?スケールアップするとどうなるか考えてみてください。

  • 試験管はどんどん長くなる必要があります。
  • 重いものは、底に到達するためにさらに移動する必要があります。
  • 慣性モーメントが増加し、選別速度まで加速するためにより多くの電力とより長い時間が必要になります。

遠心分離機のソートに関する他の問題も検討する価値があります。たとえば、狭いサイズのスケールでしか操作できません。コンピューターの並べ替えアルゴリズムは、1から2 ^ 1024以上の整数を処理できます。水素原子の2 ^ 1024倍の重さの何かを遠心分離機に入れてください、そして、まあ、それはブラックホールであり、銀河は破壊されました。アルゴリズムが失敗しました。

もちろん、ここでの本当の答えは、他の答えで述べられているように、計算の複雑さはいくつかの計算モデルに関連しているということです。また、「遠心分離ソート」は、RAMモデル、IOモデル、マルチテープチューリングマシンなどの一般的な計算モデルのコンテキストでは意味がありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.