algorithm_탐색

ga_0·2022년 10월 16일
0

algorithm

목록 보기
2/2
post-thumbnail

탐색

  • 주어진 자료들 중에 원하는 조건에 해당하는 자료를 찾는 과정
  • 주어진 자료들을 모아둔 공간(탐색 공간)에서 목표 값을 찾는 과정

모든 알고리즘의 3가지 공통 구성요소

  1. 탐색 목표
    : 타겟 데이터(값)
    -> 탐색 성공 여부 판단의 기준

  2. 탐색 공간
    : 탐색 목표일 가능성이 있는 것을 모아 놓은 집합

  1. 탐색(검색) 알고리즘
    : 탐색을 진행하며 따라야하는 특정 절차 및 지침을 모아둔 집합

탐색 문제 해결방법

1. 선형 탐색 알고리즘 = 순차 탐색 알고리즘

2. 이진(이분) 탐색 알고리즘

  • 중간값 찾아서 -> 왼쪽 오른쪽 구분
    계속 중간값을 찾아 반씩 나눠서 탐색
  • 정렬된 리스트에서 특정 값 위치를 탐색하는 알고리즘
  • 시간 복잡도
    최선 : O(1) -> 한번에 찾음
    최악 : O(log2n) -> 타겟 못찾음

-> 보통 정렬된 리스트에는 이진탐색
-> 정렬되지 않은 리스트에는 선형 탐색 사용

3. 해시 탐색

  • 해시 : 잘게 썬다, 자른다
  • 선형/이진 탐색은 어떤 값이 어떤 인덱스에
    들어있는지 정보가 없을 때 사용
    -> 데이터랑 데이터와 같는 첨자의 요소에 넣어두면 한번에 찾는게 가능하지 않을까? 란 아이디어가 떠오름
    -> 해시 탐색은 값-인덱스 미리 연결해두어 더 짧은 시간에 탐색 가능
  • 해시 탐색은 해시 함수를 사용하여
    1) 입력들을 분류 및 저장

    -> 입력.분류하는 과정
    = 해시테이블(미리 준비해둔 상자)에 입력/분류하여 담아두는 과정
    2) 요소를 탐색(검색)
    하는 두개의 알고리즘이 필요
  • 해시 값 충돌 (해시 값이 겹치는 경우)
    -> 해결방법으로 같은 해시 값을 가지면 해당 요소들을 연결 리스트로 만듦
    -> 해시 충돌시에 조사하게 되는 대체칸 = 번지 계열
    -> 번지 계열이 겹쳐 충돌일어날 경우 = 클러스터 발생
  • 시간복잠도
    최선 : O(1)
    최악 : O(n)
    검색 알고리즘 중에서 매우 속도가 빠른 알고리즘
    해시함수의 질이 좋을 때 사용이 권장됨

4. 이진 탐색 트리 = BST

  • 정의
    왼쪽 서브트리의 키값들은 root의 키값보다 작다
    오른쪽 서브트리의 키값들은 root의 키값보다 크다
    왼쪽, 오른쪽 서브트리들은 각각 모두 BST정의를 만족한다
    BST의 모든 node들의 키값은 unique하다.
    위의 4가지를 모두 만족해야 한다.

  • 탐색 알고리즘
    어떠한 BST에서 원하는 값을 찾고자할 때,

    root값을 기준으로

    원하는 값 > root 키 값 : 오른쪽 서브트리로 이동
    원하는 값 < root 키 값 : 왼쪽 서브트리로 이동
    원하는 값 = root 키 값 : 탐색 종료
    이 것을 계속 반복해나가면 된다.
    -> 이진 탐색 트리는 트리 구조와 함께
    추후 게시물에서 추가적으로 다뤄
    관련 링크 첨부 예정 + 관련 내용 수정 예정

참고

탐색 알고리즘 - 선형탐색/이진탐색
[탐색&자료구조] 👀완전탐색(exhaustive search) 알고리즘 + 📂배열(array)
[알고리즘] 탐색 알고리즘 (선형, 이분, 해시, BST)
[c++] 알고리즘 개념공부 :: 탐색 (선형 탐색, 이진 탐색, 해시 탐색)
탐색 알고리즘을 알아봅시다!!:)

0개의 댓글

관련 채용 정보