본문 바로가기

반응형

학업 정리

(20)
하노이 타워 알고리즘의 시간복잡도 하노이 타워에서 원판 이동의 최소 횟수 및 그 순서를 찾아내는 코드는 아래와 같이 간단히 작성된다. (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 ..
DES 구현하기 얼마 전 강의에서 DES를 통한 암호화에 대해 배웠다. 이것을 코드로 구현하면 어떨까 해서 한 번 작성해보기로 했다. 나중에 웹서비스로 확장시키면 좋을 것 같아서 언어는 자바스크립트(Javascript, ES6)를 택했다. DES를 쉽게 구현하기 위해 permutation, xor, shift, sBox 등의 함수를 먼저 구현했다. permutation table은 강의 내용을 참고했다. 실제 DES와 결과가 같은지는 아직 모르겠다. DES 구조에 대한 강의 슬라이드 중 마지막 부분에 32-bit Swap이라 적힌 단계가 있는데 이것에 대해서는 언급되지 않았다. 그래서 Round 1 ~ Round 16과 IP에 집중하기로 했다. 데이터 형식은 binary로 하려고 했지만 웹서비스로의 확장 등에는 '0'과..
메르센 소수 찾기 2의 거듭제곱에서 1이 부족한 수를 메르센 수(Mersenne number)라고 한다. 여기서 메르센(Mersenne)은 수학자 마랭 메르센(Marin Mersenne)의 이름이다. 메르센은 저명한 수학자 파스칼의 스승이었다고도 한다. 위키백과 메르센 수 중에서 소수인 수를 메르센 소수(Mersenne prime)라고 한다. 3, 7, 31, 127 등은 메르센 소수이며, 이같은 소수가 무한히 많은지는 알 수 없다. 그 중 1883년 Ivan M. Pervushin이 발견한 9번째 메르센 소수는 다음과 같다. 이 수가 소수인지 아닌지 모른다고 가정하고, 소수임을 판별하는 알고리즘을 생각해보자. 주어진 수를 N이라 하자.각 방법의 소요시간은 초당 10^8번의 연산을 기준으로 한 단순 계산이다. 단순한 방법..
Design XOR with only NOR NOR만으로 XOR을 구현하는 방법은 다양하게 있겠으나, 나는 이런 구조를 생각해보았다.A, B 값에 따라 A, B의 XOR연산 결과와 같은 C가 나온다.