합병정렬 과 쾌속정렬 비교 - 합병정렬은 최악의 경우에도 O(nlogn)을 보장하지만 퀵소트 즉, 쾌속정렬은 최악의 경우 O(N^2)이 되기도 합니다. 그런데 퀵소트가 빠른 이유는 임시저장공간이 필요한 합병정렬과 달리 임시저장공간이 필요없어서 옮기고 가져오는데에 시간이 필요하지 않기 때문에 평균적으로 쾌속정렬이 빠릅니다.
빅오, 빅쎄타, 빅오메가 들의 차이를 설명하세요.
빅오 계산법에 대해 설명하시오
퀵 정렬 방법에 대해 설명하시오
여러 정렬 방법중 가장 효율적인 정렬은 무엇인가?
답 최선의 경우 평균적인 경우 최악의 경우
삽입정렬 | O(N) | O(N^2) | O(N^2) |
---|---|---|---|
퀵 정렬 | O(NlogN) | O(NlogN) | O(N^2) |
퀵정렬. 아래의 표와 같이 평균적인 경우를 고려했을때 가장 시간 복잡도가 낮음
DFS, BFS를 사용하기 적합한 상황은 언제일까?
최소 신장 트리는 무엇인가?
DFS 와 BFS의 차이점에 대해 설명하시오
DFS : 모든 노드를 방문하고자 할 때 사용하는 탐색 알고리즘
순환 알고리즘으로 동작한다.
BFS : 두 노드 사이의 최단 경로나 임의의 경로를 찾고 싶을 때 사용하는 탐색 알고리즘
재귀적으로 동작하지 않으며 큐를 사용한다.(FIFO)
그리디 알고리즘의 장점과 단점에 대해 설명하시오.
MST의 특징은 무엇인가요?
DFS가 BFS보다 더 사용하기에 적합할 때는 언제인가?
DFS는 예를 들어, a에서 b까지 갈 때 조건을 검사하거나 특징을 기억해둘 수 있기 때문에 경로의 특징을 기억해야 하는 경우에 경로의 특징을 가지지 못하는 BFS보다 사용하기에 적합하다.
Greedy알고리즘으로 문제를 해결할 수 없는 경우에는 어떻게 풀어야할까?
그리디 알고리즘은 현재 최적의 답안을 찾는 방법이므로 최적의 답안을 찾을 수 없다면 모든 경우의 수를 파악해서 풀어야 한다. 따라서 다이나믹 프로그래밍으로 해결해야 한다.
DFS와 BFS 각각의 시간 복잡도는 어떻게 되나요?
DFS (Depth-First Search)와 BFS (Breadth-First Search) 각각의 시간 복잡도는 그래프의 크기를 나타내는 노드 수와 간선 수에 따라 달라집니다.
DFS의 시간 복잡도는 O(V+E) 입니다. 여기서 V는 그래프의 정점 수이고, E는 그래프의 간선 수입니다. DFS는 한 정점에서 시작하여 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색합니다. 따라서 각 정점과 간선은 최대 한 번씩 방문하므로, 시간 복잡도는 O(V+E)입니다.
BFS의 시간 복잡도도 O(V+E) 입니다. BFS는 시작 정점으로부터 모든 정점을 탐색하고, 각 정점을 방문할 때마다 해당 정점과 연결된 모든 간선을 검사합니다. 따라서 각 정점과 간선은 최대 한 번씩 방문하므로, 시간 복잡도는 DFS와 동일한 O(V+E)입니다.
최소신장트리를 찾는 알고리즘을 구현할 때, 어떤 자료구조를 사용하는 것이 효율적인가요?
BFS와 DFS를 쓰기 적절한 경우는?
최소신장트리가 쓰이는 경우는?
부정확한 답이 나올 수도 있는 그리디 알고리즘을 사용하는 경우?
A. 최적의 답이 아니더라도 근사치를 구하는 것이 목표인 경우, 속도가 빠른 그리디 알고리즘을 사용하는 것이 만족할 만한 결과를 얻어낼 수 있어 사용된다.
크루스칼 알고리즘과 프림 알고리즘의 차이점?
크루스칼 알고리즘은 가중치가 가장 작은 간선부터 선택한다면, 프림 알고리즘은 특정 정점에서 시작해서 해당 정점에 연결된 가장 작은 가중치를 선택한다.
깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 활용한 문제
미로 찾기 등 최단거리 문제의 경우, BFS가 유리. 깊이 우선 탐색으로 경로를 검색할 경우 처음으로 발견되는 해답이 최단거리가 아닐 수 있지만, 너비 우선 탐색으로 현재 노드에서 가까운 곳부터 찾기 때문에경로를 탐색 시 먼저 찾아지는 해답이 곧 최단거리기 때문입니다.
검색 대상 그래프가 정말 크다면 DFS를 고려하지만 검색대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS를 사용합니다.