IT

운영체제(Operating System)컴퓨터 하드웨어를 관리하는 소프트웨어컴퓨터 시스템은 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분할 수 있음일반적으로 하나 이상의 CPU와 버스(Bus, I/O 장치 컨트롤러, 디스크 컨트롤러, CPU 등이 메모리에 접근할 수 있도록 연결해 주는 선), 여러 장치 컨트롤러로 구성되어 있음운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 있음*장치 드라이버: 장치 컨트롤러의 작동을 파악해 장치에 대한 일관된 인터페이스를 운영체제에 제공컴퓨터 시스템의 구성1. 인터럽트인터럽트: CPU가 특정 작업을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용하는 기능인터럽트 핸들러가 관리함인터럽트 받음 -> 수행하고 있던 위치를 저장 -> 인터럽트 실행 -> 인터럽트..
강화학습의 특징No supervisor - 딥러닝의 지도 학습처럼 정답 레이블이 없음agent가 선택한 답에 대한 Feedback이 즉각적이지 않음시간이 중요(순서!!)(non iid data - 같은 확률 분포를 가진 독립적인 데이터들)agent의 행동이 나중에 agent에게 영향을 줌강화학습 문제 공식state(상태) - action(행동) - reward(보상)S0, A0, R1, S1, A1, R2, ..., Sr-1, Ar-1, Rr, Sr강화학습의 목적: 누적 보상 최대화Marcov Decision Process마르코프 결정 과정: 미래는 현재에 의해서만 결정된다. 미래는 과거와 독립적이다.St+1에 영향을 주는 것은 St뿐임POMDP(Partially Observable Markov Deci..
Marcov Assumption마르코프 가정: 상태 St+1은 상태 St에 의해서만 결정된다.즉, 미래를 결정하는 것은 현재뿐이다. 과거는 상관없다.Marcov Process마르코프 가정을 만족하는 연속적인 일련의 확률 과정일련의 상태 와 상태 전이 확률 P로 이루어짐MP = (S, P)상태 전이 확률 P_ij = Pr(St+1 = sj | St = si): 상태 i에서 상태 j로 바뀔 확률*P_ij: P에 아래첨자 i, j+) Marcov Reward Process각 상태에서의 보상 측정마르코프 과정, 보상 R, 감가율 γ(감마)로 이루어짐MRP = (S, P, R, γ)상태 집합 S = {s1, s2, ..., s}: MDP에서 가질 수 있는 모든 상태의 집합상태 전이 확률 P_ij = Pr(St+1..
A -> 1, B -> 2, C -> 3, ..., Z -> 26, AA -> 27, AB -> 28,...과 같은 원리로 문자를 바꿔야 한다. 딱 보기에도 규칙이 보이지만 코드로 써 보려니 어려웠다. 뼈대 코드 #include #include int col_to_num(char col[]) { int len = strlen(col); long long num = 0; int i=0; while (i
구조체 사용자가 C언어의 기본 타입들을 가지고 새롭게 정의하는 사용자 정의 타입 같은 타입의 변수 집합이 배열이라면, 구조체는 다양한 타입의 변수 집합 구조체를 구성하는 변수를 구조체의 멤버/멤버 변수라고 함 문법 선언 구조체는 struct 키워드를 이용해 정의 struct Person { char name[20]; int age; char address[100]; }; 이때, name, age, address는 구조체 Person의 멤버 변수 구조체를 더 편하게 사용하려면 앞에 매번 struct를 붙여야 함(Person 단독 사용 불가) 더 편하게 쓰기 위해 typedef를 같이 사용 (*typedef: 이미 존재하는 타입에 새로운 이름을 붙이려고 사용하는 키워드) typedef struct Perso..
Selection Sort, 선택 정렬 선택된 값과 나머지 데이터를 비교하여 알맞은 자리를 찾는 알고리즘 첫 번째 값을 선택하고 두 번째 값부터 순회하면서 제일 작은 값을 첫 번째 값과 바꿈 두 번째 값을 선택하고 세 번째 값부터 순회하면서 제일 작은 값을 두 번째 값과 바꿈 … 반복 시간 복잡도: O(n^2) Bubble Sort, 버블 정렬 배열을 계~속 순회하면서 앞뒤 원소가 오름차순이 아니면 둘이 바꿈 Insertion Sort, 삽입 정렬 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아 적당한 곳으로 삽입 시간 복잡도: O(n^2) Quick Sort, 퀵 정렬 분할 정복 임의의 기준 값(pivot)을 정하고 해당 피벗을 기준으로 두 개의 부분 집합으로 나눔 왼쪽에는 피벗보다 작은 값들만, ..
개념 포인터는 어떤 변수의 메모리 주소 값을 저장하는 변수로, 선언과 역참조로 많이 사용된다. a: a가 가리키는 값 출력 &a: a가 저장되어 있는 메모리 주소 출력 선언과 역참조는 둘 다 *(애스터리스크, asterisk)를 기호로 사용하는데, 선언은 말 그대로 '선언' 시에만 사용하고(int *a; 같은 경우) 나머지는 대부분 역참조, 즉 포인터 변수의 값(=메모리 주소)에 접근해 그 주소에 저장된 실제 값을 빼 온다고 생각하면 된다. *s로 선언한 포인터 변수가 있을 때 *를 붙이지 않고 사용하면 메모리 주소 값 자체를 다룬다는 이야기이고, 선언할 때 이미 포인터 변수로 선언했으므로 역참조를 하지 않는 이상 *를 붙일 필요는 없다. 포인터 변수에 *가 붙는 경우 무조건 역참조라고 생각하자. 예제 ..
#include int main(void) { int a[] = {2, 3, 5, -7}; int *p, *q; // int 타입의 값을 저장하는 메모리 주소를 가리키는 포인터 for (int i=0; i
시간 때문에 많이 고생한 문제 -.- for문의 범위에 관해서도 많이 고민했다. 아이디어 1. 원소 값과 인덱스가 일치하는 배열을 만들기 위해 n+1 사이즈 배열에 각 값을 넣는다. 2. 2부터 루트 n까지의 범위를 가지는 1차 for을 돌린다. 이것은 배열에서 2의 배수, 3의 배수, ..., i의 배수를 지우기 위해 돌리는 for문이다. 이때 기호로 i를 사용하며, 이것을 배열의 인덱스 번호로 생각한다. (*에라토스테네스의 체는 소수의 배수를 지우는 방식으로 동작한다. 예시로 어떤 수가 i*j(i
스토리지 클래스 C언어에서 기억 영역을 분류하기 위해 사용되는 언어로, 일반적으로 기억 영역 분류라고 번역됨 객체 지향의 클래스와는 관련 없음 auto, register, static, extern의 네 가지 종류로 나눠짐(각 키워드는 상호 배타적: 두 가지 이상의 키워드 함께 사용 X) 1. auto 지역 변수 선언 시 아무것도 지정하지 않았을 때 기본값으로 지정되는 클래스 사용할 일 거의 없음 2. register 변수를 메모리 대신 *레지스터에 저장하고 싶을 때 사용 but 반드시 레지스터에 저장되는 것은 X 메모리에 만들어진 변수가 아니므로 주소 연산자 '&' 사용 불가능 변수의 크기가 **레지스터 사이즈보다 작아야 함 최근의 컴파일러들은 알아서 레지스터를 잘 활용하기 때문에 이 지시자를 무시할 ..
ecc1
'분류 전체보기' 카테고리의 글 목록