[세호/week6] 그래프의 개념과 정의, 탐색 방법
그래프 그래프는 유한하고, 하나 이상의 원소를 갖는 Vertex 집합과 Vertex의 부분집합의 순서있는 쌍으로 이루어진 Edge의 집합으로 이루어진다. Edge는 Vertex의 쌍 (v1, v2)와 같이 나타내고, 방향그래프에서 순서는 유의미하다 헷갈리는 그래프 관련 ...
트리는 노드
로 이루어진 자료 구조
트리는 노드(node)
들과 노드들을 연결하는 간선(edge)
로 구성되어있다.
class Node{
public String name;
public Node[] children;
}
비선형
자료구조로 계층적 관계를 표현한다. ex) 디렉터리구조, 조직도최소 연결 트리
라고도 불린다.계층 모델
이다.N-1
개의 간선(edge)를 가진다.Pre-order
, In-order
, Post-order
로 이루어진다. 이 세가지 모두 DFS/BFS 안에 있다.순회는 재귀(Recursion)으로 구현한다!!
void preOrderTraversal(TreeNode node){
if(node != null){
visit(node);
preOrderTraversal(node.left);
preOrderTraversal(node.right);
}
}
void inOrderTraversal(TreeNode node){
if(node!=null){
inOrderTraversal(node.left);
visit(node);
inOrderTraversal(node.right);
}
}
void postOrderTraversal(TreeNode node){
if(node != null){
postOrderTraversal(node.left);
postOrderTraversal(node.right);
visit(node);
}
}
기본적으로 트리는 그래프의 한 종류이므로 구현 방법(인접 리스트 또는 인접 배열)으로 구현할 수 있다.
ArrayList<ArrayList> list = new ArrayList<>();
class Node {int num, dist; //노드 번호, 거리}
정의ArrayList[] list = new ArrayList[정점의 수 + 1];
구분 | 그래프 | 트리 |
---|---|---|
정의 | 노드(node)와 그 노드를 연결하는 간선(edge)를 하나로 모아높은 자료 구조 | 그래프의 한 종류. DAG(Directed Acylic Graph, 방향성이 있는 비순환 그래프)의 한 종류 |
방향성 | 방향 그래프(Directed), 무방향 그래프(Undirected) 모두 존재함. | 방향 그래프(Directed Graph) |
사이클 | 사이클(cycle) 가능 </br> 자체 간선(self loop) 가능 </br> 순환 그래프(cyclic), 비순환 그래프 (acyclic) 모두 존재. | 사이클 불가능 </br> 자체 간선도 불가능 </br> 비순환 그래프 |
루트 노드 | 루트 노드의 개념이 없음. | 한 개의 루트 노드만이 존재. </br> 모든 자식 노드는 한 개의 부모 노드만을 가짐. |
부모 - 자식 | 부모 - 자식의 개념이 없음. | 부모-자식 관계. </br> top-bottom 또는 Bottom-up 으로 이루어짐. |
모델 | 네트워크 모델 | 계층 모델 |
순회 | DFS, BFS | DFS, BFS 안의 Pre-, In-, Post- Order |
간선의 수 | 그래프에 따라 간선의 수가 다름. </br> 간선이 없을 수도 있음. | 노드가 N인 트리는 항상 N-1의 간선을 가짐. |
경로 | - | 임의의 두 노드간의 경로는 유일 |
예시 및 종류 | 지도, 지하철 노선도의 최단 경로, 전기 회로의 소자들, 도로(교차점과 일방 통행길), 선수과목 | 이진트리, 이진 탐색 트리 </br> 균형 트리(AVL 트리, red-block 트리), </br> 이진 힙(최대 힙, 최소 힙) 등 |
그래프 그래프는 유한하고, 하나 이상의 원소를 갖는 Vertex 집합과 Vertex의 부분집합의 순서있는 쌍으로 이루어진 Edge의 집합으로 이루어진다. Edge는 Vertex의 쌍 (v1, v2)와 같이 나타내고, 방향그래프에서 순서는 유의미하다 헷갈리는 그래프 관련 ...
그래프(Graph)의 개념 단순히 노드(N, node)와 그 노드를 연결하는 간선(E, edge)을 하나로 모아 놓은 자료 구조
트리의 개념
트리의 구현과 순회
자료구조란? 자료구조(data structure)는 전산학에서 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다.
동적 계획법
동적 계획법 - Dynamic Programming ; DP
분할 정복이란 문제를 둘 이상의 부분으로 나누어, 부분 문제에 대한 답을 재귀 호출을 이용해 계산하는 알고리즘 디자인. 분할 정복을 적용하기 위해서는 .. 문제를 둘 이상의 부분 문제로 나누는 자연스러운 방법이 있어야하고 부분 분제의 답을 조...
분할 정복(Divide and Conquer)이란?
분할 정복 이란? 분할정복 알고리즘은 문제를 나눌 수 없을 떄까지 나누어서 각각을 풀면서 다시 합병하여 문제의 답은 얻는 알고리즘이다.
분할정복이란
모든 경우에 있어서 항상 우월한 성능을 보이는 자료구조와 알고리즘은 없다. 그래서 자료구조와 알고리즘을 분석하고 평가할 수 있어야 한다.
Algorithm Study Week1 일자 : 2019년 10월 7일 월요일 Member : 이세호, 김범철, 이지연, 이지혜 “프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략” 2, 3, 4장 키워드 : 시간복잡도와 Big-O 표기 Algospot 튜토리...
Algorithm Study Week1 일자 : 2019년 10월 7일 월요일 Member : 이세호, 김범철, 이지연, 이지혜 “프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략” 2, 3, 4장 키워드 : 시간복잡도와 Big-O 표기 Algospot 튜토리...