選択と挿入の並べ替えの下限を見つけるために必要な敵対的な引数を見つけるように求められました。それへの参照がどこにも見つかりませんでした。
これについてはいくつか疑問があります。私は通常、「アルゴリズム」ではなく特定の「問題」の下限を見つけるために敵対的な議論が使用されることを理解しています。
マージの問題を理解しました。しかし、どのようにして選択および挿入ソート用に作成できますか?
選択と挿入の並べ替えの下限を見つけるために必要な敵対的な引数を見つけるように求められました。それへの参照がどこにも見つかりませんでした。
これについてはいくつか疑問があります。私は通常、「アルゴリズム」ではなく特定の「問題」の下限を見つけるために敵対的な議論が使用されることを理解しています。
マージの問題を理解しました。しかし、どのようにして選択および挿入ソート用に作成できますか?
回答:
あなたのコメントから、あなたは下限、上限、そして漸近表記の意味を混乱させているようです。たとえば、挿入ソートを使用します。その最良の実行時間は(これは、入力が既にソートされている場合に発生します)。最悪の実行時間は(これは、入力が逆ソート順の場合に発生します)。したがって、実行時間は次の線形関数の間にあるため、 との二次関数 、挿入ソートの実行時間は両方とも言える そして 。この場合、実行時間はであるとは言えないことを理解することが重要です。どうして?アルゴリズムを実行させる入力が存在するため。ただし、最悪の場合の実行時間は、アルゴリズムを実行させる入力が存在するため、 。私たちは通常、 ただし、アルゴリズムによって実行される操作の数の上限に関心があるため、最悪の場合の表記法。
ここで、挿入ソートの敵対的な引数について考えてみましょう(同じアイデアを適用して、選択ソートの引数を導出しようとする場合があります)。
挿入ソートアルゴリズムが、敵と呼ばれる対戦相手と対戦する場合を考えます。敵対者の目的は、アルゴリズムによる比較の数を最大化するアルゴリズムの入力Xを提供することです。これは通常、意思決定ツリーのコンテキストで分析されます。決定木は、アルゴリズムが実行できるすべての比較可能なシーケンスを示します。決定木の各内部ノードは、単一の比較を表します。ノードの2つの子は、比較の2つの結果(yes / noまたはtrue / false)を表します。各リーフは可能な出力を表します。ソートアルゴリズムの場合、葉は順列ですキーの。アルゴリズムはルートから始まり、葉までのパスをたどります。各内部ノードでは、実行された比較の答えにより、次にアクセスする必要があるノードがアルゴリズムに通知されます。アルゴリズムが葉に到達すると、対応する順列を出力します。与えられた入力に対するアルゴリズム(決定木として見られる)の実行時間は、ルートから出力リーフまでのパスで行われた比較の数です。さて、敵対者は、挿入ソートを含む比較ベースのソートアルゴリズムに対して機能する単純な戦略を持っています。アルゴリズムが比較を行うときはいつでも、敵対者は可能な限り少ない順列を排除する答えを選択します。
一般的に、 要素があります 可能な順列、ソートの決定木には少なくとも 葉、そしてそれで深さがなければなりません (スターリングの近似による)。挿入ソートの場合、攻撃者は特定の入力を作成して、対応する決定木に少なくとも次の深さを持たせることができます。。
アルゴリズムは配列を使用します 入力要素を格納し、次の不変式に基づいています。
forループの各反復の開始時に、サブ配列 元々の要素で構成されています 、しかしソートされた順序で。
各反復で、 したがって、すでにソートされた順序であり、アルゴリズムは の値を比較することにより、それを最終的な適切な場所に挿入します の要素の値に対して 、 から始まる そしてに戻る などまで 比較ではもはや最大のものではありません。の要素 (ソート順に関して)不明な状態にあり、後の反復で処理されます。
これが敵の戦略です。アルゴリズムが挿入によって機能することを知っている 要素を移動することにより、適切な場所に の場合、明らかな戦略は、 -番目の反復では、対応するために移動する必要がある要素の数 。これは、逆にソートされた順序になるように入力を注意深く選択することで簡単に実現できます。実際、この場合、各反復で移動する必要がある要素の数は。これは 最悪の場合の実行時間(対応する算術級数によって決定)。