タグ付けされた質問 「sorting」

いくつかの順序関係に関して要素のセットを順序付けるアルゴリズムの問​​題。

5
O(n)の複雑さで順序付けされた単語の頻度
Java開発者のポジションへのインタビュー中に、私は次のことを尋ねられました。 2つのパラメーターを取る関数を記述します。 テキストドキュメントを表すStringおよび 返すアイテムの数を提供する整数。 最も頻度の高い単語が最初に出現する単語の頻度で並べられた文字列のリストを返すように関数を実装します。ソリューションは時間で実行する必要がありますはドキュメントの文字数です。O(n)O(n)O(n)nnn 以下は私が(疑似コードで)答えたものです、それはソートのためにではなく時間です。どうやって回するのかわからない。 O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n)O(n)O(n)O(n) wordFrequencyMap = new HashMap<String, Integer>(); words = inputString.split(' '); for (String word : words) { count = wordFrequencyMap.get(word); count = (count == null) ? 1 : ++count; wordFrequencyMap.put(word, count); } return wordFrequencyMap.sortByValue.keys 誰かが知っているか、誰かが私にいくつかのヒントを与えることができますか?

2
この並べ替え/並べ替えの問題の名前は?
長さ配列が与えられます。配列の各要素は、Kクラスの1つに属しています。あなたはそのようにスワップ操作の最小数を使用してアレイを再配置することになっているすべての要素から同じクラスは常に一緒にグループ化され、それらが隣接サブアレイを形成していること、。 例えば: んnnKKK 他に3つの有効な取り決めが残っています。[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 2 、2 、2 、1 、3 、3 ] 、 又は[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 1 、2 、2 、2 、3 、3 ] 、 又は[ 2 、1 、3 、3 、2 、2 ] ⟶ [ 3 …

2
二分法モデルのO(n)で整数の並べ替えは可能ですか?
私の知る限り、次の問題を解決する最悪の場合のアルゴリズムは存在しません。O(n)O(n)O(n) 有限の整数で構成される長さシーケンスを前提として、すべての要素が後続要素以下である順列を見つけます。nnn しかし、計算の二分法モデルには、それが存在しないという証拠がありますか? 整数の範囲を制限しないことに注意してください。比較ソートのソリューションも制限しません。

1
なぜイントロソートはマージソートではなくヒープソートを使用するのですか?
イントロソートの実装をカバーする宿題の一環として、なぜマージソート(または他のアルゴリズムではなく)の代わりにヒープソートが使用されるのかを尋ねられます。 O(nlog(n))O(nlog⁡(n))O(n\log(n)) Introsortは、高速な平均パフォーマンスと(漸近的に)最適な最悪のケースのパフォーマンスの両方を提供するハイブリッドソートアルゴリズムです。クイックソートで始まり、再帰の深さがソートされる要素の数(の対数)に基づくレベルを超えると、ヒープソートに切り替わります。(ウィキペディア、2014年5月6日取得。) 私が考えることができる唯一の理由は、ヒープソートが「適所に」あるということです...しかし、これがなぜここで重要になるのかは本当にわかりません。

1
クイックソートの分析時に使用する障害の測定
Lomutoパーティションと固定ピボットを使用したクイックソートが、ランダムに生成された入力に対して不規則に、しかし全体としては不十分に実行されている理由を理解しようとしています。入力がランダムに生成されたとしても、シーケンスには多くの順序があるかもしれないと思いますが、シーケンスの無秩序のレベルを測定する方法がわかりません。反転の数を使用することを考えましたが、この別の質問から、この場合はあまり良い方法ではないことを尋ねました。 私のランダムシーケンスに「順序」がたくさんあると思う理由は、ピボットをランダム化するとパフォーマンスの問題が修正されるためです。ただし、理論的には、これらの「ランダム」な入力シーケンスでパフォーマンス上の問題が発生することはありません。

2
コインフリップコンパレーターを使用するときにランダムな順列を返す「並べ替え」アルゴリズムはありますか?
標準の検索アルゴリズムで使用されるコンパレーターが公平なコインフリップで置き換えられたときに実行時間が変更されるかどうかを質問者が知りたいというこの質問と、Microsoftの均一な順列ジェネレーターの書き込みの顕著な失敗に触発されて、私の質問はこうです: コンパレータの実装に応じて、比較に基づく並べ替えアルゴリズムはありますか? 真のコンパレータを使用する場合、要素を並べ替えられた順序で返します(つまり、比較は、標準の並べ替えアルゴリズムで期待されることを行います) コンパレーターが公正なコインフリップで置き換えられたときに、要素の一様にランダムな順列を返します(つまりx < y = true、xとyの値に関係なく、確率1/2で返します)。 並べ替えアルゴリズムのコードは同じでなければなりません。変更が許可されるのは、比較「ブラックボックス」内のコードのみです。

1
重複を効率的に、少ないメモリオーバーヘッドで削除する
結果セットのみを格納する必要があるように、重複の整数のリストを効率的にフィルター処理したいと思います。 これを確認できる1つの方法: 整数の範囲、大きい(たとえば)S={1,…,N}S={1,…,N}S = \{1, \dots{}, N\}NNN2402402^{40} 関数があり、衝突が多いと思われます(画像はに均一に分布しています)。f:S→Sf:S→Sf : S \to SSSS 次に、を格納する必要があり。つまり、f[S]f[S]f[S]{f(x)|x∈S}{f(x)|x∈S}\{f(x) | x \in S\} かなり正確な(確率的)推定値がありであるため、事前にデータ構造を割り当てることができます()。| f [ S ] | ≈ 2 30|f[S]||f[S]||f[S]||f[S]|≈230|f[S]|≈230|f[S]| \approx 2^{30} 私はいくつかのアイデアを持っていますが、何が最善のアプローチになるかわかりません: 入力セットがメモリに収まらないため、ビットセットは問題外です。 ハッシュテーブルですが、(1)メモリオーバーヘッドが必要です|f[S]||f[S]||f[S]|(2)作成時にテーブルを調査する必要があり、メモリのオーバーヘッドのために追加の時間が必要です。 「オンザフライ」ソート、できれば複雑度(非比較ソート)。それに関して、バケットソートとフラッシュソートの主な違いは何なのかわかりません。O(N)O(N)O(N) 二分探索木を持つ単純な配列ですが、これには時間必要です。O(Nlog|f[S]|)O(Nlog⁡|f[S]|)O(N \log |f[S]|) ブルームフィルターまたは同様のデータ構造を使用すると、問題の緩和(誤検知を伴う)に役立つ可能性があります。 stackoverflowの上のいくつかの質問は、物事のこの種に取り組むように見える(/programming/12240997/sorting-array-in-on-run-time、/programming/3951547/java -array-finding-duplicates)、しかし私の要件に一致するものはないようです。

3
最大要素をピボットとして選択した場合、Quicksortには常に2次ランタイムがありますか?
クイックソートアルゴリズムがあり、常に最小(または最大)の要素をピボットとして選択する場合。すでにソートされたデータセットを提供すると、「すでにソートされた」リストが昇順か降順かに関係なく、常に最悪のパフォーマンスが得られると私は思いますか? 私の考えでは、ピボットの最小要素を常に選択する場合、ピボットに対してソートするように選択されたサブセットは常に同じサイズ?

3
比較ネットワークがソートするかどうかはどうすればわかりますか?
比較ネットワークが表示されます。比較ネットワークが並べ替えネットワークであるかどうかをどのように判断できますか?下の画像には、選択ソートおよび挿入ソートネットワークの例があります。その意図は、比較ネットワークを持ち、数値をソートすることです。この場合2 ^ nの値をテストすると、2 ^ 8になります。これは、それをテストするための多くの|非効率的な方法です。これが有効なソーティングネットワークであることを確認するための数学モデル/証明を探しています。
9 sorting 

1
再帰挿入ソートの繰り返し
CLRSからこの問題を試しました(ページ39、2.3-4) 挿入ソートは次のように再帰的な手続きとして表現できます。ソートするA[1... n]には、再帰的にソートしてA[1... n-1]からA[n]、ソートされた配列に挿入しA[1... n-1]ます。この再帰バージョンの挿入ソートの実行時間の再帰を記述します。 私が形成した再発は T(n)={Θ(1)T(n−1)+Θ(n)if n=1,if n>1.T(n)={Θ(1)if n=1,T(n−1)+Θ(n)if n>1. T(n) = \begin{cases}\Theta(1) & \textrm{if } n = 1,\\ T(n-1) + \Theta(n) & \textrm{if } n > 1. \end{cases} 私の推論 の基本ケースでは、リストはソートされるため、作業は発生せず、時間が一定になります。n=1n=1n = 1 他のすべてのケースでは、時間はシーケンスのソートとそのシーケンスA[1...n-1]への挿入に依存します。したがって、それはそれらの合計、すなわちます。T(n−1)+Θ(n)T(n−1)+Θ(n)T(n-1) + \Theta(n) 再発関係が正しいか知りたい。そうでない場合、間違いは何ですか?どのようにして再発関係を正しく定式化するのですか?

2
だけが配置されていない場合、
log nだけが配置されていないときに、要素の配列をどのようにソートできるかを理解しようとしています。んnnログんlog⁡n\log n 最大で反転で配列を並べ替えると複雑さO (n log (I / n ))があると聞きました。ソートされていないlog n要素があるため、私の場合、最大でn log nの反転があります。私IIO (n ログ(私/ n))O(nlog⁡(I/n))O(n\log(I/n))ログんlog⁡n\log nn ログんnlog⁡nn\log n 質問に対する答えはこれは式と一致しますが、その背後にある「アイデア」、またはそれを実現するソートアルゴリズムは理解できません。O (n ログログn )O(nlog⁡log⁡n)O(n\log\log n)
8 sorting 

1
検索と並べ替えアルゴリズムの基本操作の複雑さ[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 Wikiには優れたチートシートがありますが、これは含まれていません。比較またはスワップの。(ただし、通常、スワップ数はその複雑さを決定します)。そこで、以下を作成しました。次の情報は正しいですか?エラーがある場合はお知らせください。修正します。 挿入ソート: 平均ケース/最悪ケース: ; 入力がすでに降順でソートされている場合に発生しますΘ(n2)Θ(n2)\Theta(n^2) ベストケース: ; 入力がすでにソートされている場合Θ(n)Θ(n)\Theta(n) 比較の数:、最悪の場合&にΘ (N )最良の場合にΘ(n2)Θ(n2)\Theta(n^2)Θ(n)Θ(n)\Theta(n) スワップ数:最悪/平均ケース&Θ(n2)Θ(n2)\Theta(n^2)が最良の場合000 選択ソート: 平均ケース/最悪ケース/最良ケース:Θ(n2)Θ(n2)\Theta(n^2) 比較数:Θ(n2)Θ(n2)\Theta(n^2) スワップ数:最悪/平均ケース&0Θ(n)Θ(n)\Theta(n)000最良のケースの中で最もにおいて、アルゴリズムは、あなたが所定の位置に要素を入れ替えたら、あなたは再びそれに触れることはありません、Nスワップが必要です。 マージソート: 平均ケース/最悪ケース/最良ケース:。入力がソートされているかどうかはまったく関係ありませんΘ(nlgn)Θ(nlgn)\Theta(nlgn) 比較数:最悪の場合は&最良の場合はΘ (n )。サイズn&mの2つの配列をマージしていると仮定します。ここでn &lt;Θ(n+m)Θ(n+m)\Theta(n+m)Θ(n)Θ(n)\Theta(n)n&lt;mn&lt;mn<m スワップ数:スワップなし![ただし、インプレースソートではなく追加のメモリが必要] クイックソート: 最悪の場合:Θ(n2)Θ(n2)\Theta(n^2) ; 入力はすでにソートされています ベストケース: ; ピボットが配列をちょうど半分に分割するときΘ(nlogn)Θ(nlogn)\Theta(nlogn) 比較数:最悪の場合&Θ (n l o g nΘ(n2)Θ(n2)\Theta(n^2)最良の場合にΘ(nlogn)Θ(nlogn)\Theta(nlogn) スワップ数:最悪の場合&0Θ(n2)Θ(n2)\Theta(n^2)000、最良の場合は バブルソート: 最悪の場合:Θ(n2)Θ(n2)\Theta(n^2) ベストケース:Θ(n)Θ(n)\Theta(n) ; ソート済み 比較数:Θ(n2)Θ(n2)\Theta(n^2)最悪の場合と最良の場合の スワップ数:最悪の場合&0Θ(n2)Θ(n2)\Theta(n^2)000、最良の場合は 線形検索: 最悪の場合:Θ(n)Θ(n)\Theta(n) ; …

1
ヒープソートの最悪のケースを見つける
ACM ICPC 2004–2005 Northeastern European contestで問題Hに取り組んでいます。 問題は基本的に、ヒープを構築するためのアルゴリズム(シフトダウン)で最大数の交換を生成する最悪のケースを見つけることです。 入力:入力ファイルにはが含まれています()。nnn1≤n≤50,0001≤n≤50,0001 \le n \le 50{,}000 出力:ヒープになるように、からまでの異なる整数を含む配列を出力します。これをソートされた配列に変換すると、シフト操作の交換の合計数が最大になります。nnn111nnn 入力例:6 対応する出力:6 5 3 2 4 1 そして基本的な出力: [2, 1] [3, 2, 1] [4, 3, 1, 2] [5, 4, 3, 2, 1] [6, 5, 3, 4, 1, 2]

2
ソートされた文字列の辞書式順序で文字列のリストをソートする
LETアルファベット上の文字列の集合で合計に含まれていることをのシンボル。あAA{ 0 、… 、m − 1 }{0,…,m−1}\{0,\ldots,m-1\}んnn あなたの仕事は、各文字列を内部的にソートし、結果の文字列を辞書式順序でソートすることです。(アルゴリズムはこのように動作する必要はありません。) 例: 入力:33123 15 1 0 54215 21 12 出力:0 1 12 12 12333 12455 15 時間と空間でそれを行う方法を見つけました。O (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) サイズ配列を作成し、すべてのセルに初期値を与えるような配列を使用しているため、スペースは時間よりも大きくなっています。んnnO (1 )O(1)O(1) 各文字列(時間とスペース)をソートするためにバケットソートを使用し、コレクション自体(時間とスペース)をソートするためにワードツリーを使用しました。しかし、私の解決策は複雑すぎます。O (m + n )O(m+n)O(m+n)あAAO (m + n )O(m+n)O(m+n)O (m n )O(mn)O(mn) 時間とより少ないスペース、またはより速い、より良いソリューションがありますか?O (m + n …

1
部分ソートは配列のルックアップコストに役立ちますか?
並べ替えられていないリストで何かを調べることは、時間の複雑さ伴うタスクです。ただし、リストがソートされている場合、時間の複雑さはです。つまり、配列を並べ替える価値がある場合があります。ただし、ソートアルゴリズムの時間の複雑さはであるため、これはトレードオフです。O (n )O(n)O(n)O (ログ(n ))O(log⁡(n))O(\log(n))O (n ログ(n ))O(nlog⁡(n))O(n\log(n)) 私の知る限り、配列を 時間未満でソートすることはできません。しかし、それよりも短い時間で部分的に配列をソートできるアルゴリズムがあるかどうか疑問に思っていますか?私はあなたが時間でそのような部分的にソートされた配列の値を検索できないと確信していますが、よりもうまくできますか?O (n ログ(n ))O(nlog⁡(n))O(n\log(n))O (ログ(n ))O(log⁡(n))O(\log(n))O (n )O(n)O(n) つまり、よりも高速なアルゴリズムでソートされていない配列を処理して、ルックアップアルゴリズムがよりも高速に検索できるようにすることは可能ですが、ほど高速ではありません?O (n ログ(n ))O(nlog⁡(n))O(n\log(n))O (n )O(n)O(n)O(log(n))O(log⁡(n))O(\log(n))

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