[ Python ] 파이썬 이분 검색(Binary Search) 코드 | 순차 탐색 vs 이분 검색

2021. 1. 7. 17:26·Archive/Develop
728x90
반응형

 

 

이 포스팅은 구름edu 의 파이썬으로 배우는 알고리즘 강의를 기반으로 코드를 작성했음을 밝힙니다.

edu.goorm.io/learn/lecture/22654/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B8%B0%EC%B4%88

 

파이썬으로 배우는 알고리즘 기초 - 구름EDU

실행 가능한 파이썬 소스 코드로 실용적으로 배우는 알고리즘

edu.goorm.io

 

 

 

이분 검색(Binary Search 란?)

 

 

주어진 리스트 S와 키 x 에 대해서,

x 를 리스트의 중앙에 위치한 원소와 비교 하고 만약 같다면 알고리즘을 종료합니다.

 

만약 x 가 그 원소보다 작으면 x 는 왼쪽에 위치함을 알 수 있으므로

왼쪽 리스트에 대해 이진 탐색을 실행합니다. (재귀)

 

마찬가지로

 

만약 x 가 그 원소보다 크면 x 는 오른쪽에 위치함을 알 수 있으므로

오른쪽 리스트에 대해 이진 탐색을 실행합니다. (재귀)

 

 

나눗셈을 할 때 슬래시 두개 (//) 는 리턴 값이 정수로 딱 떨어지게 됩니다.

 

 

 

 

[ Code ]

 

 

def binary_search(n, S, x):
    low=1
    high =n
    location=0
    while(low<=high and location==0):
        mid=(low+high)//2
        if(x==S[mid]):
            location=mid
        elif(x <S[mid]):
            high=mid-1
        else:
            low = mid+1
    return location

S=[0,5,7,8,10,11,13]
x=11

location=binary_search(len(S)-1,S,x)
print('S = ',S)
print('x = ',x)
print('location = ',location)

 

 

 

 

 

 

 

 

 

 

 

 

 

순차 탐색 vs 이분 검색

 

 

입력 리스트의 조건에 따라 탐색 알고리즘을 선택해야 합니다.

이분 검색은 정렬된 리스트에서 키를 찾아야 하고,

순차 탐색은 정렬되지 않은 리스트에서 키를 찾는 것입니다.

 

 

 

 

순차 탐색 & 이분 검색 알고리즘 효율성 비교

 

리스트의 크기 순차 탐색의 비교 횟수 이분 검색의 비교 횟수
128 128 8
1024 1024 11
1048576 1048576 21

 

 

만약 검색해야하는 숫자가 리스트 상에 없다면,

순차 탐색은 크기가 n 인 리스트에서 n번의 비교를 수행해야 합니다.

이분 검색은 크기가 n 인 리스트에서 logn +1 번의 비교를 수행합니다.

 

 

따라서 리스트의 크기가 커질 수록, 이분 검색이 효율적이라는 결론이 나올 수 있습니다.

 

 

 

 

 

 

다음 포스팅은 피보나치 수열이 되겠습니다,,,

코로나 빨리 끝나고 밖에 나가서 산책하고 싶어요,,

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ JavaScript ] 자바스크립트 바인딩과 this | 자바스크립트 개념  (0) 2021.01.08
[ Python ] 파이썬 피보나치 수열(Fibonacci)코드  (0) 2021.01.07
[ Python ] 파이썬 행렬의 곱셈 코드 | 파이썬 정방행렬 곱셈  (0) 2021.01.07
[ Python ] 파이썬 교환정렬 코드 | 파이썬에서 swap 하기  (0) 2021.01.07
[ Python ] 파이썬 순차 탐색 문제 코드 | 순차 탐색 알고리즘 | 파이썬 알고리즘  (0) 2021.01.07
'Archive/Develop' 카테고리의 다른 글
  • [ JavaScript ] 자바스크립트 바인딩과 this | 자바스크립트 개념
  • [ Python ] 파이썬 피보나치 수열(Fibonacci)코드
  • [ Python ] 파이썬 행렬의 곱셈 코드 | 파이썬 정방행렬 곱셈
  • [ Python ] 파이썬 교환정렬 코드 | 파이썬에서 swap 하기
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    오라클
    카카오 100일 프로젝트
    자바스크립트 API
    Codeup
    백준 풀이
    Django
    코드업 기초
    백준
    자바스크립트
    파이썬
    백준 파이썬
    파이썬 기초 문제
    장고
    docker
    비박스
    자바스크립트 객체
    보안뉴스
    C++
    oracle db
    파이썬 기초
    백준 문제풀이
    파이썬 백준
    코드업
    파이썬 알고리즘
    javascript
    파이썬 문제
    Git
    Python
    Oracle
    코드업 파이썬 기초 100제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Python ] 파이썬 이분 검색(Binary Search) 코드 | 순차 탐색 vs 이분 검색
상단으로

티스토리툴바