목록전체 글 (594)
넘치게 채우기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Mdxyo/btsahAldrXT/Hza5LgGtpVASRsyDa5f9j1/img.png)
그래프 그래프는 객체로 나타내는 정점(vertex)와 객체를 연결하는 간선(edge)의 집합으로 구성된다. G = (V, E) (V = 정점의 집합, E = 간선의 집합) 그래프의 종류 무방향 그래프 두 정점을 연결하는 간선에 방향이 없는 그래프이다. 정점 V1에서 정점 V2로 잇는 것을 표현하는 간선으로 (V1, V2)로 표현한다. (V2, V1)로 표현해도 같은 간선이다. 방향 그래프 두 정점을 연결하는 간선에 방향이 있는 그래프이다. 정점 V1에서 정점 V2로 잇는 것을 표현하는 간선으로 로 표현한다. 이랑은 다른 간선이다. 완전 그래프 각 정점에서 다른 모든 정점을 연결한 그래프이다. 최대로 많은 간선 수를 가지고 있다. 무방향 완전 그래프에서는 정점이 n개일 때, n(n+1)/2개의 간선을 가진..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbay7e/btsafOjnwKE/RqdnIbvRVFSPK0SCf2tHyK/img.png)
B+트리 B+트리는 기존의 B트리에서 확장된 버전이라고 볼 수 있다. 다음과 같은 특성을 가지고 있다: 1. 모든 key와 value를 leaf 노드에 가지고 있다. 2. 모든 leaf 노드가 연결리스트로 이어져 있다. 3. 내부노드는 데이터 참조를 위한 인덱스 역할만 한다. 이러한 특성으로 검색, 삽입, 삭제 모두 빠르게 수행할 수 있다. 대용량 데이터베이스에서의 인덱싱에 사용된다. B+트리의 삽입 삽입과 삭제 과정에서, t = floor(M/2)로 한다. Case 1. 분리되지 않는 경우: 기존 B트리처럼 leaf에 key를 추가하면 된다. Case 2. key값이 overflow되는 경우: 1. overflow된 노드의 중간을 기준으로 2개로 나눈다. 이때, 기준이 되는 곳은 나눈 노드의 오른쪽에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/btnzgO/btsagq95WUI/DiWCfBx9eFUsEhdZaJIgKk/img.png)
B-트리 B-트리는 스스로 균형을 맞추는 자가 균형 이진 트리의 확장판이다. 기존 이진 트리와 다른 점은, 한 노드에서 여러 개의 데이터를 가진다는 점이다. B트리는 탐색, 삽입, 삭제 모두 O(log N)의 시간복잡도를 가진다. 주로 디스크와 같은 물리저장소에서 빠르게 접근하기 위해서 사용된다. B트리는 다음과 같은 특징을 가진다: 1. 노드의 key 수가 k개이면, 노드의 자식은 k+1개여야 한다. 2. 노드의 key는 정렬되어야 한다. 3. 자식 노드의 key는 현재 노드의 key를 기준으로 나뉜다. 4. root 노드는 2개 이상의 자식노드를 가진다.(단, root 노드가 leaf인 경우에는 제외)\ 5. M차 트리일 때, 노드가 가질 수 있는 key값은 floor(M/2)-1부터 M-1개까지 가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/A89wq/btr900j6f8e/rCyX7aatQc2W3Y8tMuvwS0/img.jpg)
힙 힙(Heap)은 다음과 같은 특성을 가지고 있다: 1. 완전 이진 트리이다. 2. (부모 노드의 index) = (자식 노드의 index) // 2 3. (왼쪽 자식의 index) = (부모 노드의 index) * 2 4. (오른쪽 자식의 index) = (부모 노드의 index) *2 +1 5. 루트의 index는 1이다. (구현의 편의상 1부터 시작한다.) 힙은 이러한 특성때문에 보통 배열로 많이 구현한다. 힙의 삽입과 삭제는 O(log N)이 걸리고, 탐색에는 O(N)이 걸린다. 힙은 두 가지의 종류가 있다. 최대 힙과 최소 힙이다. 최대 힙(max heap)은 부모 노드의 key값이 자식 노드의 key 값보다 큰 힙이고, 최소 힙(min heap)은 부모 노드의 key값이 자식 노드의 key ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dcIjsN/btr9OazBkYg/b7AoZ66umTcABjLRuQKkVK/img.png)
트라이란? 트라이는 문자열의 저장과 탐색을 효율적으로 하기 위한 k진 탐색 트리이다. 단어들이 공동으로 가지는 접두사들을 이용해서 문자열을 저장하고 탐색한다. 트라이의 특징 1. 트라이의 루트에는 빈 문자열을 나타내는 노드부터 시작한다. 루트 노드부서 시작해서 문자열의 접두사부터 따라가기 시작한다. 2. 각 노드는 문자와 자식 노드에 대한 포인터를 가지고 있다. 3. 종료 노드는 해당 문자열이 Trie에 존재함을 나타낸다. 4. 문자열 검색은 루트에서 시작하여 해당 문자열의 모든 문자를 따라 이동한다.(문자열의 접두사를 얻을 수 있다) 트라이의 시간복잡도는 O(n)(문자열의 길이만큼) 이다.트라이는 검색이나 사전 등에서 사용된다. 각 노드는 다음 자손의 포인터와 nil을 모두 포함하는 배열을 가지고 있다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bT5Lvb/btr9yw4r2Bj/bsfLLyskY8GSNrPoXQDKh0/img.png)
레드블랙트리의 삭제의 순서는 다음과 같다: 1. 삭제할 노드를 찾는다 2. 삭제할 노드의 자식이 a. 둘인 경우 - 없앨 노드의 오른쪽 서브트리의 가장 왼쪽 노드(또는 왼쪽 서브트리의 가장 오른쪽 노드)로 노드를 바꾸고, 그 잎 노드를 없애준다. b. 하나인 경우 - 삭제되는 노드의 부모노드와 자식노드를 연결시킨다. c. 없는 경우 - 노드를 없애주면 된다. 여기까지는 이진탐색트리의 노드제거와 같다. 3. 삭제되는 노드의 색깔이 빨간색인 경우, 여전히 레드블랙트리의 규칙을 만족하므로 삭제가 완료된다. 그러나, 삭제되는 노드의 색이 검은색인 경우, 그 자리를 대체하는 노드를 검은색으로 칠한다. 여기서, 대체하는 노드 역시 검은색인 경우, 이중 흑색노드가 생긴다. 그럼, 이중 흑색노드를 어떻게 해결하냐? C..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JsKrH/btr9rhtbe2Z/7U47iarYGxFqvLFJ0EgYbK/img.png)
레드블랙트리의 삽입 레드-블랙트리의 삽입에서, 다음과 같은 과정을 거친다: 1.이진 탐색 트리와 같이 노드를 삽입하고, 삽입한 노드의 색은 빨간색으로 한다. 2.트리에 문제가 생기진 않는지 확인해주고, 문제가 있으면 고쳐준다. 레드블랙트리의 삽입에서의 문제 해결은 다음과 같은 경우들이 있다: 삽입되는 노드를 편의상 z라고 가정해보자. 1. z가 루트인 경우 z가 루트인 경우는 쉽다. 루트 노드의 색은 검정색이여야 하므로 빨간색을 검은색으로 칠해주면 된다. 이 경우를 제외한 나머지 경우는 모두 부모 노드가 빨간색이라 Double Red가 생긴 경우이다. 2. z의 삼촌이 빨간색인 경우 z의 삼촌이 빨간색일 땐, 조부모 노드(부모노드의 부모노드)의 색을 빨간색으로 칠해주고, 부모노드와 삼촌노드를 검은색으..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bkxYdc/btrW37QgJlE/MRmR05Rs6nab6ire6RAly1/img.png)
레드-블랙 트리는 스스로 균형을 잡는 자가 균형 이진 탐색 트리(Self - Balancing Binary Search Tree)이다. 레드-블랙 트리에는 다음과 같은 조건들이 있다: 모든 노드는 빨간색 혹은 검은색이다. 루트 노드는 검은색이다. 리프 노드(NIL : Null Leaf)는 검은색이다. 빨간 노드의 자식 노드는 검은색이다(No Double Red, 빨간 노드가 연속으로 있을 수 없다) 어떤 노드에서 리프 노드까지 가는 검은 노드의 개수는 같다. + 레드-블랙 트리에서, 어떤 노드의 두 자녀가 같은 색이면 부모와 두 자녀의 색을 바꿔도 5번 규칙이 성립된다. ++ 추가되는 노드는 무조건 빨간색 노드이다. 5번 규칙을 충족시키기 위해서이다. 레드-블랙 트리의 높이 레드-블랙 트리의 높이 중에는..
vice versa. 지난 글처럼, 라틴어에서 온 표현이다. 뜻은 그 반대(도 마찬가지이다)라는 뜻이다. 순영어로는"the other way round"라고 할 수 있다. vice는 자리, 위치, versa는 돌다라는 뜻을 가지고 있다. 예시: We can't go forward without her and vice versa. 우린 그녀없이는 나아갈 수 없고, 그녀도 마찬가지야.
영문으로 글을 읽다보면, e.g.와 i.e. 둘 다 많이 봤을 것이다. 뜻부터 말하자면, e.g.는 라틴어 "exempli gratia"에서 따온 말로, 영어로는 "for example", "예를 들어서"의 의미를 가진다. i.e.는 라틴어 "id est"의 약자로, 영어로는 "in other words", "that is to say", "다시 말해서"의 의미를 가진다. 둘 다 소문자로 써야 하며, 자모 사이에 점을, 맨 끝에도 점을 찍어줘야 한다. 예시: Recolouring is the change in colour of the node i.e. if it is red then change it to black and vice versa. 리컬러링은 노드의 색을 바꾸는 것이다. 다시 말해서, 만약 ..