전체 글 159

[알고리즘] 정렬 1

정렬 가지고 있는 자료를 사용하기 편하도록 정렬하려면 어떤 방법이 있을까? 이때 고민해 볼 수 있는 것이 정렬 알고리즘이다. 우선 정렬 Sort이란 순서 없이 배열된 자료를 작은 것부터 또는 큰 것부터 오름차순, 내림차순으로 재배열(재배치)하는 것이다. 여기서 재배열을 하는 기준을 어떻게 정하나인데, 가게를 예를 들면 유통기한 순으로 물건을 다시 진열하거나, 우리가 살면서 해야 할 일을 적을 때도 마찬가지이다. 이처럼 일상생활에서 자주 사용하는데.... 자료를 정렬하는데 사용하는 기준이 되는 특정 값(유통기한, 날짜 등)을 켜라고 한다. 따라서 우리는 그 키를 기준으로 정렬하면 크기가 키가 된다. 정렬 방식의 분류 기준 정렬 방식 설명 실행 방법 비교식 정렬 Comparative Sort 비교할 각 키값..

알고리즘 2023.12.08

[알고리즘] 그래프 8 - 최단 경로(플로이드)

최단 경로 플로이드 Floyd 최단 경로 알고리즘은 모든 정점 사이의 최단 경로 All to Shortest Path를 구하고 최단 경로로 만드는 알고리즘이다. 1. 초기 2차원 배열에 각 정점에서의 거리를 2차원 배열로 초깃값으로 집어넣는다. 2. 여기서부터 adj [v][w]=MIN(adj [v][w], adj [v][k]+adj [k][w])라는 식을 사용한다. 정점 0부터 k까지의 정점만을 이용한 정점 v에서 정점 w까지의 최단 경로를 의미하는데 정점 0부터 정점 k -1까지의 정점을 고려한 최단 거리 adj을 구한 상태에서 다음 정점 k를 정할 때, adj [v][w]와 adj [v][k] + adj [k][w] 중에서 작은 값을 최단 경로로 정한다. #include #define INF 100..

알고리즘 2023.12.08

[알고리즘] 그래프 7 - 최단 경로(다익스트라)

최단 경로 최단 경로는 신장 트리가 아닌 가중치 그래프, 즉 네트워크에서 정점 u와 정점 v를 연결하는 경로 중에서 가중치의 합이 최소인 경로이다. 예를 들어 지하철 노선 어플을 보면 내가 원하는 출발지에서 목적지까지의 최단 경로를 구하는 어플, 그리고 내비게이션이 있다. 이러한 최단 경로를 구하는 가중치 그래프에서는 가중치 인접 행렬 Weight Adjacent Matrix를 사용하는데, 이 가중치 인접 행렬은 2차원 배열이며, 두 정점 사이에 간선이 없으면 0이 아니라 무한∽이라는 값이 저장되어 있다고 가정하고 사용한다. 그렇게 최단 경로를 찾는 방법에는 하나의 시작 정점에서 다른 정점까지의 최단 경로를 구하는 다익스트라 Dijkstra 최단 경로 알고리즘과 모든 정점에서 다른 모든 정점까지의 최단 ..

알고리즘 2023.12.07

[알고리즘] 그래프 6 - 신장 트리와 최소 비용 신장 트리

목차 크루스칼 알고리즘 2 이 알고리즘은 가중치가 낮은 간선을 삽입하면서 최소 비용 신장 트리를 만들어가는 알고리즘이다. 크루스칼 알고리즘 2를 적용한 최소 비용 신장트리를 만들기 위해서는 밑에 4가지의 순서를 지키며 트리를 생성하면 되는데... 그래프의 모든 간선을 가중치에 따라 오름차순으로 정렬한다. 그래프에서 가중치가 가장 낮은 간선을 삽입한다. 단, 이때 정점을 그래프에서 사이클을 형성하는 간선은 삽입할 수 없으므로 그다음으로 가중치가 낮은 간선을 삽입한다. 그래프에 간선이 n-1개 삽입될 때까지 2번 과정을 반복한다. 그래프에 간선이 n-1개가 되면최소 비용 신장 트리가 완성된다. 그렇다 이 순서를 읽어보면 크루스칼 알고리즘 1과 다르게 정점과 간선을 삽입하면서 최소 비용 신장 트리를 만들어가는..

알고리즘 2023.12.07

[알고리즘] 그래프 5 - 신장 트리와 최소 비용 신장 트리

목차 신장트리 그래프의 관점에서 트리를 보면 사이클이 없는 연결 그래프이다. 사이클이란 순환 경로에서 시작 정점과 종료 정점이 동일한 경우를 말한다. 모든 정점이 n개인 무방향 그래프에서 정점이 n개이고 간선이 n-1개인 트리의 형태의 부분 그래프를 신장 트리 Spanning Tree라고 한다. 깊이 우선 탐색을 이용하여 생성된 신장 트리를 깊이 우선 신장 트리(Depth First Spanning Tree)라고하며, 너비 우선 탐색을 이용하여 생성된 신장 트리를 너비 우선 신장트리(Breadth First Spanning Tree)라고 한다. 위의 사진을 보면 알다시피 모든 정점이 무조건 한 번씩 연결이 되어있는데 이것이 바로 간선을 최소로 이용하여 모든 정점을 연결한 신장트리이다. 이렇게 간선을 최소..

알고리즘 2023.12.07

[알고리즘] 그래프 4 - 그래프의 순회(너비 우선 탐색 BFS)

목차 너비 우선 탐색(BFS) 큐를 활용: 너비 우선 탐색은 시작 노드에서 인접한 모든 노드를 먼저 방문한 후, 그 다음 레벨의 노드들을 방문하며, 이를 위해 큐를 사용한다. 노드 방문: 시작 노드에서 인접한 노드를 먼저 모두 방문한 후, 다음 레벨의 노드로 이동하며 방문한 노드는 표시하여 중복 방문을 방지한다. 너비 우선 탐색의 특징: 레벨 단위로 탐색하기 때문에 최단 경로를 찾는데 효과적이며, 큐를 사용하기 때문에 반복문으로 구현하기 용이하다. 즉, 시작 정점에 인접한 정점을 모두 차례로 방훈하고 나서 방문했던 정점을 시작으로 다시 인접한 정점을 차례대로 방문하는 방법이다. 가까운 정점을 먼저 방문하고 난 뒤 멀리 있는 정점을 나중에 방문한다. #pragma once #include #include ..

알고리즘 2023.12.05

[알고리즘] 그래프 3 - 그래프의 순회(깊이 우선 탐색 DFS)

목차 그래프 순회의 개념 한 정점에서 시작하여 그래프에 있는 모든 정점을 한 번씩 방문하여 확인하는 것을 그래프 순회 Graph Traversal 또는 그래프 탐색 Graph Search라고 한다. 깊이 우선 탐색(DFS) 스택 또는 재귀 함수를 활용: 깊이 우선 탐색은 특정 경로를 따라 끝까지 탐색한 후 다른 경로를 탐색하고, 이를 위해 스택을 사용하거나 재귀 함수를 호출하여 구현한다. 노드 방문: 시작 노드에서 출발하여 한 경로를 끝까지 탐색한 후 되돌아와서 다른 경로를 탐색하며, 방문한 노드는 표시하여 중복 방문을 방지한다. 깊이 우선 탐색의 특징: 한 경로를 완전히 탐색하기 때문에 목표 노드가 발견되면 바로 종료할 수 있으며, 특히 트리 구조에서는 재귀를 통해 간단하게 구현이 가능하다. 즉, 시작..

알고리즘 2023.12.05

[알고리즘] 그래프 2 - 그래프의 구현(인접 행렬)

목차 순차 자료구조를 이용한 그래프의 구현 (인접행렬) 그래프에서는 두 정점을 연결한 간선의 상태를 행렬로 저장하기 위해서 정점 수에 대한 정방 행렬을 사용한다. 잠깐!. 정확히 알고 가자. 1. 행렬 (Matrix): 행렬은 숫자들을 직사각형 모양으로 배열한 것이다 다. $m$ X $n$행렬은 $m$개의 행과 $n$개의 열을 가지며, 각 원소는 $[a_{ij}]$로 표기한다. 예를 들어, 다음은 2x3 행렬의 예: \[\begin {bmatrix}1&2&3\\4&5&6\\\end {bmatrix}\] 2. 정방 행렬 (Square Matrix): 정방 행렬은 행과 열의 개수가 같은 행렬을 말한다. $m$ X $n$ 행렬은 $n$개의 행과 $n$개의 열을 가지며, 정방 행렬이라고 부른다. 대각선 상의 원..

알고리즘 2023.12.05

[알고리즘] 그래프 1 - 그래프의 개념

목차 그래프의 개념 그래프는 원소 사이의 다대다 n:n 관계를 표현하는 비선형 자료구조이다. 예를 들어 지하철 노선도나 버스 노선도를 보면 선형 자료구조로는 표현할 수가 없기 때문이다. 그래프는 객체를 나타내는 정점 Vertex와 객체를 연결하는 간선 Edge의 집합으로 구성된다. 그래프 G는 G=(V, E)로 정의하는데, V는 그래프에 있는 정점의 집합을 뜻하고 E는 정점을 연결하는 간선의 집합을 뜻한다. 그래프의 종류 무방향 그래프 무방향 그래프 Undirected Graph는 두 정점을 연결하는 간선에 방향이 없는 그래프인데, 무방향 그래프에서 정점 Va와 Vb를 연결하는 간선을 (Va, Vb)로 표현하고 각 정점에서는 (Va, Vb) 또는 (Vb, Va)처럼 간선을 나타낸다. 위에 사진이 무방향 ..

알고리즘 2023.12.05

OpenGl을 이용한 간단한 태양계 구축 프로젝트(3)

2023.11.18 - [C\C++/OpenGL] - C/C++ OpenGl을 이용한 간단한 태양계 구축 프로젝트(2) C/C++ OpenGl을 이용한 간단한 태양계 구축 프로젝트(2) 2023.11.08 - [C\C++/OpenGL] - C/C++ OpenGl을 이용한 간단한 태양계 구축 프로젝트(1) C/C++ OpenGl을 이용한 간단한 태양계 구축 프로젝트(1) Windows MFC (Microsoft Foundation Classes)를 사용하여 OpenGL을 초기화하고 간 sun-dori.tistory.com 목차 OpenGL 재질효과 OpenGL에서 재질(Material)은 물체가 빛과 상호 작용하는 방식을 제어하는 데 사용되는 속성의 힙합이먀, 재질은 주변광, 확산광, 반사광 등을 포함한 ..

C\C++/OpenGL 2023.11.24