[CS50] 알고리즘 - 검색 알고리즘

TIL

검색 알고리즘

메모리 구조, 자료형, 배열과 같은 기본 개념을 활용하여 검색과 정렬 문제를 푸는 알고리즘을 배워보자.

 

주어진 배열에서 특정 값을 찾는 방법부터 알아보자.

 

배열은 한 자료형의 여러 값이 메모리상에 모여 있는 구조다. 컴퓨터는 배열의 인덱스를 하나씩 접근한다.
어떤 값이 배열 안에 있는지 찾으려면 배열이 정렬되어 있는지에 따라 다른 방법을 사용한다.

선형 검색

배열의 인덱스를 처음부터 끝까지 하나씩 증가시키며 값을 검사한다.

For i from 0 to n–1
        If i'th element is 50
                Return true
Return false
  • 모든 원소를 순서대로 확인하므로 정렬 여부와 관계없이 사용할 수 있다.
  • 시간 복잡도: O(n)

 

이진 검색

배열이 정렬되어 있다면 더 효율적인 방법을 사용할 수 있다.

 

배열 중간 인덱스부터 시작하여 찾고자 하는 값과 비교한다. 그보다 작으면 왼쪽 절반, 크면 오른쪽 절반을 탐색한다.

If no items
        Return false
If middle item is 50
        Return true
Else if 50 < middle item
        Search left half
Else if 50 > middle item
        Search right half
  • 매번 탐색 범위를 절반으로 줄이므로 훨씬 빠르다.
  • 시간 복잡도: O(log n)
주의: 이진 검색은 정렬된 배열에서만 정확하게 동작한다.

 

연습 문제

Q. 정렬되지 않은 배열이 있다면, 선형 검색과 이진 검색 중 어느 것이 빠를까?
선형 검색이 적합하다.
정렬되지 않은 배열에서 이진 검색은 정확하지 않다. 이진 검색은 배열이 정렬되어 있다는 전제하에 중간 값과 비교하여 절반씩 탐색 범위를 줄인다.

 

정렬되지 않은 배열에서는:

  • 운에 따라 빠를 수도 있음
  • 값이 있는데도 찾지 못할 수 있음
  • 잘못된 결과 반환 가능

따라서 정렬되지 않은 배열을 정확하게 검색하려면 선형 검색을 사용해야 한다.

 

요약
정렬된 배열 → 이진 검색 (빠름)
정렬되지 않은 배열 → 선형 검색 (정확함)

'TIL' 카테고리의 다른 글

[CS50] 알고리즘 - 선형 검색  (0) 2025.11.06
[CS50] 알고리즘 - 알고리즘 표기법  (0) 2025.11.06
[CS50] 명령행 인자  (0) 2025.11.06
[CS50] 배열 - 문자열의 활용  (0) 2025.11.06
[CS50] 배열 - 문자열과 배열  (0) 2025.11.06
'TIL' 카테고리의 다른 글
  • [CS50] 알고리즘 - 선형 검색
  • [CS50] 알고리즘 - 알고리즘 표기법
  • [CS50] 명령행 인자
  • [CS50] 배열 - 문자열의 활용
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    제네릭
    memory
    emotion diary
    Trouble Shooting
    react
    Pages Router
    타입 좁히기
    앱 라우터
    generic
    typescript
    바닐라 자바스크립트
    알고리즘
    CS
    함수 타입
    인터페이스
    클래스
    Spa
    배열
    트러블 슈팅
    ai 감성 일기장
    javascript
    자료구조
    cs50
    App Router
    페이지 라우터
    문자열
    useState
    algorithm
    Next.js
    C
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 알고리즘 - 검색 알고리즘
상단으로

티스토리툴바