Knapsack Cryptography
Knapsack Cryptography는 배낭문제(Knapsack Problem)에서 비롯된 공개키 암호화 방법이다. Knapsack Problem에서 Superincreasing Sequence의 경우 다항 시간 내에 해를 구할 수 있지만, General Sequence인 경우 NP-문제가 된다. 수신자(private key를 갖는 쪽)는 다음을 미리 계산하고, H를 공개한다. S = [1, 3, 7, 13, 26, 65, 119, 267] n = 523 (bigger than sum of S) w = 467 (coprime with 523) wi = 28 (467 * 28 % 523 = 1) H = [467, 355, 131, 318, 113, 21, 135, 215] (S * w % n) 여기서 S..
하노이 타워 알고리즘의 시간복잡도
하노이 타워에서 원판 이동의 최소 횟수 및 그 순서를 찾아내는 코드는 아래와 같이 간단히 작성된다. (C언어로 작성됨) void move(int from, int to) { printf("move from %d to %d\n", from, to); } void hanoi(int n, int from, int by, int to) { if (n == 1) move(from, to); else { hanoi(n - 1, from, to, by); move(from, to); hanoi(n - 1, by, from, to); } } 위 코드에 따르면, hanoi함수의 시간복잡도 f(n)은 다음과 같이 재귀적으로 풀이된다. (여기서 f(1) = 1 이라 하자) f(n) = 2f(n - 1) + 1 = 4f(n ..