이진 검색 알고리즘
5369 단어 pythonalgorithmstutorial
이진 검색은 대상 값을 목록의 중간 요소와 비교하여 작동합니다.
대상 값이 중간 요소보다 크면 목록의 왼쪽 절반이 검색 공간에서 제거되고 오른쪽 절반에서 검색이 계속됩니다.
목표 값이 중간 값보다 작으면 검색 공간에서 오른쪽 절반을 제거하고 왼쪽 절반에서 검색을 계속합니다.
이 프로세스는 중간 요소가 대상 값과 같을 때까지 또는 알고리즘이 요소가 목록에 전혀 없다는 결과를 반환할 때까지 반복됩니다.
The Worst Case Time Complexity is O(log n)
연산:
mid는 시작과 끝의 평균의 바닥으로 계산됩니다.
다음 목록이 있다고 가정해 보겠습니다.
목록_항목
21
23
24
35
45
48
56
77
89
색인
0
1
2
삼
4
5
6
7
8
그리고 목록에 24가 있는지 없는지 검색을 원합니다.
알고리즘에 따르면 몇 가지 변수를 설정해야 합니다.
시작 = 0(첫 번째 요소의 인덱스)
end = 8(마지막 요소의 인덱스)
mid = 4 = (0+8)/2 (중간 요소의 인덱스)
목록_항목
21
23
24
35
45
48
56
77
89
색인
0
1
2
삼
4
5
6
7
8
직위
시작
중반
끝
이제 중간 인덱스 즉 48의 현재 값에 따라 변수를 정렬합니다.
인덱스 mid(즉, 48)에 있는 요소가 24보다 작으면 start가 mid + 1로 설정됩니다.
그리고 인덱스 mid(즉, 48)의 요소가 24보다 크면 end는 mid로 설정됩니다.
그렇지 않으면 중간 인덱스에 있는 요소는 발견된 요소의 인덱스로 반환되는 24와 같습니다.
24 < list[mid]임을 분명히 알 수 있으므로 다음과 같이 변경합니다.
시작 = 0 변경 사항 없음
끝 = 4 현재 중간
중간 = 2 = (0+4)/2
목록_항목
21
23
24
35
45
48
56
77
89
색인
0
1
2
삼
4
5
6
7
8
직위
시작
중반
끝
start < end까지 이 과정을 반복합니다. 시작이 끝보다 작으면 해당 평균 요소가 목록에 없습니다.
이제 변수의 현재 위치를 분석하면 24가 중간 지수의 값과 같다는 것을 분명히 알 수 있습니다. 이 인덱스를 반환합니다.
다음은 Python에서 이진 검색 알고리즘을 구현한 것입니다.
def binary_search(mylist, key):
"""Search key in mylist [start... end - 1]."""
start = 0
end = len(mylist)
while start < end:
mid = (start + end)//2
if mylist [mid] > key:
end = mid
elif mylist [mid] < key:
start = mid + 1
else:
return mid
return -1
mylist = input[21, 23, 24, 35, 45, 48, 56, 77, 89]
key = 24
index = binary_search(mylist, key)
if index < 0:
print(key ,' was not found.’)
else:
print(key , 'was found at index', index)
산출:
24는 인덱스 2에서 발견되었습니다.
Reference
이 문제에 관하여(이진 검색 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/atebarhaider/binary-search-algorithm-199o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)