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

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

[[395207]]

必要

順序付けられた配列 {1,8,10,89,1000,1234} に対してバイナリ検索を実行し、数値を入力して配列内に存在するかどうかを確認し、添え字を見つけます。存在しない場合は、「そのようなデータはありません」というメッセージが表示されます。

思考分析

  1. まず、配列の中央の添え字 mid=(left+right)/2 を決定します。
  2. 次に、検索する数値 findValue を arr[mid] と比較します。findValue > arr[mid] の場合、検索する数値は arr[mid] の右側にあるため、右に再帰します。findValue < arr[mid] の場合、検索する数値は arr[mid] の左側にあるため、左に再帰します。findValue == arr[mid] の場合、数値が見つかったため、戻ります。
  3. 再帰を終了する条件が見つかったときに再帰は終了します。配列全体を再帰してもfindValueが見つからない場合は、再帰を終了する必要があります。つまり、left > rightのときです。

コード例

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

【編集者のおすすめ】

  1. 驚いたことに、1 つの SQL で Oracle が爆発しました...
  2. Pythonを使ってWeChatのダイナミック絵文字を作る
  3. 初心者にも最適な、仕事の効率を上げる7つのツール
  4. Microsoft Edge 90正式版リリース: 新しいダウンロード管理メニュー、より鮮明なフォントレンダリング
  5. Alibaba Cloud Disk PC版プレビュー:速度制限はないが残念

<<:  RSA アルゴリズムが解読された場合、暗号化の将来はどうなるでしょうか?

>>:  2021年4月のドローン業界の重要な動向の概要

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

推薦する

YouTube 動画推奨アルゴリズムを破る方法

[[176814]]映画、ドラマ、テレビ番組、オンライン ビデオなどの配信チャネルのコンテンツ ワー...

人工知能が道路の穴を素早く修復するのを助ける

再び道路の穴の季節がやってきました。アメリカ全土の道路が乗用車やトラックに復讐する、冬から春にかけて...

Googleが謝罪:Vision AIが人種差別的な結果を生成

新型コロナウイルスと闘っている多くの国々は、駅や空港で国民に体温検査を受けるよう命じている。この状況...

機械知能に取って代わられない5つのスキル

「機械知能が人間のために行っている 5 つのこと」という記事では、機械が常に新しい奇跡を生み出してい...

...

オープンソースのラマ2の背後には、若い中国人たちの力がある

最近、Llama 2 のオープン ソース化により、Yann LeCun 氏や業界関係者の多くが「ビッ...

MITが「計算能力」に関する警告を発令:ディープラーニングは計算能力の限界に近づいている

ディープラーニングの人気は、基本的に人々の計算能力の追求によるものです。最近、MIT は警告を発しま...

AIが初めて新型コロナウイルスの警告を発するのか?人工知能はあなたが思っている以上に信頼できるものです!

2019年12月30日に武漢で新型肺炎が発生してから1か月以上が経ちました。マスクの値上げや品切れ...

...

テンセントクラウドが高性能アプリケーションサービスHAIを開始、すべての開発者が独自のAIアプリケーションを開発可能に

AIGC アプリケーション開発のハードルを下げることによってのみ、次の AIGC 驚異的アプリケーシ...

ロボットとAIがサプライチェーンを自動化する方法

自動化技術は現在あらゆる業界に浸透しつつあり、これはサプライチェーンにおいて特に顕著です。実際、自動...

最短経路問題の探究: ダイクストラのアルゴリズム

[[386543]]前回、データ構造としてのグラフについて書きましたが、グラフ アルゴリズムのテスト...

ケーススタディ | 埋め込みに基づく特徴セキュアな計算

[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...

自然言語処理シーケンスモデル - CRF 条件付きランダムフィールド

シーケンスモデルにおけるHMM(隠れマルコフモデル)を習得した後は、別のシーケンスモデルであるCRF...