본문 바로가기
반응형
[C++로 배우는 알고리즘과 자료구조 심화] Day 25: 임의화 알고리즘 (Randomized Algorithms) 임의화 알고리즘 (Randomized Algorithms)임의화 알고리즘은 무작위성을 도입하여 문제를 해결하는 알고리즘입니다. 이러한 알고리즘은 일반적으로 평균적인 성능이 좋으며, 특정 패턴이나 최악의 경우를 피할 수 있습니다. 대표적인 임의화 알고리즘에는 랜덤 선택 알고리즘 (Randomized Selection Algorithm), 랜덤 탐색 알고리즘 (Randomized Search Algorithm) 등이 있습니다.랜덤 선택 알고리즘 (Randomized Selection Algorithm)랜덤 선택 알고리즘은 주어진 배열에서 k번째 작은 원소를 찾는 문제를 해결합니다. 이 알고리즘은 퀵 선택(Quickselect) 알고리즘의 변형으로, 피벗을 무작위로 선택하여 평균적인 성능을 향상시킵니다.문제 .. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 25: 실시간 운영 체제 (RTOS) 개요 RTOS의 개요RTOS(Real-Time Operating System)는 실시간 응용 프로그램의 요구 사항을 충족하기 위해 설계된 운영 체제입니다. RTOS는 일정한 시간 내에 작업을 수행할 수 있도록 보장하며, 임베디드 시스템에서 주로 사용됩니다. 오늘은 RTOS의 기본 개념과 사용 방법을 학습하고, FreeRTOS를 사용하여 멀티태스킹 시스템을 구현하는 방법을 살펴보겠습니다.1. RTOS의 기본 개념RTOS는 다음과 같은 특징을 가집니다:실시간 성능: 정해진 시간 내에 작업을 완료할 수 있도록 보장멀티태스킹: 여러 작업을 동시에 실행우선순위 스케줄링: 우선순위에 따라 작업을 스케줄링자원 관리: 메모리, CPU 등 시스템 자원을 효율적으로 관리2. FreeRTOS 소개FreeRTOS는 오픈 소스 실시.. 2024. 8. 1.
[C++ 마스터] Day 26: 멀티스레딩과 동기화 멀티스레딩 (Multithreading)멀티스레딩은 하나의 프로그램이 동시에 여러 작업을 수행할 수 있도록 하는 기능입니다. C++11부터 표준 라이브러리는 멀티스레딩을 지원하는 다양한 기능을 제공합니다. 주요 클래스와 함수로는 thread, mutex, lock_guard, unique_lock 등이 있습니다. 1. 스레드 (Thread)스레드는 프로그램의 실행 단위를 나타냅니다. std::thread 클래스를 사용하여 스레드를 생성할 수 있습니다. 1.1 스레드 생성#include #include using namespace std;void printMessage(const string& message) { cout  2. 뮤텍스 (Mutex)뮤텍스는 상호 배제를 제공하여, 여러 스레드가 동시에.. 2024. 8. 1.
[C++ 성능 최적화 및 고급 테크닉] Day 26: 프로젝트: 고성능 매트릭스 라이브러리 개발 (3) 프로젝트 목표이 단계에서는 매트릭스 라이브러리의 성능을 더욱 향상시키기 위해 추가적인 최적화 기법을 적용하고, 병렬 프로그래밍을 도입합니다. 특히, 다음과 같은 부분을 다룹니다:병렬 프로그래밍 도입: OpenMP를 사용하여 병렬로 행렬 연산을 수행합니다.매트릭스 라이브러리 완성: 라이브러리의 다양한 기능을 통합하고 최적화합니다. Step 1: 병렬 프로그래밍 도입OpenMP를 사용하여 행렬 덧셈과 행렬 곱셈을 병렬로 수행하도록 수정합니다. Matrix.cpp: 병렬 행렬 덧셈#include "Matrix.h"#include Matrix operator+(const Matrix& lhs, const Matrix& rhs) { if (lhs.getRows() != rhs.getRows() || lhs... 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 26: C++로 네트워크 프로그래밍 (소켓 프로그래밍) 소켓 프로그래밍 소개소켓 프로그래밍은 네트워크를 통해 통신하는 소프트웨어를 작성하는 기술입니다. C++에서는 Berkeley 소켓 API를 사용하여 소켓 프로그래밍을 구현할 수 있습니다. 오늘은 TCP/IP 소켓을 사용하여 간단한 클라이언트-서버 애플리케이션을 구현해보겠습니다. TCP 서버 구현1. 서버 소켓 설정TCP 서버는 클라이언트 연결을 수락하고 데이터를 주고받습니다. 서버는 다음 단계를 통해 구현됩니다.소켓 생성소켓 바인딩소켓 리스닝클라이언트 연결 수락데이터 송수신tcp_server.cpp#include #include #include #include #include #define PORT 8080int main() { int server_fd, new_socket; struct so.. 2024. 8. 1.
[C++ 네트워크 프로그래밍] Day 26: 프로젝트: 서버 개발 (2) 실시간 채팅 애플리케이션 서버 개발 (계속)이전 단계에서는 기본적인 메시지 중계와 사용자 이름 관리를 구현했습니다. 이번 단계에서는 서버에 더 많은 기능을 추가하고, 개선하겠습니다.추가 기능 요구사항사용자 목록 관리: 현재 접속해 있는 사용자 목록을 관리하고 클라이언트에게 제공해야 합니다.연결 및 연결 해제 알림: 사용자가 연결되거나 연결이 해제될 때 모든 사용자에게 알림을 보냅니다.메시지 포맷 관리: JSON 형식의 메시지를 사용하여 메시지를 구조화합니다.서버 클래스 다이어그램 (업데이트)+-------------------+| ChatServer |+-------------------+| +start() || +stop() || -accept() .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조] Day 26: 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm) 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)플로이드-워셜 알고리즘은 모든 정점 쌍 간의 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 음의 가중치가 있는 그래프에서도 작동하지만, 음의 사이클이 있는 그래프에서는 사용할 수 없습니다.플로이드-워셜 알고리즘의 시간 복잡도:(O(V^3)), 여기서 (V)는 정점의 수입니다.플로이드-워셜 알고리즘 구현그래프 구현 (인접 행렬 사용)#include #include #include // 무한대 값을 나타내는 상수const int INF = INT_MAX;// 그래프 클래스 정의class Graph {public: Graph(int vertices); void addEdge(int u, int v, int weight); // .. 2024. 8. 1.
[C++로 배우는 알고리즘과 자료구조 심화] Day 26: 선형 계획법 (Linear Programming) 선형 계획법 (Linear Programming)선형 계획법은 주어진 선형 제약 조건하에서 선형 목표 함수를 최적화(최대화 또는 최소화)하는 문제를 해결하는 기법입니다. 선형 계획법은 경제학, 운영 연구, 엔지니어링 등 다양한 분야에서 사용됩니다. 가장 널리 알려진 방법은 단체법 (Simplex Method)과 내부 점 방법 (Interior Point Method)입니다.선형 계획법 문제 정의일반적인 선형 계획법 문제는 다음과 같이 정의됩니다:[\begin{aligned}& \text{Maximize (or Minimize)} \quad & c^T x \& \text{subject to} \quad & Ax \leq b \& & x \geq 0\end{aligned}]여기서 (c)는 목표 함수의 계수 .. 2024. 8. 1.
[C++ 임베디드 시스템 프로그래밍 시리즈] Day 26: FreeRTOS를 이용한 멀티태스킹 FreeRTOS 멀티태스킹 개요FreeRTOS는 실시간 운영 체제(RTOS)로, 임베디드 시스템에서 멀티태스킹을 구현할 수 있는 기능을 제공합니다. 오늘은 FreeRTOS의 다양한 기능을 활용하여 멀티태스킹 시스템을 더욱 효율적으로 구현하는 방법을 학습하겠습니다.1. FreeRTOS의 주요 기능태스크 관리: 여러 개의 태스크를 생성하고 스케줄링태스크 간 통신: 큐(Queue), 세마포어(Semaphore), 뮤텍스(Mutex)를 사용하여 태스크 간 데이터를 주고받고 동기화타이머: 주기적으로 실행되는 타이머 기능2. 태스크 간 통신FreeRTOS에서 태스크 간 통신을 위해 큐(Queue)를 사용할 수 있습니다. 큐는 데이터를 FIFO(First In, First Out) 방식으로 저장하여, 한 태스크에서 .. 2024. 8. 1.
[C++ 게임 개발 시리즈] Day 26: 3D 게임 프로젝트 시작 (3) 3D 게임 프로젝트 시작 (3)어제는 3D 게임 프로젝트에 카메라 컨트롤과 조명을 추가하여 장면을 더욱 현실감 있게 만드는 방법을 학습했습니다. 오늘은 추가 기능을 구현하여 게임을 더욱 발전시키겠습니다. 적 캐릭터의 AI와 간단한 충돌 처리를 추가하겠습니다.적 캐릭터 AI 구현적 캐릭터는 플레이어를 추적하고 공격하는 간단한 AI를 가집니다. 이를 위해 적 캐릭터가 플레이어의 위치를 추적하고 일정 거리 안으로 들어오면 공격하는 동작을 구현합니다. Enemy 클래스 작성Enemy 클래스를 작성하여 적 캐릭터의 위치와 AI 동작을 관리합니다.#ifndef ENEMY_H#define ENEMY_H#include class Enemy {public: glm::vec3 Position; float Spe.. 2024. 8. 1.
반응형