백엔드 개발자 2021. 7. 26. 15:22

탐색할 자료를 둘로 나누어서 데이터를 탐색하는 방법이다.

 

만들기

 

find_data=찾는 숫자

data_list= 데이터 리스트

 

1. 데이터가 1개인 경우

   1-1 if 데이터가 찾는 데이터일경우

         True

   1-2 else: 

         False

 2.데이터가 1개도 없을 경우

  False

 

data_list의 중간값을 시작으로 find_data와 비교해서

3-1 if data_list[middle]>find_data:

      맨앞부터 middle까지의 범위에서 다시 find_data찾기

3-2 elif data_list[middle]<find_data:

      middle에서 맨끝까지 다시 find_data찾기

3-3둘다 아니면 middle=find_data인경우.

 

시간 복잡도 

:n개의 리스트를 매번 2로 나누어 1이 될 때까지 비교연산 k번 진행

O(logn)

 

def binary_search(data,search):
   
print(data)
   
#데이터가 1개밖에 없을 때
   
if len(data)==1:
       
if data[0]==search:
           
return True
        else
:
           
return False
   
#데이터가 1개도 없을 때
   
if len(data)==0:
       
return False
   
#초기값= data_list의 중간값
   
medium=len(data)//2

   
if data[medium]==search:
       
return True
    if
data[medium]<search:
       
return binary_search(data[medium:],search)
   
else:
       
return binary_search(data[:medium],search)

import  random
data_list=random.sample(
range(100),11)
data_list.sort()
print( binary_search(data_list,50) )