본문 바로가기

DataStructure

(5)
[DataStructure] 5. Red-Black Tree 5. Red- Black Tree트리 자료구조 중 Red- Black Tree에 대해서 알아본다. RBT는 BST를 기반으로하는 트리 형식의 자료구조이다. BST(Binary Search Tree)효율적인 탐색을 위해서는 어떻게 찾을까만 고민해서는 안된다. 그보다는 효율적인 탐색을 위한 저장방법이 무엇일까를 고민해야 한다. 이진 탐색 트리는 이진 트리의 일종이다. 단 이진 탐색 트리에는 데이터를 저장하는 규칙이 있다. 그리고 그 규칙은 특정 데이터의 위치를 찾는데 사용할 수 있다. 규칙 1. 이진 탐색 트리의 노드에 저장된 키는 유일하다. 규칙 2. 루트 노드의 키가 왼쪽 서브 트리를 구성하는 어떠한 노드의 키보다 크다. 규칙 3. 루트 노드의 키가 오른쪽 서브 트리를 구성하는 어떠한 노드의 키보다 작다..
[DataStructure] Graph라는 자료구조에 대해서 정점과 간선의 집합, Graph 그래프 관련 용어 정리Undirected Graph와 Directed Graph(Digraph)말 그대로 정점과 간선의 연결관계에 있어서 방향성이 없는 그래프를 Undirected Graph라 하고, 간선에 방향성이 포함되어 있는 그래프를 Directed Graph라고 한다. Directed Graph(Digraph) V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u에서 vertex v로 가는 edge Undirected Graph V = {1, 2, 3, 4, 5, 6}E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vert..
[DataStructure] hashcode와 HashMap에 대해서 Hash Code와 HashMapHashMap는 내부적으로 배열을 사용하여 데이터를 저장하기 때문에 빠른 검색 속도를 갖는다. 특정한 값을 Searching 하는데 데이터 고유의 인덱스로 접근하게 되므로 Time Complexity가 O(1)이 되는 것이다. 그리고 데이터의 삽입과 삭제 시 기존 데이터를 밀어내거나 다시 채우는 작업이 필요없도록 '특별한 알고리즘'을 이용하여 데이터와 연관된 고유한 숫자를 만들어 낸 뒤 이를 인덱스로 사용한다. 특정 데이터가 저장되는 인덱스는 그 데이터만의 고유한 위치이기 때문에 삽입 시 다른 데이터의 사이에 끼어들거나 삭제 시 다른 데이터로 채울 필요가 없으므로 추가적인 데이터의 이동이 없다. `특별한 알고리즘`이란 것을 통해 고유한 인덱스 값을 설정하는 것이 중요해보인..
[DataStructure] 2. 자료구조 기본 - Heap(Max heap, Min heap)에 대해서 Heap 자료구조자료구조의 일종으로 Tree의 형식을 하고 있으며, Tree 중에서도 배열에 기반한 Complete Binary Tree 이다. 배열에 트리의 값들을 넣어줄 때, 0번째는 건너뛰고 1부터 루트노드가 시작된다. 이는 노드의 고유번호 값과 배열의 index를 일치시켜 혼동을 줄이기 위함이다. 힙에는 최소힙(min heap), 최대힙(max heap) 두 종류가 있다. Max Heap이란, 각 노드의 값이 children 의 값보다 크거나 같은 complete binary tree를 말한다. ( min heap은 그 반대이다. ) Max heap에서는 Root node에 있는 값이 제일 크므로, 최대값을 찾는데 소요되는 연산의 time complextiry이 O(1)이다. 그리고 complet..
[DataStructure] 1. 자료구조 기본 - Array, Linked List, Stack, Queue, Tree 1. 자료구조 기본 - 기본적인 자료구조 종류선형 자료 구조Array vs Linked List가장 기본적인 자료구조인 Array 자료구조는, 논리적 저장 순서와 물리적 저장 순서가 일치한다. 따라서 인덱스로 해당 원소에 접근할 수 있다. 그렇기 때문에 찾고자 하는 원소의 인덱스 값을 알고 있으면 Big-O(1)에 해당 원소로 접근할 수 있다. 즉 random access가 가능하다는 장점이 있는 것이다. 하지만 삭제 또는 삽입의 과정에서는 해당 원소에 접근하여 작업을 완료한 뒤, 또 한 가지의 작업을 추가적으로 해줘야 하기 때문에, 시간이 더 걸린다. 만약 배열의 원소 중 어느 원소를 삭제했다고 했을 때, 배열의 연속적인 특징이 깨지게 된다. 따라서 삭제한 원소보다 큰 인덱스를 갖는 원소들을 shift..