Programming/알고리즘 4

[알고리즘] 재귀함수 再歸函數, recursion (JAVA)

재귀함수?정의자기 자신을 호출하는 함수.정의 단계에서 자신을 재참조하는 함수를 뜻한다. 어떤 사건이 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적(recursive)이라고 한다.  재귀함수의 기본 구조기본 조건 (Base Case)재귀 호출을 멈추는 조건.이 조건을 만나면 더 이상 자기 자신을 호출하지 않는다.재귀 호출 (Recursive Call)함수가 자기 자신을 호출하는 부분.일반적으로, 문제를 조금 더 작은 부분으로 쪼개서 호출한다.  예제 1 : 팩토리얼 계산하기팩토리얼의 정의n! = n * (n-1)!자바 코드로 구현해보기public class Factorial { public int factorial(int n) { if(n == 0 || n == 1) return 1;..

[수학] 소수 (Prime) 판별하기 - 제곱근 활용

소수 (Prime) 판별하기 - 제곱근 활용 소수란, 1과 자기 자신만을 약수로 가지는 수를 뜻한다. 예를 들어, 6은 1, 2, 3, 6을 약수로 가지기 때문에 소수가 아니지만,7은 1과 7(자기 자신) 을 약수로 가지기 때문에 소수이다.  주어진 수 n이 소수인지 아닌지는 어떻게 판별할 수 있을까?n을 2부터 (n-1)까지의 수로 나누어서, 나누어 떨어지는 수가 없으면 그 수는 소수일거다.하지만 n이 소수인 동시에 너무 큰 숫자라면, 하나하나 나누어 보기에는 매우 비효율적이다.그렇기 때문에, n의 제곱근을 이용하면 매우 효율적이게 값을 구할 수 있다. n의 제곱근 m을 구한다.n을 2부터 m까지 차례로 나누어 보았을 때, 나누어 떨어지는 수가 있다면 그 수는 소수가 아니다.반대로 m까지 나누어보았음에..

[그래프 탐색] DFS (Depth First Search, 깊이 우선 탐색)

개념정의하나의 정점에서 시작해 모든 정점들을 한 번씩 방문하는 작업종류DFS (Depth First Search, 깊이 우선 탐색)루트 노드에서 시작해서 가장 깊은 곳까지 탐색한 후, 다음 분기로 넘어간다.재귀함수 또는 Stack으로 구현 가능하다.BFS (Breadth First Search, 너비 우선 탐색)루트 노드에서 가장 가까운 정점들을 차례로 방문한 뒤,방문했던 정점들과 가장 가까운 정점들을 또 다시 탐색하는 방식.  DFS (Depth First Search, 깊이 우선 탐색) >시간 복잡도노드의 개수를 V, 간선의 개수를 E라고 할 때, 인접 행렬에서의 시간 복잡도 : O(V²)인접 리스트에서의 시간 복잡도 : O(V+E)장점현재 경로 상의 노드들만 기억하면 되므로 저장공간이 비교적 적게 ..

[페이지 교체 알고리즘] LRU (Least Recently Used) 캐시 알고리즘

개념 정의 페이징 기법으로 메모리를 관리하는 운영체제에서, 페이지 부재가 발생해 새로운 페이지를 할당하기 위해 현재 할당된 페이지 중 어느 것과 교체할 지를 결정하는 방법 종류 FIFO (First In First Out) 새 페이지가 추가될 때, 현재 주기억장치에 들어가있는 페이지 중 가장 먼저 들어가있던 페이지를 교체한다. LFU (Least Frequently Used) 새 페이지가 추가될 때, 가장 적은 참조횟수를 갖는 페이지를 교체한다. 가장 적은 참조횟수를 가진 페이지가 여러 개일 경우, LRU 기법에 따라 페이지를 교체한다. LRU (Least Recently Used) 새 페이지가 추가될 때, 가장 오랫동안 참조되지 않은 페이지를 교체한다. < LRU (Leas..