자료구조와 알고리즘/Algorithm 8

[게임 프로그래머 입문 올인원] 모던 C++ : 동적 계획법 (85강)

A. 동적 계획법 (Dynamic Programming) 1. Dynamic Programming a. 동적 계획법이란? 🌟 큰 문제를 작은 하위 문제로 나누어 푸는 알고리즘 설계 기법 최적화 문제나 최단 경로 문제와 같이 큰 문제를 작은 부분으로 나누어 해결해야 하는 경우에 사용 ex) 피보나치 수열 계산, 그래프 최단 경로 찾기, 배낭 문제 b. 동적 계획법의 특징 중복 계산 최소화: 동적 계획법은 작은 하위 문제의 해답을 저장하고 재활용하여 중복 계산을 피해 시간 복잡도를 획기적으로 줄임 최적 부분 구조: 큰 문제의 최적 해결 방법이 작은 하위 문제의 최적 해결 방법으로부터 구성될 수 있어야 함. 이를 통해 작은 하위 문제의 해답을 결합하여 전체 문제의 최적 해답을 찾을 수 있음 상향식 접근법: 하..

[게임 프로그래머 입문 올인원] STL Algorithms : 퀵정렬 (79강)

e. 퀵 정렬 (중요) 1) 퀵 정렬이란? 🌟 평균적으로 매우 빠른 속도를 보이는 정렬 알고리즘 분할 정복(divide and conquer) 기반 재귀적으로 배열을 분할하고 정렬하는 방식으로 동작 👉 분할 정복에 대한 내용은 d. 병합정렬에 작성되어있음 [게임 프로그래머 입문 올인원] STL Algorithms : 기본정렬 (78강) A. STL Algorithms : 기본 정렬 1. 기본 정렬의 기초 a. 기본 정렬이란? 🌟 디폴트 정렬(default sorting), 기본 정렬 알고리즘(default sorting algorithm)을 의미 std::sort 함수를 통해 수행 이 함수는 퀵 정렬(Quick So monamu.tistory.com 💥 최악의 경우 시간 복잡도가 O(n^2)가 될 수있어..

분할 정복(Divide and Conquer) 알고리즘 1 : 이진 탐색 (Binary Search)

A. 분할 정복 알고리즘 1. 이진 탐색 (Binary Search) a. 이진 탐색이란? 🌟 정렬된 배열 또는 리스트에서 특정한 값을 찾는 알고리즘 배열이나 리스트가 정렬되어 있다는 가정하에 작동 b. 진행방식 배열이나 리스트의 중간 요소를 선택하여 찾고자 하는 값과 비교 찾고자 하는 값이 중간 값보다 작으면 중간 값의 왼쪽 반을 대상으로 탐색을 수행 찾고자 하는 값이 중간 값보다 크면 중간 값의 오른쪽 반을 대상으로 탐색을 수행 이렇게 반복하여 탐색 대상이 하나가 될 때까지 이 과정을 반복 + [게임 프로그래머 입문 올인원] 이진 탐색 70강 내용 c. 이진 탐색의 장단점 HTML 삽입 미리보기할 수 없는 소스 1) 선형 탐색에 비해 훨씬 효율적으로 동작 💙 선형 탐색이란? 선형 탐색은 찾고자 하는 ..

[게임 프로그래머 입문 올인원] A* 길찾기 알고리즘 + Maze project (62강)

A. A* 1. A* 알고리즘 a. A*란? 🌟 주어진 시작 지점에서 목표 지점까지의 최적 경로를 찾는 데 사용 그래프 검색 및 경로 탐색 알고리즘의 일종 출구의 개념을 알아 출구로 갈수록 가산점이 있음 그래프 내에서 가장 짧은 경로를 찾는 데 사용되며, 다양한 문제 도메인에서 널리 사용 우선순위 큐를 사용하여 구현 b. A*의 두가지 개념 비용 기능 (Cost function): 각 노드에 대해 시작 지점부터의 비용을 나타내는 함수. 즉, 입구에서부터의 비용 휴리스틱 (Heuristic): 각 노드에서 목표 지점까지의 추정 비용을 나타내는 함수. 휴리스틱은 종종 "거리" 또는 "비용"을 기반으로 함. 즉, 출구에서부터의 비용 c. 알고리즘 이 비용 기능과 휴리스틱을 사용하여 각 노드의 "평가 함수"를 ..

[게임 프로그래머 입문 올인원] 다익스트라 (61강)

A. 다익스트라 1. 다익스트라 알고리즘 a. 다익스트라란? 🌟 그래프 내의 한 출발점으로부터 다른 모든 정점까지의 최단 경로를 찾는 데 사용되는 알고리즘 너비 우선 탐색(BFS)과 유사하지만, 모든 간선의 가중치가 양수일 때에만 사용 가능 각 정점마다 최단 경로를 저장하는 배열을 유지하면서 탐색을 진행 b. 알고리즘 초기에는 출발점에서 각 정점까지의 거리를 무한대로 설정하고, 출발점의 거리를 0으로 설정 그런 다음 출발점부터 시작하여 인접한 정점들로의 거리를 갱신하고, 이러한 과정을 반복하여 최단 경로를 찾음 👉 즉, 발견한 후보중에 베스트 케이스를 골라서 실행 c. 시간복잡도 시간 복잡도는 일반적으로 O(V^2) , V는 정점의 수 우선순위 큐를 사용하여 최소 거리를 갖는 정점을 빠르게 찾을 경우 시..

[게임 프로그래머 입문 올인원] 그래프와 알고리즘 : DFS, BFS (58, 59강)

A. 그래프와 알고리즘 1. DFS a. DFS란? 🌟 Depth First Search, 깊이를 우선으로 파고 들어가는 검색방법 b. DFS 생성하기 1) 인접 리스트 재귀함수로 생성가능 = 스택을 이용 2) 인접 행렬 c. 모든 정점을 둘러보기 위 코드를 실행해보면 5번 정점에 대한 데이터는 얻을 수 없음 (데이터 방향이 단방향) 따라서 모든 정점에 대한 반복문을 돌려주면 모든 정점을 둘러볼 수 있음 d. 시간복잡도(BFS랑 똑같음) 1) 인접 리스트일 경우 모든 정점마다 한번씩 함수에 호출 (v) + 간선의 총 개수 (e) 간선의 총 개수는 e지만 모든 정점들이 연결되어 있으면 자체가 v제곱이 될 수 있음 따라서 간선이 드문드문 연결되어있는 데이터에 적합함!! 2) 인접 행렬일경우 정점마다 한번씩 ..

[게임 프로그래머 입문 올인원] 선형 자료구조 : 시간복잡도 (49강)

A. 시간복잡도 1. BIG-O 표기법 알고리즘의 효율을 객관적으로 측정하기 위해 사용 a. 대략적인 계산 b. BIG-O 표기법의 규칙 c. BIG-O 표기법의 의의 d. Log 함수 ➡ 선형과 비선형 자료구조 공부하면서 나오는 내용! [게임 프로그래머 입문 올인원] 자료구조 : 선형과 비선형 기초내용 (46강) A. 자료구조 1. 선형과 비선형 a. 선형구조 🌟 자료를 순차적으로 나열한 형태 배열 연결리스트 스택 / 큐 👉 대부분의 경우 이 선형구조를 사용함 b. 비선형 구조 🌟 하나의 자료 뒤에 다수의 자 monamu.tistory.com 출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%..

[정렬 알고리즘] 버블 소팅

A. 정렬 알고리즘 1. 버블 소팅 a. 버블 소팅이란? 🌟 서로 인접한 두 원소를 비교하며 리스트나 배열의 요소들을 정렬하는 방법 컴퓨터 과학 및 프로그래밍에서 사용되는 정렬 알고리즘 중 하나 간단하고 이해하기 쉽다 b. 작동방식 1) 비교 단계 리스트 또는 배열을 처음부터 끝까지 반복하면서 인접한 두 요소를 비교 이때, 첫 번째 요소가 두 번째 요소보다 크다면 두 요소를 교체 2) 교체 단계 만약 첫 번째 요소가 두 번째 요소보다 크면 두 요소를 교체 그 결과로 큰 요소가 리스트의 끝쪽으로 "버블"처럼 이동하게 되며, 작은 요소는 앞쪽으로 이동 3) 반복 비교와 교체 단계를 리스트의 첫 번째 요소부터 마지막 요소까지 계속 반복 : 패스 이러한 과정을 하나의 패스(pass)라고 부르며, 패스가 끝나면 ..