본문 바로가기

Algorithm14

[Java] 순열 Permutation 순열 순열이란 n 개의 값 중에서 r 개의 숫자를 모든 순서대로 뽑는 경우를 말한다. 수학에서 순열은 서로 다른 n개의 원소에서 r개를 뽑아한 줄로 세우는 경우의 수이다. 순열의 개수는 n의 계승 n! 와 같다. 예를 들어 [1, 2, 3] 배열에서 2개의 숫자를 뽑는 순열은 [1, 2] [1, 3] [2, 1] [2, 3] [3, 1] [3, 2] 참고 순열이라는 것은 주어진 수열에서 순서에 따라 결과가 달라지는 방식을 순열이라고 한다. 말 그대로, 순서가 존재하는 열이라는 것이다. 즉 순열에서 { 1, 2, 3 } 과 { 1, 3, 2 } , { 2, 1, 3 } 등.. 모두 다른 결과를 가져온다. 순서가 다르기 때문이다. 조합은 순서가 상관이 없는 모임을 의미한다. 순서가 상관없기 때문에 { 1, .. 2020. 5. 12.
[Java] BFS 너비 우선 탐색 - 인접리스트 / 인접행렬로 구현 BFS 너비 우선 탐색(Breadth First Search) "꼼꼼하게 좌우를 살피며 다니자"와 같이 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 알고리즘이다. 시작 정점을 지나고 나면 깊이가 1인 모든 정점을 방문하고, 그다음에는 깊이가 2인 모든 정점을 방문한다. 이런 식으로 한 단계씩 깊이를 더해가며 해당 깊이에 있는 모든 정점들을 방문해 나가다가 나중에는 더 이상 방문할 곳이 없을 때 탐색을 종료한다. * 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 * 사용하는 경우: 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 선택한다. BFS의 특징 BFS는 시작 정점으로부터 거리가 가까운 정점의 순서.. 2020. 5. 9.
[Java] Graph 그래프 / 인접 행렬 / 인접 리스트 뇌를 자극하는 알고리즘 (박상현 저)를 참고해 정리한 내용입니다. Graph란? 객체 사이의 연결 관계를 표현할 수 있는 자료구조 정점의 집합과 간선의 집합의 결합 즉, 정점과 간선으로 이루어진 자료구조의 일종 G : 그래프 Vertex : = 노드(node) 또는 정점의 집합 Edge : 간선의 집합 (= link) 라고 했을 때, G = (V, E)이다. 간선으로 연결되어 있는 두 정점을 가리켜 서로 '인접(adjacent)' 또는 이웃 관계에 있다고 말한다. (A, B), (A, D), (A, E), (B, C), (B, E), (C, D)가 서로 이웃 관계에 있다. 이렇게 간선을 통해 서로 이웃이 된 각 정점은 그래프 안에서의 길을 형성하기도 한다. 예를 들어 정점 A에서 정점 C까지는 A, B,.. 2020. 5. 9.
[Java] DFS 깊이 우선 탐색 - 인접리스트 / 인접행렬로 구현 DFS 깊이 우선 탐색 (Depth Fisrt Search) "더 나아갈 길이 보이지 않을 때까지 깊이 들어간다"를 원칙으로 그래프 내의 정점을 방문하는 알고리즘이다. 미로 찾기처럼 그래프의 정점을 타고 깊이 들어가다가 더 이상 방문해왔던 정점 말고는 다른 이웃을 갖고 있지 않은 정점을 만나면 뒤로 돌아와 다른 경로로 뻗어있는 정점을 타고 방문을 재개하는 방식으로 동작한다. * 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 * 사용하는 경우: 모든 노드를 방문하고자 하는 경우에 이 방법을 선택한다. (완전 탐색 알고리즘에 자주 이용됨) DFS의 특징 자기 자신을 호출하는 순환 알고리즘의 형태 트리 순회(전위, 중위, 후위 순회.. 2020. 4. 25.
반응형