인접 리스트는 특정 노드에서 다른 노드로 이동하는 간선을 검색함에 있어 인접행렬에 비해 느리다는 단점이 있다. 반면에 인접 행렬을 사용하면 검색에서 이점을 가질 수 있지만 더 많은 메모리를 사용해야한다는 점을 고려해야한다. 하지만 무방향 그래프의 경우 서로 연결된 노드는 양방향성을 가지기 때문에 인접 행렬이 정대각선을 기준으로 대칭을 이루게 된다. 이 특징을 활용해서 정대각선 이상의 값만 저장하는 방식을 통해서 메모리 절약이 가능하다.
방향성이 있는 그래프의 꼭짓점들(Vertex)을 변의 방향을 거스르지 않도록 나열하는 것을 의미한다.
위상 정렬이 가능하기 위한 조건 ( a.k.a DAG: Directed Acyclic Graph )
위상 정렬의 수행과정
https://m.blog.naver.com/ndb796/221236874984
>>> arr = [ 1, 2, 3, 4 ]
>>> print(*arr)
1 2 3 4
>>> print(*rows, sep='\n')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
오른쪽, 왼쪽 자식만 갖는 트리를 이진 트리라고 한다. 이떄 자식의 수는 0, 1, 2 모두 가능하다.
그리고 왼쪽, 오른쪽 서브 트리는 다음과 같은 조건을 만족해야 한다.
루트부터 아래쪽 레벨로 노드가 가득 차 있고, 같은 레벨 안에서 왼쪽부터 오른쪽으로 채워져있는 트리를 완전 이진트리라고 한다.
데이터 베이스와 파일 시스템에서 사용되는 트리 자료구조의 일종. 이진 트리를 확장해서 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 구조를 말한다.
B-Tree는 self balanced tree 중 하나인데 이 balanced 상태를 유지하기 위한 몇가지 규칙이 존재한다.
검색 과정을 1차로 수행한 후, 노드를 삽입하고, balanced 한 상태가 될때까지 노드를 이동한다.
이때 검색 과정은 하향식이고, 삽입하는 과정에서 트리는 상향식으로 조작된다.
상향식으로 조작되는다는 말은 삽입되면서 최대 적재량을 초과했을때 Key가 이동하게 되면 아래로 내려가는 일이 없고 모두 위쪽 노드를 향해서 이동하게 된다는 뜻이다.
삭제할 키를 검색한 후, 해당 키를 삭제한다. 이때 트리의 불균형이 있는 경우 앞서 보았던 B-Tree의 규칙에 따라 균형을 조절해주어야한다.
https://velog.io/@emplam27/자료구조-그림으로-알아보는-B-Tree
https://code-lab1.tistory.com/217
다이나믹 프로그래밍의 방식중 하나로 최단 경로 탐색 알고리즘이다. 특정 정점에서 다른 모든 정점으로 가는 최단 경로를 알 수 있다. 이때 음의 간선에 대해서 고려하지 않아야 한다. 이러한 특징 때문에 현실 문제에서 많이 적용되고 있는 알고리즘이다.
다익스트라 알고리즘이 다이나믹 프로그래밍에 들어가는 이유는 최단 거리는 여러개의 최단 거리로 이루어져 있기 때문에 ‘큰 문제를 작은 문제로 나누어 해결하자’라는 다이나믹 프로그래밍의 형태를 띈다.
도착 노드에 도달할 때 까지 1 ~ 3 과정을 반복하여 수행한다.