エントリーレベルのデータベースアルゴリズム [パート 2]

エントリーレベルのデータベースアルゴリズム [パート 2]

前回の記事「エントリーレベルのデータベースのアルゴリズム [I]」では、いくつかのデータ アルゴリズムを紹介しました。ここでは、引き続きいくつかの基本的なソート アルゴリズムを紹介します。

バブルソート

使用条件:コレクションの要素はサイズを比較できます

アルゴリズムのアイデア:ソートするレコードを継続的にスキャンします。スキャンするたびに、最小のレコードが見つかり、それが一番上に近づきます。各スキャンではレコードが最終的な最も正しい位置に配置されるため、次のスキャンではレコードを再確認する必要がありません。

プログラミング例: int b[10]={77,1,65,13,​​81,93,10,5,23,17} はバブルソートされます(ここで概念を混同していました。指摘してくれた zdd に感謝します)

  1. //バブルソート 
  2. voidバブル( int b[10])
  3. {
  4.     整数温度;
  5.     整数i;
  6.      (i=9;i>0;i--)の場合
  7. {
  8.          ( int j=0;jの場合
  9. {
  10.              (b[j]>b[j+1])の場合
  11. {
  12. temp = b[j];
  13. b[j] = b[j+1];
  14. b[j+1] = 一時;
  15. }
  16. }
  17. }
  18. cout<< "ソートは次のようになります:" ;
  19.      ( int i=0;i<10;i++ )の場合
  20. {
  21. カウント< " " ;
  22. }
  23. カウント<
  24. }

パフォーマンス分析:時間計算量 O(n^2)

シェルソート

使用条件:コレクションの要素はサイズを比較できます

アルゴリズムのアイデア:まず、ソートするレコードのシーケンス全体をいくつかのサブシーケンスに分割し、それぞれに対して直接挿入ソートを実行します。シーケンス全体のレコードが「基本的に順序付けられている」場合は、すべてのレコードに対して直接挿入ソートを実行します。サブシーケンスは単に「セグメントに分割」されるのではなく、特定の「増分」で区切られたレコードによってサブシーケンスが形成されます。そのため、比較して並べ替えるときに、キーワードが小さいレコードは段階的に前に進むのではなく、一定の増分で移動します。「増分」は減少傾向を示し、最終的にこの「増分」は常に 1 になります。このとき、シーケンスは基本的に順序付けられており、並べ替えを完了するために必要な比較と移動はわずかです。シェルソートの増分設定がわかりにくい。一般的に、8 つの数字の「増分」を 4、2、1 に設定することを検討します。 (これはシェルソートの一般的な設定です)。次に、「増分」h(n+1)=3*h(n)+1 を計算する式を作成します (h>N/9 で停止)。この式は増分には最適ではないかもしれませんが、一般的な「増分」設定には適用できます。数字が 8 個ある場合、ここでの増分は 1 です。

プログラミング例: int b[10]={77,1,65,13,​​81,93,10,5,23,17}はシェルをソートする

//ヒルソートの自動増分は自分で選択する必要があります

  1. void シェルソート( int b[10])
  2. {
  3.    整数h,i;
  4.    整数n=10;
  5. //このループを通して、1と4への増分を計算します
  6.     (h=1;h<=n/9;h=3*h+1)の場合
  7. //インクリメントループ
  8.     (;h>0;h/=3)の場合
  9. {
  10.        (i=h;iの場合
  11. {
  12.          整数j、 temp ;
  13.          温度=b[i];
  14. // ソートを挿入
  15.           (j=ih;j>=0;j=jh)の場合
  16. {
  17. b[j]> temp場合
  18. {
  19. b[j+h]=b[j];
  20. }
  21.             それ以外 
  22. {
  23. 壊す;
  24. }
  25. }
  26. b[j+h] =温度;
  27. }
  28. }
  29. cout<< "ソートは次のようになります:" ;
  30.     ( int i=0;i<10;i++ )の場合
  31. {
  32. カウント< " " ;
  33. }
  34. カウント<
  35. }

パフォーマンス分析:ヒルソートの時間計算量は少々複雑です。特定の「増分」に応じて変化します。ここでは、著者は Yan Weimin の「データ構造」から O(n^3/2) を使用しています。

クイックソート

使用条件:同等のサイズのコレクション。

アルゴリズムのアイデア:ソート パスを通じて、ソートするレコードは 2 つの独立した部分に分割されます。レコードの一方の部分のキーワードがもう一方の部分のキーワードよりも小さい場合、レコードの 2 つの部分を別々にソートして、最終的に順序付けられたシーケンスに到達できます。ここで重要なポイントは、セグメンテーションの「ベンチマーク」を選択することです。この「ベンチマーク」より大きい場合は 1 つの部分に分割し、この「ベンチマーク」より小さい場合は 1 つの部分に分割する必要があります。ここで、著者はデフォルトでこの部分の最初のレコードを「ベンチマーク」として使用します。

例: int b[10]={77,1,65,13,​​81,93,10,5,23,17}

  1. //クイックソート
  2. void クイックソート( int *b, int下限, int上限)
  3. {
  4. //スワップ関数
  5. void Sawp( int *a, int *b);
  6.     古い低= 低値;
  7.     古い高=高;
  8. 低い
  9. {
  10. while(*(b+high)>*(b+low)&&low --;  
  11. Sawp(b+low,b+high);
  12. while(*(b+low)<*(b+high)&&low
  13. Sawp(b+low,b+high);
  14. }
  15. if(古い低
  16. {
  17. クイックソート(b,Old_low,low-1);
  18. }
  19. if(高+1
  20. {
  21. クイックソート(b,high+1,Old_high);
  22. }
  23. }
  24. //スワップ関数
  25. void Sawp( int *a, int *b)
  26. {
  27.     整数 温度;
  28.     温度=*a;
  29. *a=*b;
  30. *b=一時;
  31. }

パフォーマンス分析:時間計算量 O(nlogn)

これまで、一般的な基本的なデータ検索およびソートアルゴリズムを紹介してきましたが、これらは最も基本的なアルゴリズムであり、そこから多くのアルゴリズムを拡張することができます。

オリジナルリンク: http://www.cnblogs.com/couhujia/archive/2011/03/24/1993373.html

【編集者のおすすめ】

  1. データマイニングにおける10の古典的なアルゴリズムの予備的調査
  2. 現在世界で最も重要な古典的アルゴリズムトップ10
  3. 面接中にアルゴリズムの質問を解く際にプログラマーが知っておくべきこと
  4. 初級データベースアルゴリズム [I]

<<:  エントリーレベルのデータベースアルゴリズム [パート 3]

>>:  初級データベースアルゴリズム [I]

ブログ    
ブログ    

推薦する

AI はその「創造物」に対して創造的権利を有するのでしょうか?人民日報:いいえ

AI技術の発展に伴い、AIの創作への参加も魅力的なハイライトとなっています。そこで疑問なのが、AI ...

頻繁にミスを犯す自動運転車は「ドメイン適応」が欠如している可能性がある

6月に開催されるCVPR 2019は、マシンビジョン分野で最も重要な学術会議です。選考結果が発表され...

機械学習ニューラルネットワークとPython実装

ニューラル ネットワークは、機械学習のあらゆる側面に及ぶ幅広い用途に使用されます。この記事では、主に...

顔認識技術の新たな進歩:自閉症やADHDを検出できる

[[187357]]顔の表情や頭の動きから自閉症やADHDの患者を識別できる新しいコンピューターアル...

スマートビルディングにおける技術の陳腐化にどう対処するか?

今日の建物、ましてや将来のスマート ビルにとって、技術インフラの重要性はいくら強調してもし過ぎること...

APIなしでは「AI」が成功できない理由

クラウド、携帯電話時代、メタバース、そして現在の人工知能などのテクノロジーのトレンドはすべて、表面下...

スタンフォード大学は4年連続でAIレポートを発表しています。今年はどんな内容が取り上げられたのでしょうか?

2021年スタンフォードAIインデックスレポートが正式にリリースされ、過去1年間のAIの全体的な発...

言語モデルの氷山の一角: 微調整は不要、AI21 Labs は凍結モデルの未開発の可能性を探る

現在、特定の NLP タスクのパフォーマンスを最適化するための最善のアプローチは、事前トレーニング済...

ChatGPT は最近、Microsoft によって内部的に無効化されました。 GPT の新しいバグ: たった 2 つのプロンプトでデータが盗まれる可能性があります

知らせ! GPT を作成するときにアップロードしたデータは、誰でも簡単にダウンロードできます...た...

...

人々を幸せにしたり不安にさせたり:注目すべき11の人工知能アプリケーション

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

RPA の利点と欠点は何ですか?

信用組合サービス組織の PSCU は、数年にわたって企業開発に注力しており、同社はロボットによるプロ...

OpenAIはニューヨークタイムズの声明は一方的であると不公平だと叫び、アンドリュー・ン氏もそれを擁護した。

2023年末、ニューヨーク・タイムズはマイクロソフトとOpenAIを訴えるための強力な証拠を提示し...

シンプルなアルゴリズムで分散システムのパフォーマンスが瞬時に10倍以上向上

1. 概要この記事では、多数のクライアントが同時にデータを書き込む場合に、分散ファイルシステム HD...

人工知能エンジニアリングについて知らないかもしれない7つのこと

[[387622]]ビジネスの世界が人々の想像よりも速く変化することは周知の事実です。この問題に対処...