분류 전체보기 160

[정보보안] DES(Data Encryption Standard)에 대하여

DES(Data Encryption Standard)는 대칭키 블록암호로 미국 기술표준원에서 공표했다. DES의 구조를 그림으로 그려보면 다음과 같다. 1) 암호화(Encrpytion) DES의 암호화 과정은 두 개의 치환(P-box)과 16개의 Feistel 라운드 함수로 구성된다. 초기 치환과 최종 치환의 경우 모두 64비트를 입력받아 미리 정의된 규칙에 재배열한다. 각 치환은 역의 관계를 가지며, 단순 치환이다(p-box) DES에서 사용하는 라운드 함수는 이전 라운드 함수의 출력값 L_I-1과 R_I-1을 입력받아 다음 라운드에 사용될 L_I와 R_I를 생성한다. 2) 복호화(Decryption) DES의 복호화 과정은 암호화 과정의 역순으로 이루어진다. 초기 치환후, 16라운드를 처리하고, 라운..

Computer Science 2023.12.09

[자료구조] AVL tree 개념과 연산

AVL tree란 Adelson-Velskii와 Landis에 의해 1962년에 제안된 트리로, 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차가 1이하인 이진탐색트리를 의미한다. AVL tree의 연산과정은 다음과 같다. 탐색 연산 : 이진 탐색 트리와 동일하다. 값들을 비교하며 내려가는 구조이다. 삽입,삭제 연산: 삽입-삭제 위치에서 루트까지의 경로에 있는 조상 노드들의 균형 인수에 영향을 받는다. LL type 혹은 RR type을 맞추기 위해 rotation을 진행한다.

Computer Science 2023.12.08

[자료구조] 이진 탐색 트리에서의 연산(탐색 연산, 삽입 연산, 삭제 연산)

BST(Binary Search Tree)란 탐색을 효율적으로 하기 위한 자료구조이다. 이진탐색트리는 다음과 같은 특징을 가진다. 1) 이진트리이며 모든 원소는 서로 다른 유일한 키를 가짐 2) 왼쪽 서브트리의 key값< 루트의 key값< 오른쪽 서브트리의 key값 3) 왼쪽 서브트리와 오른쪽 서브트리도 이진 탐색 트리 -이진탐색 트리의 연산 1) 탐색(searchBST()) 연산 루트에서 시작, 탐색할 키값 X를 루트노드의 키값과 비교한다. 키값이 루트노드의 키값과 같으면 탐색 성공, 크거나 작으면 각각 오른쪽, 왼쪽으로 위치시켜 다시 탐색연산 수행 -탐색 방법: 반복적 방법, 순환적 방법(재귀적으로 수행) 2) 삽입(insertBST())연산 탐색연산이 모두 완료된 이후에 진행된다. 탐색이 실패한 위..

Computer Science 2023.12.07

[선형대수] python으로 행렬의 성분을 부분 출력하기, 행렬 성분의 일부를 변경하는 방법

행렬의 성분을 부분적으로 출력하는 것과, 행렬의 일부 값을 변경하여 출력하는 예제이다. numpy를 import 한 후, np.array에 행렬을 삽입한다. 1행 3열의 성분을 출력하기 위해 E[0,2] 를 1행 3열의 값으로 지정한다. (**행렬의 저장공간은 0번부터 시작!) 마찬가지로 2행 1열의 성분은 E[1,0] 이 된다. 그리고 부분행렬을 출력한다. 2행 1열 성분을 변경하는 것은 E[1,0] = -1로 재 설정하면 된다. 그리고 행렬을 출력하면 정상적으로 변경된 값으로 출력됨을 볼 수 있다.

Computer Science 2023.12.06

[선형대수] 파이썬으로 여러 행렬과 단위행렬 출력하기

영행렬과, 성분값이 정해진 행렬들 값들 생성하는 예제이다. 필요 library(numpy)를 import 하고, 각 단위 행렬을 생성했다.이 때 모든 성분이 1인 행렬은 np.ones를 이용하여 생성하고, 모든 성분이 3인 행렬은 np.full을 이용하여 생성한다. 생성 후 행렬을 출력하면 결과는 다음과 같다. 실행 결과 요구한 행렬이 모두 출력되었음을 확인할 수 있었다.

Computer Science 2023.12.05

[선형대수] 대각행렬을 생성 후, 분리하여 블록행렬 처리하기

대각행렬을 생성후, 분리하여 블록행렬 4개로 만드는 예제이다. 대각행렬은 np.diag([대각성분1,대각성분2, 대각성분3]) 의 꼴로 생성한다. 그리고 대각행렬의 일부를 dag[] 형태로 나누어 쪼갠 후, 다시 행,열로 합쳐저 D행렬을 생성한다. 대각행렬을 생성후, 일부 분리하여 다시 합치는 작업을 진행해보았다. 출력 결과 3x3 matrix에서 주 대각성분이 3,4,5인 대각행렬이 만들어지는 것을 확인할 수 있었다.

Computer Science 2023.12.04

[선형대수] 난수 행렬을 생성한 후, 역행렬을 구하기

난수행렬을 생성한 후 그 행렬의 역행렬을 구하고, 행렬과 구한 역행렬의 곱이 단위벡터인지 확인하는 예제이다. 1) 우선 난수 행렬을 생성한다. 난수 행렬의 생성은 np.random.rand(행,렬)로 이루어진다. 2) 역행렬을 구하기 위해 사용하는 방법에는 np.linalg.inv(numpy 내장함수를 이용하는 방법) 혹은 행렬의 곱 연산을 이용하는 방법이 있다. 두 가지 방법을 통해 역행렬을 구해본다. 3) 난수행렬과 그 역행렬의 곱이 단위행렬인지 확인하기 위하여, 판별문을 만든다. 실행 결과 난수행렬과 그 역행렬들을 출력할 수 있었다. 두 가지 방법으로 구한 행렬의 곱이 모두 단위행렬임을 확인할 수 있다.

Computer Science 2023.12.03

[선형대수] 파이썬으로 행렬 벡터 기본연산 구현하기 (행렬 덧셈, 행렬 뺄셈, 행렬 곱셈)

행렬에서의 기본 연산에 관한 예제이다. 파이썬으로 행렬의 덧셈, 행렬의 뺄셈, 행렬의 곱셈을 구현해보려고 한다. 행렬의 정의를 함수를 통해 구현해보았다. n * m 행렬을 구현하기 위해 이중 for문을 이용하여 공백란과 가로, 세로열을 규정하였다. 그리고 lone을 출력한 후 각 행렬에 값들을 삽입하였다. 행렬이 모두 삽입된 상태에서 행렬의 출력은 각 행렬을 정의해줌으로서 이루어질 수 있다. 같은 행렬의 덧셈과 곱셈은 상수 덧셈과 곱셈과 같은 방식으로 이루어질 수 있지만, 다른 행렬이 곱해질 경우에는 np.dot(행렬1, 행렬2)의 방식으로 행렬의 곱을 계산하게 된다. 한 행렬의 제곱 행렬은, np.linalg.matrix_power(행렬, 원하는 차수) 를 이용하여 이루어진다. 위의 행렬식을 실행해본 ..

Computer Science 2023.12.02

[c] 문자열을 입력 받고, 문자열 내부의 특정 문자열을 교체하기

문자열을 입력 받고, 문자열 내부의 특정 문자열을 교체하는 예제이다. 표준 입출력 함수, 문자열 처리함수, 일반 유틸리티 함수를 사용하기 위해 필요한 헤더 파일을 import하였다. [replaceSubstring 함수] 임시 문자열을 temp에 저장, 문자열 길이는 len에 저장, 원본 문자열은 str, 그리고 복사한 문자열은 result에 복사되도록 세팅하였다.그리고 while문을 통해 result 문자열에서 from 문자열을 찾을 때까지 반복했다. [main함수] char 배열과 배열 크기를 설정했다. 그리고 fgets를 사용하여 문자열을 받아 str에 저장하였다. print문은 입력 문자열, 교체되기를 원하는 문자열, 교체 문자열로 나누어 입력받았고, 결과 문자열을 출력하도록 설정했다.

Computer Science 2023.12.01

[c] strcat함수 구현(문자열 이어붙여 출력하기)

c에서 문자열을 결합하여 출력하는 프로그램이다. 가장 먼저 문자열 관련 함수를 출력하기 위해 #include 를 import 한다. line 4~23에서는 my_strcat 함수를 정의하였다. 두개의 문자열 포인터를 매개변수로 받아 'src' 문자열을 dest 문자열 끝에 복사한 후, while 루프를 돌렸다. main 함수에서는 char와 src 배열을 설정하였다. (배열 크기는 충분히 크게 설정하였다) while 문에서는 quit를 입력하는 탈출조건이 아닐 경우에 입력을 계속 받도록 설정하였다. fgets(dest, sizeof(dest), stdin)에서는 표준 입력에서 문자열을 읽어 dest에 저장했다. 입력은 사용자로부터 source string과 destination string을 받았다. 그..

Computer Science 2023.11.30
반응형