[ARGORITHM]バイナリナビゲーション
シーケンスナビゲーションvsバイナリナビゲーション
始点中点端点を利用して、ナビゲーションの前提は位置合わせのデータ
バイナリナビゲーションの時間的複雑さ
シーケンスナビゲーションソースvsバイナリナビゲーションソース
シーヶンスナビゲーション
## 순차 탐색 소스코드 구현
def sequential_search(n, target, array):
# 각 원소 하나씩 확인
for i in range(n):
# 현재의 원소가 찾고자 하는 원소와 동일한 경우
if array[i]==target:
return i+1 # 현재 위치 반환
return -1
print("생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.")
input_data = input().split()
n = int(input_data[0])
target = input_data[1]
print("앞서 적은 원소 개수만큼 문자열을 입력하세요. 구분은 띄어쓰기 한 칸으로 합니다.")
array = input().split()
# 순차 탐색 수행 결과
print(sequential_search(n, target, array))
作成する要素の数を入力し、スペースを入力して検索する文字列を入力します.5 aa
エレメント数が最も少ない文字列を入力してください.スペースに区切ります.
d f r aa s
4
バイナリナビゲーション
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start+end)//2
# 찾은 경우 중간점 인덱스 반환
if array[mid] == target:
return mid
# 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인
elif array[mid] > target :
return binary_search(array, target, start, mid-1)
# 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else :
return binary_search(array, target, mid+1, end)
# n과 target 을 입력 받기
n, target = list(map(int, input().split()))
# 전체 원소 입력 받기
array = list(map(int, input().split()))
# 이진 탐색 수행 결과
result = binary_search(array, target, 0, n-1)
if result== None:
print("원소 존재 안해요")
else:
print(result+1)
5 31 2 3 4 5
3
バイナリナビゲーション
def binary_search(array, target, start, end):
while start <= end:
mid = (start+end) //2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid-1
else:
start = mid +1
return None
# n과 target 을 입력 받기
n, target = list(map(int, input().split()))
# 전체 원소 입력 받기
array = list(map(int, input().split()))
# 이진 탐색 수행 결과
result = binary_search(array, target, 0, n-1)
if result== None:
print("원소 존재 안해요")
else:
print(result+1)
5 31 2 3 4 5
3
バイナリナビゲーション
エンコードテストのバイナリナビゲーションタイプ
バイナリ検索の問題は,検索範囲が広い場合に検索を仮定することが多い.
探索範囲が2000万を超えるなら、バイナリで近づく方法を考えてみましょう!
バイナリ検索タイプ入力データが多いか、検索範囲が広い.
たとえば、データが1000万を超える場合や、ナビゲーション範囲が1000億を超える場合は、バイナリナビゲーションを試してみましょう.
データが多すぎてinput()速度が遅すぎてタイムアウトと判定された場合はreadline()を使用してください!
import sys
input_data = sys.stdin.readline().rstrip()
print(input_data)
readline()入力を受信すると、入力後に改行文字で入力されます.rstrip()を呼び出してスペース文字を削除します!
ツリーデータ構造
データベースシステムまたはファイルシステムにおける大量のデータ管理に使用されるグラフィック資料構造の一種.
このツリー構造は,バイナリ探索のような手法を用いて探索を迅速に実行する.
バイナリナビゲーションツリー
パラメトリックメジャー
二分ナビゲーションとパラメトリック検索
이분 탐색
は、ターゲットが配列中に存在するかどうかと存在する位置を教えてくれます.targetと完全に一致する値が存在しない場合は、パラメトリックプログラムを使用して最適な値を探すことができます.
파라메트릭 서치
は、最適化された問題を決定問題に変換するアルゴリズムである.最適化問題の状況は無限であり,決定問題には2つの答えしかない.
問題を最適化して問題を特定するレシピに変更
1.「一番いい答えは何ですか?」このような最適化問題は「xより良い答えはありますか?」「意思決定問題」の形式に変更
2.意思決定問題を解決する簡単な方法を探す
3.内部利用決定問題の作成
이분탐색
アルゴリズムBinary Search와 Parametric Search의 차이점
Binary Searchでは、配列にXに一致する値が見つかった場合、関数をすぐに終了し、位置を返します.Parametric Searchは、関数を終了するのではなく、表示する配列がなくなるまでブラウズを続けます.
参考にしました。
Reference
この問題について([ARGORITHM]バイナリナビゲーション), 我々は、より多くの情報をここで見つけました https://velog.io/@redcarrot01/알고리즘-이진탐색テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol