왜.... 오셨나요?

부끄러워요

유니티개발 TIL

4주차 1일 TIL_C#심화(알고리즘)

와피했는데 2025. 7. 21. 20:08

들어가기 앞서

알고리즘은 C#문법의 거의 최종 기법이며 자료구조를 얼마나 잘 사용해서 만들러낸 로직같은 존재


Big-O 표기법


컴퓨터에서 알고리즘과 자료구조의 평가는 시간과 공간 두 자원을 얼마나 소모하는지가 효율성의 중점으로 두는데 그걸 나타내는 표기법인 Big-O표기법을 알아보도록 하자

- 시간복잡도 : 알고리즘의 시간적 자원 소모량
- 공간복잡도 : 알고리즘의 공간적 자원 소모량

 

  대부분 자료구조에 상관되어 표기되는데 (n)일경우는 1<n 이렇게 되는것으로 1보단 효율이 떨어진다

=> 자료구조별 설명은 https://passingwolf.tistory.com/11 해당 블로그의 해당 게시물을 확인해보길 바란다


정렬 알고리즘


선택정렬(Selection Sort)
 선택 정렬은 배열에서 최소값(또는 최대값)을 찾아 맨 앞(또는 맨 뒤)와 교환하는 방법입니다.
 시간 복잡도: 최악의 경우와 평균적인 경우 모두 O(n^2)
 공간 복잡도: O(1) (상수 크기의 추가 공간이 필요하지 않음)

삽입 정렬(Insertion Sort)
삽입 정렬은 정렬되지 않은 부분에서 요소를 가져와 정렬된 부분에 적절한 위치에 삽입하는 방법입니다.
시간 복잡도: 최악의 경우 O(n^2), 하지만 정렬되어 있는 경우에는 O(n)
공간 복잡도: O(1) (상수 크기의 추가 공간이 필요하지 않음)

퀵 정렬 ( Quick Sort )
퀵 정렬은 피벗을 기준으로 작은 요소들은 왼쪽, 큰 요소들은 오른쪽으로 분할하고 이를 재귀적으로 정렬하는 방법입니다.
시간 복잡도: 최악의 경우 O(n^2), 하지만 평균적으로 O(n log n)
공간 복잡도: 평균적으로 O(log n), 최악의 경우 O(n) (재귀 호출에 필요한 스택 공간)

병합 정렬 (Merge Sort)
병합 정렬은 배열을 반으로 나누고, 각 부분을 재귀적으로 정렬한 후, 병합하는 방법입니다.
시간 복잡도: 모든 경우에 대해 O(n log n)
공간 복잡도: O(n) (정렬을 위한 임시 배열이 필요함)

탐색 알고리즘


선형 탐색 (Linear Search)
선형 탐색은 가장 단순한 탐색 알고리즘입니다.
배열의 각 요소를 하나씩 차례대로 검사하여 원하는 항목을 찾습니다.
시간 복잡도: 최악의 경우 O(n)

이진 탐색 (Binary Search)
이진 탐색은 정렬된 배열에서 빠르게 원하는 항목을 찾는 방법입니다.
중간 요소와 찾고자 하는 항목을 비교하여 대상이 중간 요소보다 작으면 왼쪽을, 크면 오른쪽을 탐색합니다.
시간 복잡도: 최악의 경우 O(log n)

 


그래프 (Graph)


깊이 우선 탐색 (Depth-First Search, DFS)
그래프의 분기를 만났을 때 최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 다음 분기를 탐색
스택구조의 함수재귀호출구조로 탐색을 쓴다
시간 복잡도: 최악의 경우 O(V+E) (V는 노드 수, E는 간선 수)

너비 우선 탐색 (Breadth-First Search, BFS)
● 그래프의 분기를 만났을 때 모든 분기를 저장한 뒤, 저장한 분기를 하나씩 탐색
 큐를 이용해 탐색을하는게 대부분이다.
시간 복잡도: 최악의 경우 O(V+E) (V는 노드 수, E는 간선 수)

최단 경로 알고리즘 (Shortest path problem)
특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구함
방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택 후, 해당 노드를 거쳐 다른 노드로 가는 비용 계산

방문(탐색)하지 않은 정점 중 가장 가까운 정점부터 탐색
직접연결된 거리보다 거친거리가 더 짧아진다면 갱신.

A* 알고리즘 (A-star Algorithm)
다익스트라 알고리즘을 확장하여 만든 최단경로 탐색알고리즘
경로 탐색의 우선순위를 두고 유망한 해부터 우선적으로 탐색
목적지의 방향이 정해진 다면 반대방향의 노드들은 나중에 선택하고 목적지 방향 노드(유망한 노드)를 우선선택하는 식으로 탐색을 진행한다.

휴리스틱 (Heuristic)
최상의 경로를 추정하는 순위값, 휴리스틱에 의해 경로탐색 효율이 결정됨
맨해튼 거리 : 직선을 통해 이동하는 거리
유클리드 거리 : 대각선을 통해 이동하는 거리
타일맵용 유클리드 거리 : 직선과 대각선을 통해 이동하는 거리

 

 

 

경로탐색 알고리즘 시뮬레이션

해당사이트에서 탐색알고리즘 관련해서 시뮬레이션 가능함

https://qiao.github.io/PathFinding.js/visual/


마치며.


이번엔 잠시 쉬어가면서 각종 알고리즘에 대해서 알아보도록 했다 

이 다음에는 유니티관련 해서 탐색하고 연구하면서 디자인패턴들에 대해서 알아가보고 싶다