이분 검색 알고리즘의 귀속과 비귀속 실현

《알고리즘 도론》 제3판 P22, 2.3-5 연습문제 귀속 실현
list1 = [1,2,3,4,5,6,7,8,9,10];
count = len(list1);

def rbs(list0, start, end, a):
    mid = (int)((start + end) / 2);
    if a == list0[mid]:
        return mid
    if start == mid and mid == end:
        return -1
    index1 = rbs(list0, start, mid - 1);
    index2 = rbs(list0, mid + 1, end);

    if index1 == -1:
        return index2
    else:
        return index1

print("Index of 5 is:");
print(rbs(list1, 0, count - 1, 5));

비귀속 실현
list1 = [1,2,3,4,5,6,7,8,9,10];
count = len(list1);
stack = []

def bs(list0, start, end, a):
    while(True):
        mid = (int)((start + end) / 2)
        if a == list0[mid]:
            return mid
        if start == mid and mid == end:
            if len(stack) == 0:
                return -1
            else:
                start = stack.pop(0)
                end = stack.pop(0)
                mid = -1

        if mid != -1:
            stack.append(mid + 1)
            stack.append(end)
            end = mid

print("Index of 5 is:");
print(bs(list1, 0, count - 1, 5));

주: 단귀환을 비귀환으로 바꾸면 순환으로 해결할 수 있다.쌍귀환을 비귀환으로 바꾸고 순환을 제외하고는 창고나 대열을 빌려야 한다.
저자: 이인신, 2005년 산동사범대학 컴퓨터학과를 졸업하고 세 차례 정신분열증을 앓았다.재활 후 4년 가까이 소프트웨어 엔지니어로 일한 후에 2년 동안 정신분열증 분야의 공익을 했습니다. 지금은 다시 소프트웨어 업계로 돌아가 모든 것을 처음부터 시작합니다!이 블로그가 나의 성장과 진보를 증명하기를 바란다.

좋은 웹페이지 즐겨찾기