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

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

作者は長い間ブログを更新していませんでした。その理由の一つは、開発したプロジェクトで使用されている技術がすべて古い技術であり、私が接触した知識はすべて業界のロジックプロセスであるため、自分で要約しただけで共有しなかったことです。もう 1 つの理由は、現在 C++ 言語と基本的なコンピューター知識 (アルゴリズムなど) を再学習しているところです。

次のコードは C++ コードです。早速本題に入りましょう。

バイナリ検索はバイナリ検索とも呼ばれます。

使用条件:注文済みセット。

アルゴリズムの考え方:最初に検索対象のレコードが配置されている範囲 (間隔) を決定し、その後、レコードが見つかるか見つからないかになるまで徐々に範囲を狭めていきます。

ポイントは、中間の位置に記録されたキーワードを指定された値と比較することです。指定された値より大きい場合(ここでは、セットが小さいものから大きいものに配置されていると仮定します)、間隔の範囲を狭め(セットの開始->中間の前のポジション)、間隔の中間の位置に記録されたキーワードを指定された値と比較し、位置が見つかるか見つからないかになるまでサイクルを繰り返します。

プログラミング例:整数データ int a[10]={1,5,10,13,17,23,65,77,81,93};

1) これは再帰です(ここでの判断条件の誤りを指摘してくれた仲間のユーザー zdd に感謝します。これは if(min>max) に変更する必要があります)

  1. //二分探索 
  2. //配列は特定の順序でなければなりません 
  3. //パラメータ: ***、最小値、ターゲット (パラメータの型は整数)  
  4. intバイナリサーチ( int最小値、 int最大値、 int数値)
  5. {
  6.      min==maxの場合は-1 を返します
  7.      int中間 = (最小 + 最大) / 2;
  8.      if (a[mid]==num)midを返します
  9.     それ以外 もし(a[mid]
  10. {
  11.         BinarySearch(mid+1,max,num) を返します
  12. }
  13.     それ以外 
  14. {
  15.         BinarySearch(min,mid-1,num) を返します
  16. }
  17. }

2) 非再帰的

  1. //非再帰アルゴリズム 
  2. int BinarySearch_F( int数値)
  3. {
  4.     整数最小値=0;
  5.     整数最大値=9;
  6.     整数中間;
  7.      (最小<=最大)
  8. {
  9. 中間=(最小+最大)/2;
  10.          if (a[mid]==num)midを返します
  11.         それ以外  ( a[mid]>num)max=mid-1の場合;
  12.         それ以外の場合はmin=mid+1;
  13. }
  14.      -1 を返します
  15. }

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


挿入ソート

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

アルゴリズムのアイデア:ソートされた順序付きシーケンスにレコードを挿入して、レコード数が 1 増加した新しい順序付きシーケンスを取得します。挿入するレコードは、すでにソートされたシーケンスと順番に比較されます。シーケンス番号が挿入するレコードより大きい場合は、挿入するレコードより小さいシーケンスが見つかるまでシーケンスを 1 つ戻します。このとき、シーケンスの次の位置に挿入され、すべての位置が埋まるまで上記の操作が繰り返されます。

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

  1. // ソートを挿入 
  2. //ここでtempはセンチネルの位置です 
  3. //幼少期から成人期まで 
  4. void挿入ソート()
  5. {
  6.     整数温度;
  7.     整数j;
  8.      ( int i=1;i<10;i++ )の場合
  9. {
  10. temp = b[i];
  11.          (j=i-1;j>=0;j--)の場合
  12. {
  13.              (b[j]>temp)の場合
  14. {
  15. b[j+1] = b[j];
  16. }
  17.             それ以外 
  18. {
  19.                 壊す;
  20. }
  21. }
  22. b[j+1] = 一時;
  23. }
  24. cout<< "ソートは次のようになります:" ;
  25.      ( int i=0;i<10;i++ )の場合
  26. {
  27. カウント< " " ;
  28. }
  29. カウント<
  30. }

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


バイナリ挿入ソート

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

アルゴリズムの考え方:基本的な考え方は、単純な挿入ソートと似ています。唯一の違いは、挿入位置を見つけることです。単純な挿入ソートでは、順次比較を使用します。ここではバイナリ挿入ソートが改良され、順次検索がバイナリ検索に改良されています。

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

  1. voidバイナリ挿入ソート()
  2. {
  3.      int温度、最低、最高、中間;
  4.     整数j;
  5.      ( int i=1;i<10;i++)の場合
  6. {
  7. 最小=0;最大=i-1;
  8. temp = b [i];
  9.         (最小<=最大)
  10. {
  11. 中間=(最小+最大)/2;
  12.             (b[mid]>temp)の場合
  13. {
  14. 最大値=中間-1;
  15. }
  16.            それ以外 
  17. {
  18. 最小=中間+1;
  19. }
  20. }
  21.          (j=i-1;j>=max+1;j--)の場合
  22. {
  23. b[j+1] = b[j];
  24. }
  25. b[max+1] = 温度;
  26. }
  27. cout<< "ソートは次のようになります:" ;
  28.      ( int i=0;i<10;i++ )の場合
  29. {
  30. カウント< " " ;
  31. }
  32. カウント<
  33. }

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

ここでの時間計算量は単純な挿入ソートと同じですが、挿入位置を見つけるために使用される比較の数は大幅に削減されます。

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

【編集者のおすすめ】

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

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

>>:  現在世界で最も重要な古典的アルゴリズムトップ10

ブログ    
ブログ    

推薦する

おそらく2030年までに、量子コンピューティングのChatGPTの瞬間が到来するだろう

2030 年までに RSA 暗号を解読できるマシンが登場するでしょうが、まずは量子センシングやその他...

ニューヨーク・タイムズは、自社のニュース記事をAIモデルの訓練に利用することを禁止し、OpenAIを訴えることを検討している。

NPRによると、OpenAIは、自社の人工知能(AI)モデルのトレーニングにニューヨーク・タイムズ...

ディープフェイクは今回、顔を変えるだけでなく、街そのものを変えてしまった。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

アンドリュー・ン氏のチームが2019年のAIトレンドを振り返る:自動運転は寒い冬を迎え、ディープフェイクはモンスターとなった

あと数日で2019年も終わりです。今年は AI が夢から現実へと移り変わる年です。NLP から自動運...

エネルギー効率を向上させるために、脳は予測知覚能力を発達させた。

[[436377]]この記事はLeiphone.comから転載したものです。転載する場合は、Lei...

無料ですか?寄生? ChatGPTに夢中です!

51CTOウェブサイトコンテンツ調査に参加するにはクリックしてくださいマット・アセイ編纂者:Qia...

...

...

パスワードを忘れたことが引き起こすアルゴリズム思考

2日前、ウェブサイトにログインしようとしていたとき、よく使うパスワードを何回か試して失敗した後、「パ...

小さくても素晴らしい、ミニプログラムのデビュー

[51CTO.comより引用] 2017年1月9日にWeChatミニプログラムが正式リリースされて以...

Midjourneyに匹敵します!なぜミャオヤカメラは突然人気が出たのでしょうか?

編纂者:ユン・ジャオ、ワン・ルイピン、ノア「家族の写真がついに出てきました…」最近、ミャオヤカメラの...

パロアルトネットワークス:AIを使ってAIと戦うことは、ネットワークセキュリティ技術の発展における避けられないトレンドです

「 AI攻撃を阻止するために人力を使うことはできません。AIと戦うにはAIを使わなければなりません。...

Google の新しい AI が話題に!世界で最も長い単語を描くことができる

友達、この英語の単語が何だか知っていますか?超微細珪火山性肺炎。これは45文字からなる世界最長の単語...

HKUST & MSRA リサーチ: 画像から画像への変換に必要なのは微調整だけ

多くのコンテンツ作成プロジェクトでは、単純なスケッチをリアルな絵に変換する必要があります。これには、...

...