Java プログラミング スキル - データ構造とアルゴリズム「非再帰的バイナリ検索」

Java プログラミング スキル - データ構造とアルゴリズム「非再帰的バイナリ検索」

[[396063]]

基本的な紹介

1. バイナリ検索は、順序付けられたシリーズ(数字や文字など)の検索にのみ適用できます。検索する前にシリーズを並べ替えてください。

2. バイナリ検索法の実行時間は対数時間 O(log2n) です。つまり、必要なターゲット位置を見つけるのに最大で log2n ステップしかかかりません。ターゲット番号 30 がキュー [0,99] から見つかったと仮定すると、必要な検索ステップ数は log2(100) です。つまり、最大で 7 回かかります (2^6<100<2^7)。

コード例

  1. パッケージ com.xie.algorithm;
  2.  
  3. パブリッククラス BinarySearchNoRecur {
  4. 公共 静的void main(String[] args) {
  5. int [] arr = {1, 3, 8, 10, 11, 67, 100};
  6. 整数 インデックス= binarySearch(arr, 1);
  7. システム.out.println ( "index = " + index );
  8. }
  9.  
  10. /**
  11. * 二分探索の非再帰実装
  12. *
  13. * @param arr 検索する配列。arrは昇順です
  14. * @param target 検索する番号
  15. * @returnは対応するインデックスを返します。-1は見つからないことを意味します。
  16. */
  17. 公共 静的  intバイナリサーチ( int [] arr, intターゲット) {
  18. 整数 = 0;
  19. 整数 = arr.length - 1;
  20. <=){
  21. int中央 = (+) / 2;
  22. (arr[mid] == ターゲット)の場合{
  23. ミッドに戻ります
  24. }そうでなければ(arr[mid] > target) {
  25. //左に検索する必要がある
  26. = 中央 - 1;
  27.  
  28. }それ以外{
  29. // 右方向に検索する必要があります。
  30. = 中央 + 1;
  31. }
  32. }
  33. -1 を返します
  34. }
  35. }

基本的な紹介

1. 補間検索アルゴリズムはバイナリ検索に似ていますが、補間検索が毎回適応中間点から開始される点が異なります。

2. バイナリ検索で中間インデックスを見つけるための式は、補間検索中間インデックス式に変換されます。ここで、low は左側のインデックスを表し、high は右側のインデックスを表し、key は検索する値を表します。

コード例

  1. パッケージ com.xie.search;
  2.  
  3. java.util.ArrayList をインポートします。
  4. java.util.List をインポートします。
  5.  
  6. パブリッククラス InsertValueSearch {
  7. 静的 整数 カウント= 0;
  8.  
  9. 公共 静的void main(String[] args) {
  10. int [] arr = 新しいint [102];
  11. ar[0] = 1;
  12. ar[1] = 1;
  13. ( int i = 2; i < 102; i++) {
  14. arr[i] = i;
  15. }
  16. リスト<整数> indexList = insertValueSearch(arr, 0, arr.length - 1, 1);
  17. システム.out.println ( "indexList = " + indexList);
  18. System.out.println ( "検索数:" + count );
  19.  
  20. /*
  21. インデックスリスト = [1, 0]
  22. 検索数: 1
  23. */
  24. }
  25.  
  26. /**
  27. * 補間検索、インデックスコレクションを返す
  28. *
  29. * @param arr 配列
  30. * @param left左インデックス
  31. * @param right右インデックス
  32. * @param findValue 検索する値
  33. * @return見つかった場合はすべてのインデックスのコレクションを返し、見つからない場合は空を返します
  34. */
  35. 公共 静的リスト<整数> insertValueSearch( int [] arr, int   int   int findValue) {
  36. カウント++;
  37. リスト<整数> indexList = 新しい ArrayList<整数>();
  38. //注意: findValue < arr[0] || findValue > arr[arr.length - 1] が必要です。そうでない場合、mid が範囲外になる可能性があります。
  39. if (>|| findValue < arr[0] || findValue > arr[arr.length - 1]) {
  40. 新しいArrayList<Integer> ( )を返します
  41. }
  42. int mid = left + ( right - left ) * (findValue - arr[ left ]) / (arr[ right ] - arr[ left ]);
  43. int midValue = arr[mid];
  44.  
  45. (findValue > midValue)の場合{
  46. insertValueSearch(arr, mid + 1, right , findValue)を返します
  47. }そうでない場合 (findValue < midValue) {
  48. insertValueSearch(arr, left , mid - 1, findValue)を返します
  49. }それ以外{
  50. //見つかった場合は左にスキャンし、条件を満たすものをindexListに追加します
  51. 整数 温度= 中間 - 1;
  52. )の間{
  53. if ( temp < 0 || arr[ temp ] != findValue) {
  54. 壊す;
  55. }
  56. indexList.add ( temp ) ;
  57. 温度--;  
  58. }
  59.  
  60. // 再び右にスキャンし、条件を満たすものをindexListに追加します
  61. 温度= 中間 + 1;
  62. )の間{
  63. if ( temp > right || arr[ temp ] != findValue) {
  64. 壊す;
  65. }
  66. indexList.add ( temp ) ;
  67. 一時++;
  68. }
  69. インデックスリストを追加します(mid);
  70. indexListを返します
  71. }
  72. }
  73. }

予防

  1. データ量が多く、キーワードの分布が比較的均一なルックアップ テーブルの場合、補間検索の方が高速になります。
  2. キーワードの分布が不均一な場合、この方法は必ずしもバイナリ検索法よりも優れているとは限りません。

<<:  機械学習モデルの品質を保証し、その有効性を評価する方法

>>:  AIを活用して食材を分析し、より適切な栄養バランスを実現しましょう!

ブログ    
ブログ    
ブログ    

推薦する

インターネットの前半は終わり、未来は人工知能の時代へ

少し前、ロシアのプーチン大統領は「人工知能 - 21世紀の主要技術」イベントに出席した際、人工知能ロ...

ターゲット検出にはこの記事で十分です! 2019年版オブジェクト検出の総合ガイド

[[272485]]ビッグデータダイジェスト制作編纂者:張瑞怡、寧静コンピュータ ビジョンは、デジタ...

百度言語知識技術サミットが開催され、王海鋒氏がNLP技術の進化の道筋を明らかにした

AIはより深いレベルへと進化しており、言語や知識技術の重要性がますます高まっています。 8月25日、...

...

また鉄の飯碗が割れた!今後、これらの仕事は人工知能に置き換えられるかもしれません!

この時代に本物の鉄丼なんて存在しない!最近、広東省の高速道路で非接触型決済が導入されたというニュース...

新時代の人工知能の優位性を獲得し、時代に淘汰されないためにはどうすればよいか

企業で人工知能が応用され、開発されるにつれて、ビジネスリーダーは市場競争力を向上させるためにクラウド...

ディープラーニングの限界と将来

[[227297]]注: この記事は、Keras の作者である François Chollet に...

異常検出のためのいくつかのグラフ分割アルゴリズム

セキュリティ分野では、アカウント取引の異常や異なるイベント間の相関関係など、さまざまなシナリオで「グ...

...

海外メディア:人間はますます余暇を持ち、AIは資本主義を排除する

ベストセラー作家のバーナード・マー氏はフォーブス誌に「人工知能はいかにして資本主義を殺すか」と題する...

ロボット工学が建設業界の新時代を告げる

建設業界は現在、デジタル革新が業界の方向性をますます推進する中で、大きな変革期を迎えています。ロボッ...

海外メディア:人工知能はすでに自身のミスを警告できる

[[354534]]海外メディアは、人工知能は急速に発展しており、この分野における最新の技術的成果が...

...

人工知能が巨大な応用価値を生み出す

飛行機搭乗時の「顔スキャン」から無人スーパーマーケットまで、多機能巡回ロボットからスマート医療まで....

無人運転は地方で大きな発展の可能性を秘めている

農業人口の高齢化と低所得化により、牛による耕作、手作業による移植、手作業による収穫といった伝統的な農...