이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

7. 사전 ADT (Dictionary ADT)

  • 2020.10.08 16:06
  • 학부 수업/알고리즘

사전 ADT는 탐색 가능한 형태의 (키, 원소) 쌍 항목들의 모음을 모델링한다.

사전 내의 원소 탐색에는 키가 사용되고, 탐색한 원소가 존재하지 않는 경우 NoSuchKey 에러가 발생한다.

사전 ADT의 함수

int size();
bool isEmpty();
elem findElement(key);
void insertItem(key, value);
elem removeElem(key);

사전 구현에 따른 탐색기법

구현 형태 구현 종류 예 주요 탐색 기법
리스트 무순사전 기록 데이터 선형 탐색
순서사전 일람표 이진 탐색
트리 탐색트리 이진탐색트리,
AVL 트리,
스플레이 트리
트리 탐색
해시테이블     해싱

무순사전

사전 항목들을 임의의 순서대로 사전에 저장한 경우이다.

  • insertItem은 맨 앞 혹은 맨 뒤에서 임의로 실행하면 되므로 $O(1)$ 시간이 소요된다.
  • findElement 및 removeElement는 최악의 경우(항목이 존재하지 않는 경우) 주어진 키를 찾기위해 리스트 전체를 순회해야 하므로 $O(n)$이 소요된다.

무순사전은 소규모 사전이나, 입력은 빈번하지만 탐색과 삭제가 드문 로그 파일의 저장 등에 유용하다.

무순사전의 탐색은 단순히 리스트 전체를 순회하며 원소를 탐색하는 선형 탐색을 사용한다.

순서사전

사전 항목들을 키를 기준으로 배열하여 저장한다.

  • findElement는 이진탐색을 활용하면, $O(\log n)$시간이 소요된다.
  • insertItem은 최악의 경우, 공간 확보를 위해 $n$개의 항목을 이동해야 하므로 $O(n)$시간이 소요된다.
  • removeItem도 같은 이유로 $O(n)$시간이 소요된다.

순서사전은 소규모 사전이나 탐색은 빈번하지만 삽입이나 삭제는 드문 사전에 유용하다.

이진 탐색

순서사전의 탐색에는 이진 탐색이 사용된다. 이진 탐색은 진행에서 재귀가 발생할 때마다 탐색해야할 원소의 수가 반감되므로 재귀는 최대 $\log (n)$회 실행된다.

def binarySearch(k, l, r):
    if l>r:
        raise Exception('NoSuchKey')
    mid = (l+r)/2
    if k=key(A[mid]):
        return elem(A[mid])
    elif k<key(A[mid]):
        return binarySearch(k, l, mid-1)
    else:
        return binarySearch(k, mid+1, r)

'학부 수업 > 알고리즘' 카테고리의 다른 글

9. AVL 트리  (0) 2020.10.15
8. 이진 탐색 트리 (Binary Search Tree)  (0) 2020.10.13
6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)  (0) 2020.09.29
5. 퀵 정렬(Quick Sort)  (0) 2020.09.29
4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer)  (0) 2020.09.22

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 9. AVL 트리

    9. AVL 트리

    2020.10.15
  • 8. 이진 탐색 트리 (Binary Search Tree)

    8. 이진 탐색 트리 (Binary Search Tree)

    2020.10.13
  • 6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

    6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

    2020.09.29
  • 5. 퀵 정렬(Quick Sort)

    5. 퀵 정렬(Quick Sort)

    2020.09.29
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (283)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (49)
      • 회고 & 계획 (20)
      • 내 이야기 (9)
      • 리뷰 (4)
      • 군대에 간 공돌이 (10)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / AXZ. © 백지오. Designed by Fraccino.

티스토리툴바