[Java 자료구조] 여러가지 자료 구조 (2)

2022. 2. 6. 22:23·Java & Kotlin
목차
  1. 트리 (Tree)
  2. 이진 트리로 구현하는 자료구조
  3. 그래프 (Graph)
  4. 해싱 (Hashing)

비선형 자료구조

트리 (Tree)

  • 부모 노드와 자식 노드간의 연결로 이루어진 자료구조를 말한다.
  • 트리 중에서도 프로그래밍에서 가장 많이 사용되는 트리는 이진트리이다. (자식 노드 개수 =< 2)
  • 이진트리 중 child 개수가 꽉 찬 트리를 포화 이진 트리(Full Binary Tree)라고 한다.
  • 루트 노드를 시작으로 왼쪽에서 오른쪽으로 채워나간 트리를 완전 이진 트리(Complete Binary Tree)라고 한다.

 

이진 트리로 구현하는 자료구조

1) 힙(Heap)

  • 완전 이진 트리로 구현
  • max heap : 부모 노드 값 >= 자식 노드 값
  • min heap : 부모 노드 값 <= 자식 노드 값
  • max heap 또는 min heap에서 요소를 하나씩 꺼내면 큰 값(or 작은 값)부터 출력되어 정렬된다. (heap sort)
  • priority queue : 우선 순위 높은 element부터 꺼냄
  • 자료의 중복은 허용됨

 

2) 이진 검색 트리(Binary Search Tree)

  • 자료(key)의 중복을 허용하지 않는다.
  • 부모 노드 기준으로 left subtree는 작은 값(큰 값), right subtree는 큰 값(작은 값)을 가진다.
  • 자료 검색 시 한 단계마다 절반씩 범위가 줄어듦으로 검색 성능은 O(logn)이다.

  • 최악의 경우(skewed-tree)에는 자료의 개수에 따라 검색 시간이 dependent하므로 검색 성능은 O(n)이다.
  • 이를 방지하기 위해 AVL과 같이 스스로 밸런스를 유지해주도록 구현한다.
  • traversal(순회) 방식에는 preorder, inorder, postorder 방식이 있다.
  • inorder traversal 탐색을 하면 lchild → parent → rchild 순으로 출력되므로 sorting된다.

 

그래프 (Graph)

  • vertex(정점)와 edge(간선)의 집합 G = (V,E)
  • 간선은 방향성이 있는 경우와 없는 경우가 있다.
  • 그래프를 구현 하는 방법 : 인접 행렬(adjacency matrix), 인접 리스트(adjacency list)
  • 그래프를 탐색하는 방법 : BFS, DFS

 

해싱 (Hashing)

  • 검색을 위한 자료구조
  • 키(key)에 대한 자료를 검색하기 위한 사전(dictionary) 개념의 자료구조
  • 유일한 key에 대한 value를 쌍으로 저장한다.
  • key에 대한 index를 반환하기 위해 해시 함수를 이용한다. index = h(key)
  • 되도록 유일한 index를 반환하는 것이 해시 충돌(hash collision)을 방지할 수 있으므로 좋다.
  • 해시 함수를 이용하여 인덱스 연산이 산술적으로 가능하기 때문에 검색 속도가 빠르다. O(1)
  • 해시 충돌이 발생했을 경우 데이터를 추가, 삽입, 검색하는데 시간이 소요될 수 있다.
  • array 형태로 저장되는 해시 테이블, 인덱스 array와 그에 대응되는 value 값으로 저장되는 체이닝으로 구현할 수 있다.
  • 해시 테이블은 배열 형태로 저장되기 때문에 메모리 낭비가 발생할 수 있고 체이닝은 구현은 복잡하지만 슬롯이 부족하거나 메모리 낭비가 되는 일은 없다.
저작자표시 비영리 변경금지 (새창열림)

'Java & Kotlin' 카테고리의 다른 글

[Java 자료구조] 배열 구현해보기  (0) 2022.02.07
[Java 자료구조] 여러가지 자료구조 (1)  (0) 2022.02.05
[Java 클래스] Class 클래스  (0) 2022.02.05
  1. 트리 (Tree)
  2. 이진 트리로 구현하는 자료구조
  3. 그래프 (Graph)
  4. 해싱 (Hashing)
'Java & Kotlin' 카테고리의 다른 글
  • [Java 자료구조] 연결 리스트 구현해보기
  • [Java 자료구조] 배열 구현해보기
  • [Java 자료구조] 여러가지 자료구조 (1)
  • [Java 클래스] Class 클래스
Sue
Sue
개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Java 자료구조] 여러가지 자료 구조 (2)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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