"알고리즘 그래픽"연구 노트 하나를 이진 검색

   假设要在电话簿中找一个名字以K打头的人,现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间。
   又假设要在字典中找一个以O打头的单词,你也将从中间附近开始。
   现在假设你登录Facebook。当你这样做时,Facebook必须核实你是否有其网站的账户,因此必须在其数据库中查找你的用户名。如果你的用户名为karlmageddon,Facebook可从以A打头的部分开始查找,但更合乎逻辑的做法是从中间开始查找。
   这是一个查找问题,在前述所有情况下,都可使用同一种算法来解决问题,这种算法就是二分查找。
   二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要 查找的元素包含在列表中,二分查找返回其位置;否则返回null。

그냥 추측 1-100 번호는 이진 검색의 차이를 분석하고 간단하게 찾을 수 있습니다 :

찾기 간단한 이진 검색
방법 숫자, 추측의 숫자. 추측이 너무 크면, 그 다음 작은 디지털 추측 지점 인 경우, 추측이 큰 점, 너무 큰 다음 디지털 추측 경우, 목표 수치까지 생각 하프 같다 50 100 시작, 상기 단계를 반복 한 후, 각각의 중간 나머지 도면들은 도면 번호 추측된다 (또는 소수의 네거티브 하프 가능) 계량 숫자 같다까지
최악의시기 수행 n 번 log2n 시간

파이썬 코드를 검색 이진 :
기능 binary_search는 정렬 된 배열 요소를 받아들입니다. 지정된 요소가 배열에 포함되는 경우,이 함수는 위치로 복귀한다. 전체 배열의 시작 부분에 - 당신은 당신이 찾으려하는 배열 부분을 추적합니다.

def binary_search(list, item):
    low = 0
    high = len(list) - 1
    while low <= high:
        mid = (low + high) //2
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None


my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))  # => 1
print(binary_search(my_list, -1))

게시 된 원본 기사 · 원의 칭찬 0 · 조회수 18

추천

출처blog.csdn.net/Kingchuxu/article/details/104552128