[ 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 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바