Algorithm 5

[python] 선택 정렬 (selection sort)

정의 선택 정렬이란 배열에서 가장 작은 원소를 찾아 첫 번째 원소와 교환하고, 두 번째 작은 원소를 찾아 두 번째 원소와 교환하는 방식으로 전체가 정렬될 때까지 계속함 정의 - 제자리 정렬 - 불안정적 - 입력 자료의 순서에 민감하지 않음 - 작은 키와 매우 큰 레코드를 가지는 화일을 정렬하는데 적합함 선택 정렬 ADL selectionSort(a[], n) for (i ← 1; i < n; i ← i + 1) do { minIndex ← i; for (j ← i + 1; j ≤ n; j ← j + 1) do if (a[j] < a[minIndex]) then minIndex ← j; a[i]와 a[minIndex]를 교환; } end selectionSort() 선택 정렬 구현 def selection..

algorithm 2020.11.22

[python] RSA (Rivest, Shamir and Adleman) 알고리즘

RSA 암호 알고리즘은 대표적인 공개키 알고리즘 중 하나로 소인수 분해의 어려움을 이용한 방식을 사용하고 있다. 사용자는 각각 공개키와 개인키를 갖고 있다 메시지를 보낼때는 송신자가 수신자의 공개키로 암호화 한 후 전송하면 수신자는 수신자의 개인키로 복호화한다. 1. 먼저 2개의 소수(p, q)를 선택합니다. 2. n 을 구합니다 n = p * q 3. φ(n)을 구합니다 φ(n) = (p-1)(q-1) 4. 1 < e < φ(n) 을 만족하는 φ(n)과 서로소인 자연수 e를 구합니다 5. e mod φ(n) = 1 을 만족하는 d를 구합니다 여기서 공개키는 (n, e) 쌍이 되고, 개인키는 d 가 됩니다. # RSA 암호화 프로그램 def encipher(p, n, pk): c = '' i = 0 wh..

algorithm 2020.11.06

[python] 비즈네르(Vigenere) 암호화 알고리즘

비즈네르 암호화란 평문의 각 문자에 대해 서로 다른 변환표를 사용하는 것이다. 여기서 평문의 문자들은 위치에 따라 다른 간격의 밀기 방식으로 치환하여 사용한다 예를들어, 아래와 같은 키와 평문이 있다고 한다면 키 : "ABC" 평문 : "SAVE PRIVATE RYAN" 키 A B C A B C A B C A B C 평문 S A V E P R I V A T E 암호문 T C Y F B S S K Y B V H 와 같이 된다. A 부분에서는 1칸을 뛴 문자가 오고, B부분에서는 2칸을 뛴 문자가 오고, C부분에서는 3칸을 뛴 문자가 오는것이다. * 띄어쓰기 같은 경우는 A 앞이라고 가정하고 띄어쓰기에서 2칸(B)를 만나면 B가 된다. (띄어쓰기) -> A -> B def encipher(p, k): c =..

algorithm 2020.11.05

[python] 카이사르 암호화(Caesar cipher) 알고리즘

카이사르 암호화란 고대 로마의 카이사르가 사용했다고 알려졌다. 평문에 있는 문자가 알파벳의 N번째 문자라면, 이것을 N+K 번째 문자로 교체하는 원리 예를 들어 K = 1 이라고 한다면, A -> B 가 되고, B -> C가 되는 원리 예를들어 'APPLE BANANA' 라는 문장이 있고 k = 1 이라면 암호문은 'BQQMFACBOBOB' 가 될 것이다. * 여기 암호문에서의 A는 빈칸을 의미한다. 이유는 A~Z 중 A앞에 공백부터 시작한다고 생각하면 쉽다. (빈칸) A B C ... X Y Z def encipher(p, k): c = '' for i in range(len(p)): a = ord(p[i]) if a == 32: a = 64 t = a + k if t > 90: t -= 27 if t..

algorithm 2020.11.04

[python] 보이어 무어 알고리즘 (Boyer Moore Algorithm)

보이어 무어 알고리즘은 텍스트에서 특정한 패턴(텍스트)을 탐색하는 알고리즘입니다. 또한 오른쪽에서 왼쪽으로 스트링 탐색을 진행합니다. 예를 들어 텍스트 STRING STARTING CONSISTING에 대하여 패턴 STING을 탐색하는 수행과정을 본다면 먼저 STING이라는 패턴에 대한 skip 배열을 구하여야 합니다. * STING 일 때의 skip 배열 G N I T S 다른 모든 문자 0 1 2 3 4 5 위와 같은 skip 배열의 숫자는 만약 텍스트가 일치하지 않을 경우 얼마만큼 건너뛰어야 하는지 표시한 것입니다. * 오른쪽에서 왼쪽으로 탐색을 진행하기 대문에 먼저 N과 G를 비교해보면, 서로 다른 문자임을 알 수 있습니다 위에 N 이란 단어는 skip 배열에서 1이란 숫자를 표시하고 있으므로 한..

algorithm 2020.10.27