목록2024/07 (28)
미누에요

큐(Queue) 위 이미지와 같이 들어온 순서대로 나가게 되는 자료구조이다.First In First Out의 구조를 갖는다. 각 함수에 대해서 간략히 설명하고 넘어가겠다. isEmpty()큐가 비어있는지 검사하는 함수비어있으면 1 반환비어있지 않으면 0 반환 isFull()큐가 가득 차있는지 검사하는 함수연결리스트는 계속해서 확장할 수 있으므로 isFull함수를 사용하지 않는다. Enqueue()큐에 새로운 데이터를 삽입하는 함수새로운 노드를 생성하여 데이터를 저장하고, 그 새로운 노드와 head 노드를 연결한다. Dequeue()큐에 있는 데이터를 삭제, 반환하는 함수가장 처음 들어온 노드의 값을 찾아 반환해야한다.이전 노드의 위치도 기억해야 하므로 prev 포인터 노드와 temp 포인터 노드 두 ..

스택(Stack) 스택은 위 그림과 같이 겹겹이 쌓이는 구조를 뜻한다. 각 함수에 대해서 간략하게 설명하겠다. isEmpty()스택이 비어있는지 확인하는 함수비어있다면 1을 반환비어있지 않다면 0을 반환 isFull()스택이 가득 차있는지 확인하는 함수연결리스트를 활용한 스택 구현에서는 필요 X연결리스트는 계속해서 연결이 가능하기 때문 Push()값을 삽입하는 함수새로운 노드를 생성하여 값을 저장하고, 기존 연결리스트에 연결한다. Pop()값을 삭제, 반환하는 함수마지막 노드의 값을 임시로 저장해두고, 삭제한 후에 임시로 저장한 값을 반환한다. printData()연결리스트에 연결된 값들을 차례로 출력하는 함수 구현한 코드#include#includetypedef struct _stack { ..

Reinforcement Learning(강화학습) 학습을 하는 과정에서 보상(reward)를 지급하며 보상(reward)를 더 많이 받는 방향으로 성장하게끔 학습하는 방식이다.환경과의 상호 작용을 통해 학습한다. 강화학습은 더 많은 보상(reward)를 얻는 방식으로 학습을 계속한다. 강화학습 사진 출처 - https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.kdnuggets.com%2F2022%2F05%2Freinforcement-learning-newbies.html&psig=AOvVaw0VSLKpDxZ3q8VW7L3gevPH&ust=1722145371705000&source=images&cd=vfe&opi=8997844..

Semi-Supervised Learnin(준지도학습) 많은 데이터에 Label을 붙이는 일은 쉽지 않다.데이터에 알맞은 Label이 붙어있지 않으면 좋지 않은 질의 데이터가 되는 것이다. 이런 데이터 라벨링을 사람이 하고 있는 현재에 라벨링이 제대로 된 데이터의 양은 많지 않다.이런 상황을 고려하여 만들어진 게 semi-Supervised Learning(준지도)이다 많은 양의 Label 없는 데이터적은 양의 Label 있는 데이터 Semi-Supervised Learning 의 가정(참고 : ( x, y ) 에서 x는 데이터, y는 label이다.) The smoothness assumption확률 밀도가 높은 지역에서 x1, x2가 가깝다면 연관된 레이블인 y1과 y2도 가까워야 한다.labe..

UnSupervised Learning(비지도 학습) 입력으로 들어가는 데이터에 label이 없다.즉, 데이터에 예측값이 맞는지 확인할 정답값이 없다는 것스스로 특징을 분석하여 구분하기에 비지도 학습 장점레이블이 필요하지 않다. (양질의 데이터가 많지 않기때문에 굉장히 큰 이점)레이블이 없는 데이터들을 대량으로 활용할 수 있다. 단점레이블이 없기 때문에 평가를 할 때 명확하게 평가하지 못한다.정확도를 크게 기대하면 안된다. 비지도 학습의 종류에는 clustering(군집화), 차원축소, 이상치 및 특이치 감지 등이있다. Clustering(군집화) 비슷한 특징을 가진 데이터를 그룹으로 나누는 것을 Clustering(군집화)이라고 한다. 차원 축소(Dimentionality Reduction)..

Supervised Learning(지도 학습) 입력 데이터에 Label, 정답이 함께 포함되어 있음쉽게 말해서, 연습문제와 정답이 데이터셋으로 입력되는 형태 장점정답이 같이 데이터셋으로 주어지기 때문에 보다 정확한 AI 모델을 구사한다.명확한 목표와 성능 지표다양한 분야에서 높은 정확도예측 결과에 대한 해석의 명확성 Supervised Learning(지도학습)은 주로 Regression(회귀) 문제와 Classification(분류) 문제에 사용된다. Regresstion(회귀) 회귀 문제란 위 그림처럼 주어진 데이터들을 보고 가장 적절한 그래프를 찾아내는 것이라 생각하면 쉽다. Classification(분류) 분류는 주어진 데이터들의 분포를 보고 두 개 혹은 두 개 이상의 클래스(집..

C++에서 다형성을 이용하여 업캐스팅, 다운캐스팅을 할 때에 우리는 여러가지 형 변환을 사용한다.형 변환 연산자를 사용하지 않아도 형 변환 명시를 통해 형변환이 가능하지만, 의도한 바를 명확히 표시하기 위해 "형 변환 연산자"를 사용한다. 형 변환 연산자의도치 않은 형변환에 의한 데이터 손실을 줄이기 위함컴파일러가 인식하여 이상하면 에러 발생시킬 수 있음 형 변환 연산자의 종류는 총 4가지이다.static_castconst_castdynamic_castreinterpret_cast형 변환 연산자의 사용 방법은 아래와 같다.형 변환 연산자(바꿀 변수) static_cast부모 클래스의 내용을 자식 클래스에 담는 경우(임의로)자식 클래스의 내용을 부모 클래스에 담는 경우(임의로)형 변환을 의도적으로 진행한..

C++에서도 예외 처리에 try, catch, throw를 사용한다. try예외가 발생할 거 같은 지역을 try 속에 넣는다.예외가 발생한다면, 그 지점 아래의 코드는 실행되지 않는다.try{// 예외 발생 예상지역} catchtry 블록에서 발생한 예외(throw로 던져진 예외)를 여기서 catch한다.발생한 에외를 처리하는 부분이다. (에러 출력과 같은 작업)예외가 발생하지 않는다면 실행되지 않는다.catch{// 예외 처리 코드} throw예외가 발생했을 때 throw를 보통 던지도록 설계한다.throw를 던지면 catch가 있는 부분까지 빠져나간다.예외가 발생하면 throw 아래의 코드는 실행되지 않는다.throw 값; 예제 코드를 통해 살펴보자.#includeusing namespace ..

템플릿을 사용해서 함수나 클래스를 작성할 때, 템플릿 변수를 여러 개 작성할 수도 있다. #includeusing namespace std;templatevoid MySimple(T1 v1, T2 v2){ cout 실행 결과 위 함수는 템플릿 변수를 두 개 사용하여 각 메모리 사이즈를 출력하는 함수이다.12는 정수 int형이므로 4바이트, 'B'는 char 형 이므로 1바이트가 출력되었다. 이처럼 상단에 template 의 뾰족괄호 속에 typename을 얼마나 작성하느냐에 따라서 템플릿 변수를 더 많이 사용하여 다양한 매개변수의 타입에 대응할 수 있게된다.

프로그램을 작성하다 보면 자료형에 따라 여러 개의 함수를 만들어야 하는 상황이 발생한다.예를 들어서 덧셈 연산을 하는 프로그램이 있다고 하자.#includeusing namespace std;int Add(int n1, int n2){ cout 실행 결과 위 코드에서는 double 타입의 두 변수를 사용하여 Add 함수를 호출하였다.함수는 매개변수에 따라서 오버로딩이 가능하기에, 우리가 int형 변수 두 개의 덧셈을 계산하려면 위처럼 int 형의 Add 함수를 하나 더 작성해야한다. 이렇게 사용하려는 변수의 타입마다 함수를 하나씩 작성한다면 굉장히 번거로울 것이다. 이럴 때 우리는 템플릿(Template)을 사용하여 코드를 간단히 나타낼 수 있다. 템플릿(Template)템플릿 이라는 단어는..