ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 커밋
  • 정렬
  • java.lang
  • git
  • 알고리즘
  • java 기초
  • binarySearch
  • 합병정렬
  • matplotlib
  • string to int
  • Python
  • git add.
  • java
  • java.net
  • staged
  • README.md
  • 자바
  • java base
  • Github
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI
Algorithm

[알고리즘] binarySearch 이진탐색, 재귀이진탐색_분할과 정복 (pseudo-code 파이썬, Java)

[알고리즘] binarySearch 이진탐색, 재귀이진탐색_분할과 정복 (pseudo-code 파이썬, Java)
Algorithm

[알고리즘] binarySearch 이진탐색, 재귀이진탐색_분할과 정복 (pseudo-code 파이썬, Java)

2021. 10. 16. 20:20

이진탐색

  • 오름차순으로 정렬되어 있는 리스트(배열)에서 찾고자 하는 원소 item 의 위치를 찾을 때, 리스트(배열)에서 중간지점을 구한 후, item 값과 비교하여, item 값이 중간지점보다 작으면, 왼쪽부분에서 다시 중간지점을 찾아서 비교하여, 탐색하고, 크면 오른쪽부분에서 탐색한다. 중간지점과 item 과 값이 같으면 인덱스를 반환한다.

Pseudo-code

Algorithm binarySearch(A, item, n)
    left = 0 
    right = n-1 
    while (left <= right)  
       mid = (left + right) / 2   
       if (x == A[mid]) then
           return mid
       else if (x < A[mid])
           right = mid – 1
       else 
           left = mid + 1

Python

def binarySearch(arr, key):
    left = 0
    right = len(arr) - 1
    while (left <= right):
        mid = (left + right) // 2
        if key == arr[mid]:
            return mid
        elif key > arr[mid]:
            left = mid + 1
        elif key < arr[mid]:
            right = mid - 1

Java

public class BinarySearch{
    public void search(int key, int[] arr){
        int left = 0;
        int right = arr.length - 1;
        int mid;

        while(left <= right){
             mid = (left + right) / 2;
            if(key == arr[mid]){
                return mid;
            }
            if(key > arr[mid]){
                left = mid + 1 
            }
            else{
                right = mid - 1
            }

        }
    }
}

수행시간분석

T(n) = k + 1

n * (1/2)^k = 1
k = log n 일때

T(n) = log n + 1

T(n) = O(log n)

이진탐색 - 분할과 정복

분할과 정복의 방법으로 재귀적으로 표현

Pseudo-code

Algorithm binarySearch(A, item, left, right)
    if left > right
        return -1 : item이 없을 경우 -1 반환
    else
        mid = (left + right) / 2 : 2로 나눈 몫을 구하는 연산
        if (item == A[mid])
            return mid
        else if (item < A[mid])
            return binarySearch(A, left, mid-1) 
        else
            return binarySearch(A, mid+1, right) 

Python

def binarySearch(arr, item, left, right):
    if left > right:
        return -1
    else:
        mid = (left + right)//2
        if item == arr[mid]:
            return mid
        elif item < arr[mid]:
            return binarySearch(arr, item, left, mid-1)
        else:
            return binarySearch(arr, item, mid+1, right)

Java

public class BinarySearch{
    public void binarySearch(int[] arr, int key, int left, int right){
        int left = 0;
        int right = arr.length - 1;
        int mid;

        while(left <= right){
             mid = (left + right) / 2;
            if(key == arr[mid]){
                return mid;
            }
            if(key > arr[mid]){
                return binarySearch(arr, key, mid + 1, right)
            }
            else{
                return binarySearch(arr, key, left, mid - 1)
            }

        }
    }
}

수행시간

T(n) = 0 (if n = 1)

​ <= T(n/2) + 1 (if n > 1)

T(n) <= T(n/2) + 1 <= [T(n/2^2) + 1] + 1

​ <= T(n/2^2) + 2 <= [T(n/2^3) + 1] + 2

​ <= T(n/2^3) + 3 <= [T(n/2^4) + 1] + 3

​ …

​ <= T(n/2k) + k

n/2k = 1
k = log n 일 때,

​ <= T(1) + log n

T(n) = O(log n)

'Algorithm' 카테고리의 다른 글

[알고리즘] mergeSort 병합(합병)정렬 (pseudo-code, 파이썬, Java)  (1) 2021.10.17
[알고리즘]분할과 정복 개념 및 예시  (0) 2021.10.15
[알고리즘] bubble_sort 버블정렬(pseudo-code, 파이썬, Java)  (0) 2021.10.15
[알고리즘] selectionSort 선택정렬(pseudo-code, Java, 파이썬)  (0) 2021.10.14
[알고리즘] Stable & In-place  (0) 2021.10.14
  • 수행시간분석
  • 수행시간
'Algorithm' 카테고리의 다른 글
  • [알고리즘] mergeSort 병합(합병)정렬 (pseudo-code, 파이썬, Java)
  • [알고리즘]분할과 정복 개념 및 예시
  • [알고리즘] bubble_sort 버블정렬(pseudo-code, 파이썬, Java)
  • [알고리즘] selectionSort 선택정렬(pseudo-code, Java, 파이썬)
ID_DI
ID_DI
Computer Vision

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.