アルゴリズム入門 - 基本 - 基本的なアルゴリズム

本の最初の例として、「アルゴリズムの紹介、」書籍、挿入ソートではアルゴリズムが表示されます。

 

挿入ソート:

少数の要素を注文するためには、効率的なアルゴリズムです。

挿入ソートは、多くの人が片手を注文し、トランプのように動作します。最初は、私たちの手の中のカードは、私たちはデッキからカードを出て、正しい位置に山積みたびに空にします。カードの正しい場所を見つけるには、我々はすでに、すべてのカードの手に右に左にそれを比較します。

プロセスの名前は擬似コード  挿入ソートは以下のように、Aパラメーター配列です。

挿入SORT(A):

  A.lengthへJ = 2

    キー= A [J] //挿入A [j]が第二の配列A [1..j - 1]に。 

    私は= J - 1 // A [i]が、A [j]は

    I> 0とA [i]が>キーしばらく

      [I + 1] = A [i]が

      私は、私を= - 1

    A [I + 1] =キー

擬似コードの説明: - サブ添字jは、forループの各反復の始めに挿入されたカードの手に指摘され、配列AのA [j]は二つの部分、部分A [1 1..j]に分割されています現在のソートされた配列手を構成し、残りのサブ配列a [+ 1..nのJ]は、デッキに対応するテーブルにまだあります。

私はのこぎり作業の挿入ソートした後、また擬似コードについて書きました。デッキシミュレーション方法が、特定の実装工程では、私は、元の本は縮小、行に一つだけのアレイになるまで擬似コードを読んで、空のベクトル表現の手は手ぶらのカードを持つ配列で自分のデッキを表明ほぼ半数のメモリフットプリント。これは、この擬似コードのハイライトと考えることができます。実際には、この最適化された空間的な複雑さは珍しいことではありません、それについて考える、非常に典型的な例は、実装の1次元、2次元配列のナップザック問題です。動的プログラミングナップザック問題を行う場合、我々は唯一の行列の最後の行を必要とするので、連続的に状態遷移行列を更新することによって、その状態を記録するために行列を使用し、各値行列の行にのみ行列の行の更新が決定され、従って、二次元アレイは、2つの配列が絶えず交換更新することができ、最適化することができます。一次元アレイの更新の配列の値は、後方から前方に毎回我々の更新時にバックパックを示す状態遷移方程式01は、前面が特定の値で与えられるので、01ナップザック問題のために、より近いステップ次元アレイを(使用することができアレイは動的に)マトリックス全体に更新することができます。

だから、将来的には、配列のいくつかの操作の実装はあなたが不要なメモリ消費量を削減するために、独自のステータスの更新自体の配列を使用できるかどうかを考えることができる前に。

 

:本は非常に重要な概念導入した後、ループ不変を

アルゴリズムの正しさを証明するために、メインループ不変。ループ不変式については、我々は3つのプロパティを証明する必要があります。

初期化:ループの最初の反復の前に、それは本当です。

ホールド:それは本当である前に、反復ループが、それは次の反復の前に真のままの場合。(すなわち、ループ不変のこの反復が成り立ちます)

終端:ループ終了は、不変が助けに私たちのために有用な性質を提供する場合、アルゴリズムの正しさの性質を証明します。

ストリップの設立の性質を証明する数学的帰納法と同様に、基本的な必要性はケースと誘導ステップを証明します。

挿入ソートのために、

初期化:ループの最初の反復の前、その後、J = 2、サブアレイA [1..j - 1]単一の要素A [1]の組成物、ソート、ループ不変条件が真です。

ホールド:非正式サイクル本体意志文Aの7行4について、反復の観点から、(厳密な数学記号で表さないものと理解説明を参照)[J - 1]、A [J - 2] 、[J - 3]、あなたが適切な位置にA [j]を見つけるまで、右の位置に移動し、同様に、ライン8文は[J]の値は、位置に挿入されます。この場合、サブ配列要素A [1..j】組成物は、ソートされた、反復ループ不変条件が成立します。

終了:forループの終了につながる条件は> A.length Jです。Jは、各繰り返し、jについて1だけインクリメントさ= N + 1でなければならない場合、ループの終わり。あるいは+ 1 J Nを使用して、ループ不変式で、我々は、A [1..nの】サブアレイ要素が既にソート、サブアレイA [1..nの]は、配列全体でありますしたがって、我々は、アレイ全体がソートされていることを結論付けています。したがって、このアルゴリズムは正しいです。

 

おすすめ

転載: www.cnblogs.com/Black-treex/p/12439883.html