Computer Engineering(39)
-
[프로그래밍 언어론] 2. 프로그래밍 언어의 발전사
1.왜 프로그래밍 언어가 필요했을까?1950년대, 컴퓨터는 막 등장한 신기술로, 사람들은 기계어 (0과 1) 혹은 어셈블리어로 코드를 작성했다.하지만 너무 복잡하고 오류가 많아 생산성이 낮았는데,"좀 더 사람이 이해하기 쉬운 언어로 프로그래밍할 수 없을까?" 라는 질문에서고수준 언어의 탄생이 시작되었다. 2. 계산 효율성을 위한 첫 고수준 언어: Fortran1950년대 IBM 연구원 존 바커스(John Backus) 팀이 만든 Fortran은 "수학 공식을 바로 코드로 쓰게 하자!"라는 아이디어에서 시작되었다. Fortran의 목표- 성능: 기계어 수준의 실행 속도- 편의성: 코딩은 해석기처럼 간단하게- 생산성: 디버깅과 오류 걱정 없이 작성 가능 (초기엔 낙관적) 초창기 문법- 암시적 타입 규칙: ..
2025.04.12 -
[프로그래밍 언어론] 1. 프로그래밍 언어의 개요
1. 언어의 기본 이해프로그래밍 언어란 무엇인가? Q. 왜 굳이 여러 프로그래밍 언어를 배워야 하나?A. 프로그래밍 언어를 배우면,- 표현력 향상: 언어는 사고의 도구 -> 더 강력한 언어 = 더 복잡한 문제 해결 가능- 언어 선택 능력: 상황에 맞는 언어를 잘 고를 수 있게 된다.- 새 언어도 쉽게 습득 가능: 개념을 알면 새로운 문법도 빨리 이해한다.- 기존 언어도 더 잘 쓴다: 예전에 몰랐던 기능도 활용 가능해진다. - 컴퓨터의 작동 원리도 더 깊이 이해: 구현 방식, 메모리 구조 등까지 알게 된다. 2. 중요) 언어평가 기준 Expressiveness 표현성Maintainability 유지보수성Executability 효율성Writability 작성력OO Readability 가독성 O Eff..
2025.04.12 -
[알고리즘] 4. Dynamic Programming
1. Dynamic Programming의 등장 배경- Divide and Conquer의 한계: 분할 정복은 서로 독립적인 하위 문제를 나눌 때 효과적임. BUT 피보나치 수열처럼 같은 하위문제를 반복적으로 푸는 문제에서는 비효율적ex. F(5) = F(4) + F(3) → F(3) 이 여러번 계산됨 → 중복 계산이 심함 → 비효율적 2. Dynamic Programming의 개념- Bottom-up 방식으로 작은 문제부터 해결해서 결과를 배열에 저장해두고 필요할 때 재사용함.- 이로 인해 중복 계산을 제거하고 성능을 대폭 향상시킴 두 단계 구조재귀적 성질 (recursive property) 정립작은 문제부터 순차적으로 (bottom-up) 해결3. 이항계수 (Binomial Coefficient) ..
2025.04.11 -
[알고리즘] 3. Divide and Conquer
1. Divide and Conquer 분할 정복 개념: Divide and Conquer는 문제를 해결하기 위해 다음과 같은 3단계를 거친다.Divide(분할): 문제 인스턴스를 하나 또는 여러 개의 더 작은 인스턴스로 나눈다.Conquer(정복): 작은 인스터스를 재귀적으로 해결한다. → 충분히 작아지면 더 이상 분할하지 않고 직접 해결Combine(결합): 작은 인스턴스의 해를 합쳐서 원래 문제의 해를 만든다.이 방식은 Top-down 접근이며, 재귀적으로 구조화된다. 2. 이진탐색: 대표적인 Divide & Conquer 문제정의- 입력: 정렬된 배열 S (크기 n), 찾을 값 x- 출력: x의 위치 (없으면 0) 수행 방법 배열의 중간값 S[mid]를 기준으로x가 작으면 왼쪽 반, 크면 오른쪽..
2025.04.11 -
[알고리즘] 2. Complexity of Algorithm
1. Algorithms알고리즘이란?알고리즘은 컴퓨터 프로그램을 구성하는 개별 모듈들을 설계하는 것이며, 각 모듈은 정렬 같은 특정 작업을 수행한다.이러한 작업들은 우리가 해결하고자 하는 문제(problem)이고, 문제는 본질적으로 우리가 답을 찾고자 하는 질문이다. 알고리즘은 단순한 아이디어가 아니라 문제를 해결하기 위한 단계적 절차이다.이 절차는 신중하게 설계되어야 하며, 입력을 받아 출력(해결책)으로 변환한다. 문제는 특정 값이 정해지지 않은 parameter(매개변수)를 포함하고 있다.이 parameter에 값을 넣으면 하나의 문제 instance가 된다.즉, 하나의 문제는 다양한 instance의 집합이라 볼 수 있다. 2. 알고리즘 표현 방법C와 같은 구현 언어pseudocode영어 서술중요한..
2025.04.11 -
[강화학습] Masked Reinforcement Learning
1.Masking 기법강화학습에서는 에이전트가 가능한 모든 action 중 하나를 선택해 환경 env와 상호작용하고, reward를 최대화하도록 학습한다.그런데, 어떤 상황에서는 특정 행동이 물리적으로 불가능하거나, 규칙을 어기거나, 비효율적으로 위험할 수 있다. 이러한 경우에도 에이전트가 탐험을 위해 그러한 행동을 시도할 수 있는데, 이러한 행동은 학습 속도를 느리게 하고, 학습 실패로까지 이어질 수 있다.→ Masked RL은 이런 불필요한 행동을 미리 제거해서 학습을 더 효율적이고 안정적으로 만들 수 있다. 행동공간이 매우 크거나 복잡할 때, 안전이나 물리적 제약이 존재할 때, 학습 속도가 느릴때, 행동마가 계산 비용이 클때 마스킹 기법을 사용하면 좋다. 2. 핵심 IDEAAction Mask : ..
2025.03.25