データ構造とアルゴリズムソート - 理解できないなら、私に相談してください

データ構造とアルゴリズムソート - 理解できないなら、私に相談してください

[[194165]]

以下では、主にデータ構造の教科書で紹介されている「10 種類のソートアルゴリズム」について説明します。試験が近づいてきたので、ソートアルゴリズムを復習します。言葉よりも写真のほうが雄弁です。理解できないなら、私を殺してください。

ヒープ ソート、クイック ソート、シェル ソート、直接選択ソートは安定したソート アルゴリズムではありませんが、基数ソート、バブル ソート、直接挿入ソート、バイナリ挿入ソート、リンク リスト挿入ソート、マージ ソートは安定したソート アルゴリズムです。

直接挿入ソート T(n) = O(n^2)

直接挿入ソートの基本的な考え方は、すべてのレコードが挿入されるまで、ソートするレコードをそのキーワードのサイズに応じて、以前にソートされたサブシーケンスの適切な位置に毎回挿入することです。

配列をa[0…n-1]とします。

  1. 最初は、a[0]はそれ自体で順序付けられた領域を形成し、順序付けられていない領域はa[1..n-1]です。 i=1とします。
  2. a[i]を現在の順序付けられた範囲a[0…i-1]にマージして、順序付けられた間隔a[0…i]を形成します。
  3. i++ となり、i==n-1 になるまで 2 番目の手順を繰り返します。並べ替えが完了しました。

バイナリ挿入ソート T(n) = O(n^2)

バイナリ挿入ソートは、直接挿入ソートの単純な改良版です。バイナリ挿入ソートでは、i 番目の要素を挿入する必要がある場合、各要素を 1 つずつ比較するのではなく、次の処理を行います。

  1. インデックス 0~i-1 の中間点を計算します。つまり、インデックス i の要素とインデックス (0+i-1)/2 の要素を比較します。インデックス i の要素の値が大きい場合は、(0+i-1)/2~i-1 の半分の範囲で直接検索します。それ以外の場合は、0~(0+i-1)/2 の半分の範囲で検索します。これを半値と呼びます。
  2. 半分の範囲で検索する場合は、方法1に従って半分の検索を続けて、検索範囲を1/2、1/4、1/8...に絞り込み、挿入位置を素早く決定できるようにします。

リンクリスト挿入ソート T(n) = O(n^2)

リンク リスト挿入ソートの基本的な考え方は、最初の n-1 個のノードが順番に並んでいると仮定し、最初のノードを取り、適切な位置に到達するまでリンク リストに沿って検索および比較し、「このノード」と「挿入するノード」のポインターを変更することです。

  1. リンク リストをヘッド ノードに沿ってトラバースし、このノード、挿入するノード、および後続ノードのサイズ関係を、このノード < 挿入するノード < 後続ノードになるまで比較します。
  2. 「このノード」が「挿入されるノード」を指し、「挿入されるノード」が「後続ノード」を指すようにします。

シェルソートT(n) = O(n^1.5)

シェルソートの本質はグループ挿入ソートであり、縮小増分ソートとも呼ばれます。この方法の基本的な考え方は次のとおりです。

  1. まず、ソートする要素のシーケンス全体をいくつかのサブシーケンス(特定の「増分」で区切られた要素で構成)に分割し、それぞれに対して直接挿入ソートを実行します。
  2. 次に、増分を 1 つずつ減らして、再度ソートします。シーケンス全体の要素が基本的に順序付けられたら (増分が 1 と十分に小さい場合)、すべての要素に対して直接挿入ソートを実行します。

バブルソートT(n) = O(n^2)

バブルソートの基本的な考え方は、隣接する要素をペアで比較し、順序が逆の場合はそれらを交換することです。このようにして、最小または最大の要素が各移動で一番上に「浮かび」、最終的に完全な順序が達成されます。

クイックソート範囲T(n) = O(n*lg n) ~ O(n^2) | 平均 T(n) = O(n*lg n)

クイックソートは分割統治(再帰)方式を使用します。その基本的な考え方は次のとおりです。

まず、シーケンスから基数として数字を取ります。

分割プロセスでは、この数値より大きいすべての数値は右側に配置され、この数値以下のすべての数値は左側に配置されます。

各間隔に数字が 1 つだけになるまで、左と右の間隔に対して 2 番目の手順を繰り返します。

直接選択ソートT(n) = O(n^2)

ストレート セレクト ソートもシンプルなソート方法です。基本的な考え方は次のとおりです。

  1. R[0]~R[n-1]から最小値を選択し、R[0]と交換する
  2. R{1}~R[n-1]から最小値を選択し、R[1]と交換する
  3. i回目はR[i-1]~R[n-1]の中から最小値を選択し、R[i-1]と交換する。

ヒープ選択ソートT(n) = O(n*log2n)

ヒープソートとは、ヒープツリー(ヒープ)のデータ構造を使用して設計されたソートアルゴリズムを指します。選択ソートの一種です。杭は大根杭と小根杭に分けられます。次の図は小根杭です。

「図のように同じ手順で行ってください」

マージソートT(n) = O(n*log2n)

マージソートは、分割統治の考え方を採用したマージ操作に基づく効果的なソートアルゴリズムです。双方向のマージを以下に示します。

基数ソート

基数ソートは「分散ソート」の一種であり、「バケットソート」に多少似ています。

  1. 10個のバケツを割り当て、バケツに0から9までの番号を付け、1桁の数字をバケツ番号としてバケツを並べ、バケツの中の数字を順番に取り出す。
  2. もう一度バケットを入力しますが、今回は10桁の数字を基準にして、対応するバケットを入力します。同じバケットが順番に入力されます
  3. もう一度取り出して仕分け完了

<<:  Hive でサポートされているファイル形式と圧縮アルゴリズム

>>:  2017 年の Quora における機械学習の 5 つの主要な応用シナリオ

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

マイクロソフトとスタンフォード大学の新アルゴリズムがAIによる人類絶滅のリスクを排除! GPT-4の自己反復、プロセスは制御可能かつ説明可能

「再帰的に自己進化する AI が人間を支配する」という問題に対する解決策はあるのでしょうか? !多く...

人工知能は人間が理解できない量子実験を設計する

[[412058]]北京時間7月19日、量子物理学者のマリオ・クライン氏は、2016年初頭にウィーン...

OpenAIがChatGPT Enterprise Editionをリリース: GPT-4の無制限使用、より高いセキュリティとプライバシー保護

8月29日、OpenAIは、企業ユーザーのニーズを満たし、より高いセキュリティとプライバシー保護を提...

LoRAShear: LLM プルーニングと知識回復に関する Microsoft の最新研究

LoRAShear は、言語モデリング (LLM) を最適化し、知識を保存するために Microso...

AI技術の現状を理解するのに役立つ45の数字

2019年7月現在、AIの現状はどうなっているのでしょうか。最新の調査、研究、予測に基づき、AI技術...

PyTorch を学ぶには?簡単すぎる

多くの友人から、PyTorch の学習方法を尋ねられました。長期間の練習を経て、初心者が知っておく必...

Cloudera のチーフアーキテクト Doug Cutting が Hadoop と人工知能について語る

[51CTO.com オリジナル記事] Doug Cutting 氏はオープンソース コミュニティに...

...

人工知能は製品のサービスとサポートの方法を変える

私は、IoT を活用して現場サービスと顧客サポートの効率性を向上させることを目指す機器メーカーのクラ...

復活したジャンルのトップ10を数えると、必ず気に入るジャンルが見つかる

統計モデルやその他のアルゴリズムに加えて、回帰は機械学習を正常に動作させるための重要な要素です。回帰...

Baiduカスタマイズ画像オープンプラットフォームのトレーニングと評価

背景Baiduは昨年11月にカスタマイズされた画像トレーニングサービスを開始しました(https:/...

インテリジェント製造自動化、中国電子山地がインテリジェント製造の新しいモデルを実践

中国電子サンディとオートデスクは2017年に関係を築き始めました。中国電子三迪の創業者である于楊氏は...

AIの恋人の唆しでエリザベス女王暗殺未遂の罪で懲役9年の判決を受けた男

10月9日、イギリスBBCの報道によると、2021年のクリスマスの日にクロスボウで武装した男がイギリ...

言語学からディープラーニングNLPまで、自然言語処理の概要

この記事は、2 つの論文から始まり、自然言語処理の基本的な分類と基本概念を簡単に紹介し、次にディープ...