[자료구조] 이원 탐색, 순환 이원 탐색

2023. 4. 30. 17:45·전공/자료구조
728x90
반응형

이원 탐색

이미 정렬된 배열 a[0] ... a[n-1]에서 x=a[j]인 j를 반환

- left, right: 탐색하고자 하는 리스트의 왼쪽, 오른쪽 끝

- 초기값 left = 0, right = n-1

- 리스트의 중간 위치 middle = (left/right)/2

- a[middle]과 x 비교

 

1) x < a[middle]

-> right = middle-1

2) x = a[middle]

-> middle 반환

3) x > a[middle]

-> left = middle+1

 

int BinarySearch(int *a, const int x, const int n)
{ // 정렬된 배열 a[left], ..., a[right]에서 x 탐색
    int left = 0, right = n - 1;
    while (left <= right)
    {
        int middle = (left + right) / 2;
        if (x < a[middle])
            right = middle - 1;
        else if (x > a[middle])
            left = middle + 1;
        else
            return middle;
    }          // if의 끝
    return -1; // 발견되지 않음
}

 

시간복잡도 - O(log₂N)

 

순환 알고리즘

수행이 완료되기 전에 자기 자신을 다시 호출 

- 직접 순환: 함수가 그 수행이 완료되기 전에 자기 자신을 다시 호출

- 간접 순환: 호출 함수를 다시 호출하게 되어 있는 다른 함수를 호출

 

순환 이원 탐색

int BinarySearch(int *a, const int x, const int left, const int right)
{ // 정렬된 배열 a[left], ..., a[right]에서 x 탐색
    if (left <= right)
    {
        int middle = (left + right) / 2;
        if (x < a[middle])
            return BinarySearch(a, x, left, middle - 1);
        else if (x > a[middle])
            return BinarySearch(a, x, middle + 1, right);
        return middle;
    }          // if의 끝
    return -1; // 발견되지 않음
}

 

시간복잡도 - O(log₂N)

728x90
반응형

'전공 > 자료구조' 카테고리의 다른 글

[자료구조] 희소 행렬, 행렬 전치  (5) 2023.05.04
[자료구조] 다항식 표현, 다항식 덧셈  (2) 2023.05.02
[자료구조] 공간복잡도, 시간복잡도, 성능평가  (0) 2023.05.01
[자료구조] 선택정렬  (0) 2023.04.30
[자료구조] 자료구조 개념, 이론  (0) 2023.04.20
'전공/자료구조' 카테고리의 다른 글
  • [자료구조] 다항식 표현, 다항식 덧셈
  • [자료구조] 공간복잡도, 시간복잡도, 성능평가
  • [자료구조] 선택정렬
  • [자료구조] 자료구조 개념, 이론
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    C++
    메모리 계층 구조
    리눅스
    컴퓨터구조
    단일 사이클
    코틀린
    데이터패스
    반복자
    티스토리챌린지
    명령어
    백준
    자료구조
    42서울
    오블완
    컴퓨터 구조 및 설계
    사설 문제
    상속
    추가 문제
    컴공 포트폴리오
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[자료구조] 이원 탐색, 순환 이원 탐색
상단으로

티스토리툴바