본문 바로가기

전체 글

(694)
stack, queue reverse [1. 개요]queue 를 reverse 해야 할 때, 주의 할 점(?)[2. 잘못된 구현]for (int i=1; iqueue 에 저장된 순서를 바꿔야 할 때,q: [1, 2, 3, 4, 5]expected: [5, 4, 3, 2, 1]result : [5, 1, 2, 3, 4]당시에 뭔가 착각했었음,[3. 맞는 구현?]while (q.size() > 0) { st.push(q.front()); q.pop();}while (st.size() > 0) { q.push(st.top()); s.pop();} 큐의 경우, 스택을 이용하도록 하고,스택은, 큐를 이용하여 뒤집을 수 있도록 한다.
중복 된 숫자 개수 세기 [1. 개요]어떤 배열에서 중복 된 숫자의 개수를 세야 할 때,재귀로 구현했을 때 간과할 수 있는 오류(?) 등을 정리[2. 재귀적인 방법]fn _solve(input: &Vec, i: usize) -> i32 { if i >= input.len() { return 0; } let mut ret = 0; for j in i+1..input.len() { if input[i] == input[j] { ret += 1; } } return ret + _solve(&input, i+1);} 아래는 위 rust 함수에 입력과 출력을 정리한 것이다.입력출력[7, 7, 7]3[6, 5, 4]0[6, 2, 6] 1 [7, 7, ..
farthest insertion [1. 개요]TSP 에서 N (노드) 개수가 커질 수록 완전탐색으로는 현실적인 시간 안에서 해결이 불가능 하다.따라서 최적해를 구하기 위한 휴리스틱 알고리즘 중 하나.Nearest insertionCheapest insertion등 이 더 있음.farthest insertion 알고리즘은 기본적으로 가장 멀리 있는 방문지를 먼저 선택하고,이 방문지 사이에 그 다음으로 멀리 있는 방문지를 삽입 함 으로서 전체 방문 순서를 결정한다. 물론, best solution 이 아닐 수 있다.그러나, 현실적인 시간 안에서 optimal solution 을 낼 수 있는 방법 중 하나이다.[2. 알고리즘]일단, 모든 정점 간에 소요되는 비용이 있는 테이블을 D 라 정의하고,D[S][T] 는 S->T 로 가는 비용이라 하..