본문 바로가기

분류 전체보기465

[암호] AES (Advanced Encryption Standard) - 1 References 리얼월드 알고리즘 Contents AES란? AES 암호화/복호화 알고리즘 Key Scheduling C++ 구현 AES (Advanced Encryption Standard) ? 현대 암호 기술은 특정한 수학적 방법을 사용하여 암호문을 생성합니다. 이러한 방법에는 상대적으로 짧은 몇백 또는 몇천 비트 길이의 키를 사용하는데, 평문과 이 암호화 키를 함께 취하여 암호화 키가 없다면 역으로 평문을 얻을 수 ㅇ벗는 복잡한 방식으로 암호화합니다. AES 또한 이 방법을 사용하고 있으며, 거의 모든 곳에서 사용되는 방법입니다. AES는 미국 국립표준기술연구소에서 2001년에 채택한 표준으로, 기존 데이터 암호화 표준인 DES를 대체하기 위해 채택되었습니다. 이 프로세스에서 Rijndael(레.. 2021. 9. 23.
LZW 압축 (C++ 구현) References 리얼월드 알고리즘 Contents LZW 인코딩/디코딩 과정 LZW 디코딩에서 코너 케이스 C++ 구현 지난 글에서 다루었던 허프만 코딩은 압축하고자하는 아이템의 빈도에 따라서 인코딩의 길이를 다르게하여 압축하는 방식이었습니다. 2021.08.05 - [Data Structure & Algorithm/알고리즘] - 허프만 코딩 (C++ 구현) 허프만 코딩 (C++ 구현) References 리얼월드 알고리즘 허프만 코딩 허프만 코드는 (최소)우선순위 큐와 이진 트리로 만들 수 있는 유일 접두어 코드를 의미합니다. 1951년 데이비드 허프만(David A. Huffman)이 25살 때 고안한 방 junstar92.tistory.com 즉, 자주 나오는 아이템의 경우에는 짧은 인코딩으로 .. 2021. 8. 29.
[C++] 비동기(Asynchronous) 실행 References 씹어먹는 C++ (https://modoocode.com/284) Contents std::future, std::promise std::shared_future std::packaged_task std::async 앞선 글들에서 이야기했던 쓰레드나 생성자-소비자 패턴의 경우을 사용하는 경우는 결국 프로그램의 실행이 한 갈래가 아닌 여러 갈래로 갈라져서 동시에 진행되어서 CPU를 조금 더 효율적으로 사용하기 위해서입니다. 즉, 프로그램을 비동기적(asynchronous) 실행을 하기 위해서 입니다. 이번 글에서는 이러한 비동기적 실행을 간단하게 구현할 수 있도록 도와주는 도구/기능들에 대해서 알아보겠습니다. std::future / std::promise 비동기적 실행을 통해서 하고 .. 2021. 8. 14.
[C++] Perfect Forwarding References 씹어먹는 C++ (https://modoocode.com/228) http://thbecker.net/articles/rvalue_references/section_07.html Effective Modern C++ (항목 28) Contents Perfect Forwading Universal Reference (보편 참조) 참조 축약(Reference Collapsing) std::forward 우측값 참조와 우측값 참조를 도입함으로써 해결할 수 있었던 Move Semantics의 관한 글에 이어서 이번 글에서는 Perfect Forwading에 대해서 알아보겠습니다. 2021.08.11 - [C & C++] - [C++] 우측값 참조(rvalue reference) [C++] 우.. 2021. 8. 13.
[C++] Move Semantics References 씹어먹는 C++ (https://modoocode.com/228) http://thbecker.net/articles/rvalue_references/section_07.html Contents Move Semantics(std::move) 2021.08.11 - [C & C++] - [C++] 우측값 참조(rvalue reference) [C++] 우측값 참조(rvalue reference) References 씹어먹는 C++ (https://modoocode.com/227) http://thbecker.net/articles/rvalue_references/section_07.html Contents 복사 생략(Copy Elision) 좌측값(lvalue)와 우측값(rvalue) .. 2021. 8. 12.
[C++] 우측값 참조(rvalue reference) References 씹어먹는 C++ (https://modoocode.com/227) http://thbecker.net/articles/rvalue_references/section_07.html Contents 복사 생략(Copy Elision) 좌측값(lvalue)와 우측값(rvalue) 우측값 레퍼런스(rvalue reference) 이동 생성자(move constructor) STL Container에서 사용할 때 주의할 점 요즘 threadpool 구현을 해보기 위해서 thread와 관련된 여러가지를 공부하다보니 컴파일 에러나 경고에서 자주 봤던 rvalue에 대해서도 조금씩 나오고, C++을 조금 더 효율적으로 사용하기 위해서 어느 정도 개념은 잡아야 한다고 생각이 들어서 우측값 참조에 대해.. 2021. 8. 11.
[C++] 생산자(Producer) / 소비자(Consumer) 패턴 References 씹어먹는 C++ (https://modoocode.com/270) Contents 생산자 / 소비자 패턴 Producer - Consumer 패턴 예시 생산자(Producer) - 소비자(Consumer) 패턴은 멀티 쓰레드 프로그램에서 자주 사용되는 패턴입니다. 여기서 생산자(producer)는 무언가 처리할 일을 받아오는 쓰레드를 의미합니다. 예를 들어, 웹사이트를 다운로드하여 분석하는 프로그램을 만들었다고 가정한다면, 이 경우 웹사이트를 다운로드하는 쓰레드가 생산자가 됩니다. 소비자(consumer)는 받은 일을 처리하는 쓰레드를 의미하며, 앞의 예에서 다운로드 받은 웹페이지를 분석하는 쓰레드가 소비자 역할을 하게 됩니다. 위와 같은 예시를 쓰레드로 구현해보겠습니다. #inclu.. 2021. 8. 9.
[C++] mutex References 씹어먹는 C++ (https://modoocode.com/270) Contents race condition (경쟁 상태) mutex deadlock (데드락) 2021.08.07 - [C & C++] - [C++] thread [C++] thread References 씹어먹는 C++ (https://modoocode.com/269) Contents thread join / detach thread에 인자 전달하기 single thread vs multi thread 쓰레드를 사용하면 병렬 수행이 가능한 작업들을 단일 쓰레드 프로.. junstar92.tistory.com 이전 게시글에서 thread에 대해서 알아봤습니다. 이번에는 서로 다른 쓰레드에서 같은 메모리를 공유할 때 발생.. 2021. 8. 7.
[C++] thread References 씹어먹는 C++ (https://modoocode.com/269) Contents thread join / detach thread에 인자 전달하기 single thread vs multi thread 쓰레드를 사용하면 병렬 수행이 가능한 작업들을 단일 쓰레드 프로그램으로 수행하는 것보다 훨씬 빠르게 처리가 가능합니다. 병렬 수행 작업을 예로 들면, 1에서 1000000까지의 덧셈이 있습니다. CPU 코어에서의 덧셈 연산 한 번에 1초가 걸린다고 가정해봅시다. 그렇다면 단일 쓰레드의 경우에는 1000000초가 걸리게 됩니다. 반면에 멀티 쓰레드를 사용하여 10개의 쓰레드를 동시에 실행시켜서 작업을 수행한다면, 각 쓰레드에서 덧셈은 100000초가 걸리고, 마지막으로 다 합칠 때 10초.. 2021. 8. 7.
허프만 코딩 (C++ 구현) References 리얼월드 알고리즘 허프만 코딩 허프만 코드는 (최소)우선순위 큐와 이진 트리로 만들 수 있는 유일 접두어 코드를 의미합니다. 1951년 데이비드 허프만(David A. Huffman)이 25살 때 고안한 방법으로, 허프만 코딩은 기호들의 빈도를 활용하여 정보를 압축하는 무손실 압축 시스템입니다. 허프만 코딩은 우선순위 큐로 인코딩을 시작하며, 큐의 원소는 이진 트리입니다. 이 이진 트리의 리프노드들은 문자와 텍스트에서 그 문자의 빈도를 가지고 있습니다. 그럼 어떻게 허프만 코드로 변환이 되는지 단어 'effective'를 통해서 살펴보겠습니다. 인코딩 과정 허프만 코딩은 먼저 각 문자의 빈도를 측정하고, 문자와 빈도를 데이터로 갖는 이진 트리를 원소로 갖는 우선순위 큐로 시작합니다. .. 2021. 8. 5.