자료구조란
특정한 상황에 데이터를 효율적으로 다루는 방법들
자바는 stack만 구현돼 있고 나머지는 인터페이스만 있음
Stack
- 선입후출
- 데이터를 하나씩 넣고 뺌
- 하나의 입출력 방향
- 재귀함수
- ex) 브라우저 뒤로가기, 스택메모리
Queue
- 선입선출
- 데이터를 하나씩 넣고 뺌
- 두개의 입출력 방향
- ex) 일상에서 대기줄, 인쇄대기
- 원형큐
Tree
- 단방향 그래프
- 하나의 뿌리로부터 가지가 뻗는 형태
- 비선형구조
- 레벨, 깊이, 부모노드, 자식노드, 형제노드, 리프, 루트
- ex) 폴더 구조
Graph
- 여러 개의 점들이 서로 연결되어 있는 관계를 표현한 자료구조
- 직접적인 관계/ 간접적인 관계
- 정점(vertex), 간선(edge)
- 인접행렬, 인접 리스트 (인접 리스트는 메모리를 효율적으로 사용)
- 방문여부를 표시하는 데이터 자료가 필요
BST(Binary Search Tree)
- 이진 트리 종류: 정 이진 트리, 포화 이진 트리(두 개의 자식 노드가 모두 있음), 완전 이진 트리(왼쪽 자식 노드부터 채움)
- 이진 트리와 이진 탐색 트리의 차이점: 이진 탐색 트리는 요소의 크기에 따라 위치가 정해짐
- 시간 복잡도: O(logn)
- ex) 업다운
Deque
양방향 대기열
LinkedList, ArrayDeque 클래스로 구현 가능
Linked List
노드의 추가/삭제가 빠르고 쉬움
단, 검색을 하려면 최악의 경우 전체를 순회해야 함
ex) 삽입과 삭제가 중요한 join, split method 의 구현, 동적 기억장소 관리, Garbage Collection, 해시 테이블 충돌 시 해결방법 중 chaning
Hash Table
- 키와 데이터를 가진 맵 형식의 자료구조
- 값을 저장하기 위한 인덱스를 키와 해시함수를 이용
- 특징
- 시간복잡도는 해싱을 고려하지 않기 때문에 저장, 삭제, 검색은 복잡도가 O(1)
- 단, 해시충돌이 일어나는 경우는 저장소의 모든 인덱스(색인)(저장) 혹은 데이터(삭제, 검색)를 해봐야 하기 때문에 O(n)
- 대표적인 해시 알고리즘: Division Method, Digit Folding, Mutiplication Method, universal Hashing
- 해시 충돌 해결 방법
- 개방 연결법
- 분리 연결법
- 저장소 확장
- ex) 주소록, 블록체인, JS실행 엔진(크롬, V8), Domain => DNS 변환
- 자바에서 제공
Heap Tree
- 일반적인 트리 구조와 다르게, 우선 순위에 따라서 빠르게 자료를 검색할 수 있는 구조
- 응급 환자가 들어오면 순서가 바뀌는 경우
- 느슨한 정렬구조: 형제 노드끼리는 크기가 위치에 반영되지 않음
- 특징
- 완전 이진 트리(왼쪽 자식 노드부터 채움)
- 중복 값 저장
- 최대 힙/ 최소 힙
- 배열로 구현 가능
- 구현 코드https://www.javatpoint.com/heap-implementation-in-java
Heap implementation in Java - Javatpoint
Heap implementation in Java with java tutorial, features, history, variables, object, programs, operators, oops concept, array, string, map, math, methods, examples etc.
www.javatpoint.com
- ex)
- 우선순위 큐(priority queue)
- 우선 순위 큐는 자바에서 제공
- 힙 정렬
Heap Sort - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
Search Algorithm
Tree traversal
전위순회, 중위순회, 후위순회
BFS/DFS
너비우선: 최단경로
깊이우선: 스택, 재귀로 구현, 경로에 장애물이 있는 경우, 깊이가 다른 경우, 그래프가 클수록 유리, 순열, 조합문제
참고
1) 트리에 대해서
Introduction to Tree - Data Structure and Algorithm Tutorials - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
2) DFS/BFS 선택 기준
PS를 하며 느끼는 DFS와 BFS 선택의 기준
알고리즘 문제 풀이를 하며 여러 사람들과 이야기를 나눈적이 있다. 그 중 알고리즘 문제 풀이를 막 시작한 초급자분들이 가장 헷갈려하는 부분이 그래프탐색 문제를 만났을때, 언제 DFS를 선택
foameraserblue.tistory.com
3) 우선순위 큐의 데이터 삽입/삭제 과정
자료구조 - 우선순위 큐(Priority Queue)와 힙(heap)
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
'부트캠프 기록 > Serction2' 카테고리의 다른 글
[데이터베이스] SQL (0) | 2022.10.06 |
---|---|
[네트워크]HTTP통신 (0) | 2022.10.05 |
[네트워크] 웹 애플리케이션 작동원리 (0) | 2022.10.01 |
[JAVA] Collectors 와 Collections 차이 (0) | 2022.09.28 |
[자료구조/알고리즘] 재귀 (0) | 2022.09.20 |