バイナリナビゲーションアルゴリズム
13454 ワード
21/10/27:内容を変更しjsコードを追加
まず順序探索を理解する.
特定のデータをブラウズし、前から順にデータを確認する方法.
資料の中でデータを探すときに最も一般的に使われています.
時間に余裕さえあれば、いつも欲しいデータを見つけることができます.
もしあなたが欲しいデータを探していて、データが揃えられているなら、どうなりますか?
検索するデータがデータの平均より大きい場合は、後で検索を開始します.
これにより、データが整列している場合、ナビゲーションが容易になります.
中間データを検索データと比較します.
これは検索アルゴリズムで、検索するデータがもっと小さい場合は、前後と再比較します.
したがって,バイナリ検索を行うためにはソートが必要である.
中間点を選択し、検索したデータより範囲を絞り込みます.
コンピュータエンジニアリングでは底部を省略した
バイナリ検索は,再帰的または繰返し文の2つの方法で実現できる.(実際、ほとんどがそうです)
復帰する
シーヶンスナビゲーション
まず順序探索を理解する.
特定のデータをブラウズし、前から順にデータを確認する方法.
資料の中でデータを探すときに最も一般的に使われています.
時間に余裕さえあれば、いつも欲しいデータを見つけることができます.
# python
for i in range(n):
if array[i] == target:
return i
// javascript
for (let i in arr) {
if (arr[i] === target) {
return i
}
}
時間複雑度はO(N)
であった.(最初から順番にナビゲートしていたので)もしあなたが欲しいデータを探していて、データが揃えられているなら、どうなりますか?
検索するデータがデータの平均より大きい場合は、後で検索を開始します.
これにより、データが整列している場合、ナビゲーションが容易になります.
バイナリナビゲーション
中間データを検索データと比較します.
これは検索アルゴリズムで、検索するデータがもっと小さい場合は、前後と再比較します.
したがって,バイナリ検索を行うためにはソートが必要である.
プロセス
中間点を選択し、検索したデータより範囲を絞り込みます.
O(logN)
の時間的複雑さを有する.(実行ごとに半分に減る)コンピュータエンジニアリングでは底部を省略した
log
には2
の底部がある.バイナリ検索は,再帰的または繰返し文の2つの方法で実現できる.(実際、ほとんどがそうです)
実施方法
復帰する
# python
def binary_search(arr,target,start,end):
if start>end: return None
mid = (start+end)//2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr,target,start,mid-1)
else:
return binary_search(arr,target,mid+1,end)
arr = [2,4,5,6,9,10]
result = binary_search(arr,4,0,len(arr)-1)
print(result) # 1
// javascript
const binarySearch = (arr, target, start, end) => {
if (start > end) return null;
const mid = Math.floor((start+end) /2)
const pivot = arr[mid];
if (target === pivot) {
return mid;
}
else if (target > pivot) {
return binarySearch(arr,target,mid+1, end);
}
else {
return binarySearch(arr,target, start,mid-1);
}
}
const arr = [1,3,5,6,7,8,9,10];
const target = 8;
console.log(binarySearch(arr,target,0,arr.length-1)); // 6
複文def binary_search2(arr,target,start,end):
while start <= end:
mid = (start+end)//2
if arr[mid] == target:
return mid
elif arr[mid] > target:
end = mid-1
else:
start = mid+1
return None
arr2 = [2,4,5,6,9,10]
result = binary_search(arr2,9,0,len(arr2)-1)
print(result) # 4
ナビゲーション範囲が大きい場合にデータをソートした場合は、バイナリナビゲーションを試みます.Reference
この問題について(バイナリナビゲーションアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@hanganda23/이진-탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol