二分探索Javascript

| | | | | | |

JavaScriptでバイナリ検索をコーディングする方法

検索アルゴリズムは、プログラマーの生活を大幅に向上させます。これにより、数十、数百、または数千のアイテムのデータセット内で特定のアイテムを簡単に見つけることができます。

最も一般的な検索形式の1つは、バイナリ検索です。この検索により、配列内の要素がすばやく見つかります。検索でアイテムを調べるたびに、検索するアイテムの数が半分になります。

このガイドでは、バイナリ検索とは何か、およびそれらがどのように機能するかについて説明します。次に、反復と再帰の2つの異なるアプローチを使用した二分探索の実装に移ります。

"JavaScript !

二分探索とは?

二分探索は、順序付けられた配列内の要素を検索するコンピューターアルゴリズムです。

配列の中央から開始し、中央の要素が探している数値よりも小さいか、等しいか、大きいかを確認します。

数値が小さい場合は、アルゴリズム配列の左半分を調べ続ける方法を知っています。ここで、小さい数字は;です。数値が大きい場合、アルゴリズムは配列の右半分に焦点を合わせます。バイナリ検索は順序付きリストでのみ機能します。

バイナリ検索は、線形検索よりも効率的です。実際、検索が実行されるたびに、リストに残っているアイテムの数が半分に減ります。

二分探索の使用方法

二分探索は、一度習得すれば簡単に理解できます。

二分探索アルゴリズムを実装する前に、復習しましょう。一歩踏み出しましょう。リストに「9」という数字があります。順序付きリストから始めましょう:

2 6 < / td> 8 9 10

まず、中間の数値を見つけて変数に割り当てる必要があります。これは、最初と最後の数値の合計を計算し、2で割ることによって求められます。これを「中央」変数と呼びます。

開始

終了
2 6 8 9 10

8は平均数です。したがって、中央の番号を探している番号と比較できます。中央の番号が探しているものと同じである場合、検索が停止する可能性があります。

この例では、8は9と等しくありません。検索は続行されます。

したがって、中央の数字が9より大きいかどうかを比較する必要があります。そうではありません。

これは、探している数字が中央の数字の後にある必要があることを示しています。番号。9は順序付きリストで8より大きいです。開始番号を中央の番号と等しくなるように設定します。これは、探している番号が中央の番号の前にないことがわかっているためです。

探している数字がもっと赤ちゃんの場合は、最終的な数字を真ん中の数字と等しくなるように設定します。数字は真ん中の数字よりも小さいので、リストの下半分に検索を集中できます。

9が8より大きいため、リストの上半分でバイナリ検索が再度繰り返されます:

< td>


開始終了
2 6 8 < / td> 9 10

中央の番号を見つけましょう。それは9です。9を探している数と比較できます。 9は私たちが探している数と同じです。

これは、私たちの研究が停止する可能性があることを意味します。リストで9番目を見つけることができました!

JavaScriptでバイナリ検索を実装する方法

バイナリ検索は、反復または再帰的なアプローチを使用して実装できます。

反復二分探索

反復二分探索は、whileループを使用してリスト内の項目を検索します。このループは、アイテムがリストで見つかるまで、またはリストが検索されるまで実行されます。

バイナリ検索を実行する関数

最初に、startとendの2つの変数を定義しましょう。これらは、私たちの研究が取り組んでいる最高値と最低値を追跡します。 whileループを使用します。これは、開始番号が終了番号より大きくなるまで実行されます。このループは、リストの開始と終了の間の中間数を計算します。

探している数字が真ん中の数字と等しい場合、真ん中の数字がメインプログラムに返されます。数値が小さい場合、シード値は中央の数値に1を加えた値に等しくなるように設定されます。これらの比較は、ifステートメントを使用して行われます。

それ以外の場合、最終的な数値は中央の数値から1を引いたものに設定されます。whileループの実行後に数値が見つからない場合は、-1が返されます。これを基本条件と呼びます。メインプログラムでは、返された数値が-1に等しいかどうかを確認します。つまり、数値が見つからなかったことを意味します。

この関数はまだ機能していません。名前を付けるためにメインプログラムを作成する必要があります。

検索する番号のリストと、リストで検索する番号を定義しました。次に、binarySearch関数を呼び出しました。これは私たちの研究を行います。検索では、-1または探している要素の位置が返されます。

-1は、アイテムが見つからなかったことを示します。要素が見つからない場合は、 elseステートメントの内容が実行されます。それ以外の場合は、 ifステートメントの内容が実行されます。

コードを実行してみましょう:

これは、検索が成功したことを示しています!

再帰的二分探索

再帰的二分探索は、反復的探索よりも洗練されていると見なされます。これは、バイナリ検索がリストに対して同じ操作を繰り返し実行するためです。この動作は、再帰アルゴリズムを使用して実装できます。

新しいJavaScriptファイルを開き、次のコードを貼り付けます。

このコードは、最初の検索と同じ比較を行います。中央の数値が、探している数値と等しいか、大きいか小さいかを確認します。

function では、ifステートメントを使用して、開始番号が終了番号より大きいかどうかを確認しました。大きい場合は、指定したリストにアイテムが見つからなかったことを意味します。この場合、メインプログラムに-1を返します。

探している番号が中央の番号と同じである場合、中央の番号はメインプログラムに返されます。探している数値が中央の数値よりも大きいか小さい場合、バイナリ検索関数が再度実行されます。これは、要素が見つかるまで続きます。

この関数を実行するには、次のことを行う必要があります。メインプログラムに変更を加えます:

さらに2つのパラメータを渡す必要があります。「start」と「end」の値です。 「start」の値は0です。「end」の値はリストの長さから1を引いたものに等しくなります。

コードを実行して、何が起こるか見てみましょう。

バイナリ検索が成功しました!これは、反復アプローチと同じ基本的なアルゴリズムを使用します。違いは、バイナリ検索は、アイテムが見つかるまで、またはリスト内の検索が完了するまで、どちらか早い方で呼び出される関数を使用して実行されることです。

結論

バイナリ検索を使用すると、リスト内のアイテムを簡単に見つけることができます。検索を実行するたびに、リストに残っているアイテムの数が半分に減ります。これにより、線形検索よりもバイナリ検索の効率が向上します。

これで、次の準備が整いました。エキスパートのようにJavaScriptでバイナリ検索を実装してください!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method