バイナリナビゲーション-サンプル)部品の検索
12949 ワード
問題を理解する
コア)お客様が要求する製品番号がリストにある場合はyes、ない場合はno
input ex)
私が持っている
N = 5
[8,3,7,9,2]
お客さんが探しているもの
M = 3
[5,7,9]
入力条件)
整数1<=N<=10000
整数1<=M<=10000
本を解く
大量のデータ検索、バイナリ検索アルゴリズムは効率的です
1)N個のデータを並べ替える
2)お客様が検索するコンテンツがデータに存在するかどうかをバイナリ検索する.(合計M回)
この場合の時間的複雑さ
バイナリ・エクスプローラ:O(M logN)勘定科目の勘定科目は約2000万回(log 100000≒20)
N個のデータのソート:O(Nlogn)勘定科目の勘定科目として、約200万回の演算があります.
最終時間複雑度:O(M+N)logN
基本解答
お客様が探している目標が存在するかどうか.
m番バイナリ検索を実行します!
# 이진탐색 소스코드 구현(반복문)
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 = int(input())
data = list(map(int, input().split()))
m = int(input())
targets = list(map(int, input().split()))
data.sort() # 이진 탐색을 수행하기 위한 사전 정렬!!!!
# 손님이 확인 요청한 부품 번호를 하나씩 확인
for target in targets :
# 해당 부품이 존재하는지 확인
result = binary_search(data, target, 0, n-1)
if result != None : print('yes', end = ' ')
else : print('no', end =' ')
係数ソートの使用率を解く
すべての要素番号を含むサイズリストを作成します.
リストのインデックスに直接アクセスして、特定の番号の部品がショップに存在するかどうかを決定します.
カウントソートの複雑さはO(N)ですが、メモリの無駄になります.
次のリンクを参照
# N *(가게의 부품 갯수) 입력받기
n = int(input())
array = [0]*1000001
# 가게에 있는 전체 부품번호를 입력받아서 기록
for i in input().split() :
array[int(i)] = 1
# M(손님이 확인 요청한 부품 갯수) 입력받기
m = int(input())
x = list(map(int, input().split()))
# 손님이 확인 요청한 부품 번호를 하나씩 확인
for i in x :
# 해당 부품이 존재하는지 확인
if array[i] == 1: print('yes', end=' ')
else : print('no', end=' ')
集合型使用状況の解答
set()関数は、集合データ型を初期化するために使用されます.
集合資料型は,特定のデータが存在するか否かを単純にチェックする場合に有効である.
Python文法学習集合資料型
データ型別Pythonメソッドの時間的複雑さ
set資料型の含む複雑さはO(1)!!
Listの包含複雑度はO(N)であり,比較すると赫迅号である.
n = int(input())
array = set(map(int, input().split())) # 집합 자료형에 기록한다!!!!!
m = int(input())
x = list(map(int, input().split()))
# 손님이 확인 요청한 부품 번호를 하나씩 확인
for i in x :
if i in array :
print('yes', end=' ')
else :
print('no', end=' ')
3つの解釈があります
以上の3つの方法はすべて有効な解題方法です!
Reference
この問題について(バイナリナビゲーション-サンプル)部品の検索), 我々は、より多くの情報をここで見つけました https://velog.io/@yesterdaykite/7.-이진탐색-예제부품찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol