minとmaxの両方をスワップするダブルエンド選択ソートは、比較の数が同じであっても、通常の選択ソートより高速であると主張されています。私はそれがループのいくつかを取り除くことを理解しますが、比較の数が同じであれば、どのように速くなりますか?事前アルゴリズム - シングルエンドのものよりもダブルエンドの選択の方が実際に高速ですか?
2
A
答えて
0
で
おかげで、ここで選択ソートと比較を行っカウントダブルエンド選択ソートの実装です。
実行すると、ダブルエンド選択ソートは常により多く、の比較を通常の選択ソートよりも実行することがわかります。定期的な選択ソートのための比較の数であるためだ
import random
def selsort(xs):
N = len(xs)
comparisons = 0
for i in xrange(N):
m = i
for j in xrange(i+1, N):
comparisons += 1
if xs[j] < xs[m]: m = j
xs[i], xs[m] = xs[m], xs[i]
return comparisons
def deselsort(xs):
N = len(xs)
comparisons = 0
for i in xrange(N//2):
M = m = i
for j in xrange(i+1, N-i):
comparisons += 2
if xs[j] < xs[m]: m = j
if xs[j] >= xs[M]: M = j
xs[i], xs[m] = xs[m], xs[i]
if M == i: M = m
xs[N-i-1], xs[M] = xs[M], xs[N-i-1]
return comparisons
for rr in xrange(1, 30):
xs = range(rr)
random.shuffle(xs)
xs0 = xs[:]
xs1 = xs[:]
print len(xs), selsort(xs0), deselsort(xs1)
assert xs0 == sorted(xs0), xs0
assert xs1 == sorted(xs1), xs1
:
(n-1) + (n-2) + ... + 1 = n(n-1)/2
ダブルエンド選択ソートの場合は、比較の数は(nが奇数のために - でもケースが似ている)であります
2(n-1) + 2(n-3) + 2(n-5) + ... + 2
= (n-1)+(n-2)+1 + (n-3)+(n-4)+1 + ... 2+1+1
= ((n-1) + (n-2) + ... + 1) + (n-1)/2
= n(n-1)/2 + (n-1)/2
関連する問題
- 1. Javaは、バブルソートでC#よりも実際に高速ですか?
- 2. javaによるシーケンスnextValの取得は、テーブルで選択クエリを実行するよりも高速ですか?
- 3. 選択ソートアルゴリズムが挿入のソートよりも一貫して高速なのはなぜですか?
- 4. 速いtest1のテストよりも高速である理由
- 5. Oracleストアドプロシージャは、Microsoft.NETアプリケーションの行SQLよりも高速ですか?
- 6. 偽のスタックは実際のスタックより高速です
- 7. クロスインナーよりもはるかに高速が仕事で
- 8. Redisは実際のスループットよりもinstant instant_ops_per_sec高い
- 9. MS Access 2007の高速ポータブルデータベースの推奨事項よりも速いものはありますか?
- 10. ParHashMapはHashMapよりもルックアップ操作が高速ですか?
- 11. dart2jsのコードはどのようにjavascriptよりも高速ですか?
- 12. リストから選択したものよりも多くの選択肢をランダムに選択
- 13. なぜSHA512をSHA384よりも選択したのですか?
- 14. ネストされたループよりも速いアルゴリズムですか?
- 15. 何度も実行した後にアルゴリズムが高速になるのはなぜですか? (Java)
- 16. Nymphyの乗算関数よりも、VectoriousのMatrix.product関数が高速ですか?
- 17. Windows C++のマルチスレッドIOPSがIOMeterよりも高速なのはなぜですか?
- 18. プロパティの設定よりもオブジェクトリテラルのインスタンス化が高速ですか?
- 19. stream.max()はstream.reduce()よりも常に高速ですか?
- 20. なぜWebViewはTextViewよりもはるかに高速です
- 21. 高速SQLクエリの選択
- 22. 標準アレイは、convネットフィードフォワードのgpuArrayよりも高速です。
- 23. なぜこのコードでC++がCよりもずっと高速ですか?
- 24. WindowsでFFTWがLinuxよりも高速なのはなぜですか?
- 25. .NETオブジェクトリレーショナルマッパーが最も高速ですか?
- 26. C#TPLよりもC++ PPLの方が速いですか?
- 27. count()メソッドがforループのpythonよりも高速な理由
- 28. JPEGよりもロッシー圧縮が速いのですか?
- 29. を選択し、他のものよりも低い値 - オラクル
- 30. JTDSがMicrosoft JDBCドライバよりも高速なのはなぜですか?
(ここでは、私は、各用語
(n-i) + (n-i-1) + 1
として2(n-i)
を書き換えています) 'faster'は* machine *に依存します。 「比較の数は同じだが、比較の数は同じではない」:(入力)値のペアを比較し、非大型のものだけが最小の候補、最大ではないものを選択する。 – greybeardあなたは何を意味するか具体的になることができますか?すべてのケースで、2つのアルゴリズムがまったく同じ数の比較を実行することはほとんどありません。実際には説明していないサードパーティの主張を証明するか否かを尋ねることを基本としているため、現状のままで問題に答えることは難しいです。また、「ダブルエンド選択ソート」とは何かを推測しています。あなたが議論している実装へのリンクがありますか? –
実際のデモンストレーションと数学的分析の両方で、ダブルエンド選択ソートは通常の選択ソートよりも多くの比較を実行するという私の答えを示しています。したがって、同じ数の比較を実行するというこの質問の仮定は間違っています。 –