CS
에이전트의 정의
에이전트(Agent)는 인공지능 분야에 있어서 핵심 개념이 될 수 있다. 다음과 같이 정의를 내릴 수가 있다 "복잡한 동적 환경에서 목표를 달성하려 시도하는 시스템" 특징 특정 목적에 대해 사용자를 대신하여 작업을 수행하는 자율적 프로세스이다. 독자적으로 존재하지 않고 어떤 환경(운영 체제, 네트워크 등)의 일부이거나 그 안에서 동작하는 시스템이다. 지식 기반(Knowledge Base)과 추론 기능을 가지며, 자원 또는 다른 에이전트와의 정보 교환과 통신을 통해 문제를 해결한다. 스스로 환경의 변화를 인지하고 그에 대응하는 행동을 취하며, 경험을 바탕으로 학습하는 기능을 가진다. 분류 Simple Reflex Agents Condition-Action Rule을 내부에 가지고 있으며, 환경으로부터 받는..
맵 방식 설정 심리스(Seamless), 존(Zone), 룸(Room)
심리스 (Seamless) 방식 큰 맵을 하나 만들어 맵 이동 시에 새 지역을 로딩없이 자유롭게 이동할 수 있도록 만드는 방식. 유저 캐릭터가 특정 방향으로 움직일 때마다 그만큼 새지역을 로딩하는 구역로딩을 한다. 이 때문에 심리스 방식은 로딩이 없는 것처럼 유저가 느끼게 만든다. 장점) 미리 로딩이 되어있기 때문에 자유롭게 이동이 가능 단점) 미리 로딩을 하는 방식이기에 초반 로딩이 다소 긴 편 존(Zone) 방식 맵을 작은 단위로 나눈 후에 맵에 설정된 입구를 통해 서로 연결한 후 그 위치를 통해 각 맵을 이동하는 방식 입구, 즉 포탈을 통해 맵을 이동하기 때문에 포탈맵 방식이라고도 한다. 장점) 그때마다 필요한 부분만 로딩을 하여 퍼포먼스 및 렉 최적화 단점) 맵을 이동할 때마다 로딩을 해야하는 번..
[C++] 라운드 로빈 스케줄링 구현 (우선순위 큐 이용)
EHProcess.h #pragma once #include #include using namespace std; class EHProcess { string pname; //프로그램 이름 const int tjob; //전체 작업량 const int cjob; //cpu 점유 시 수행가능 최대 작업량 int ntjob = 0; //현재 남은 작업량 int ncjob = 0; //현재 cpu 점유 시 수행가능 최대 작업량 public: EHProcess(string pname, int tjob, int cjob); //Idle 상태에서 Ready 상태로 전이 void IdleToReady(); //CPU를 점유하여 실행, 남은 작업량 반환 int Running(); //프로세스 종료 void EndPro..
프로그램 (Program) 이란?
컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음. 컴퓨터 프로그램이란 컴퓨터 안에 있는 논리적인 기계라고 볼 수 있다. 기계를 작동시키면 설계된대로 작동한다. 컴퓨터 프로그램도 마찬가지로 수동적으로 적혀진 명령어 대로 작동한다. 다만 너무 빨리 입력받고 처리해서 능동적으로 보일 뿐이다. 프로그램의 종류 크게 시스템 프로그램과 응용 프로그램으로 나뉘어져 있다. 시스템 프로그램이란 컴퓨터 시스템과 하드웨어들을 스스로 제어 및 관리하는 프로그램들을 말한다. 윈도우, 리눅스 같은 운영체제나 장치 드라이버, 컴파일러, 링커 등이 있다. 응용 프로그램이란 사용자가 원하는 기능을 제공하는 프로그램으로 실행하는 동안 지속적으로 컴퓨터의 성능을 소비한다. 워드, 엑셀, 포토샵, 게임, 브라우저 등이 있다. http..
[C++] lower bound, upper bound
lower bound lower bound는 찾고자 하는 값 이상이 처음 나타나는 위치다. lower bound의 경우에는 같은 원소가 여러개 있더라도 상관없다. 찾고자 하는 값 이상의 값이 처음 나타나는 위치를 찾아내기 위해, 이분탐색 방법에서의 조건을 조금 변경하면 된다. [문제] n개로 이루어진 정수 집합에서 원하는 수 k이상인 수가 처음으로 등장하는 위치를 찾으시오. 단, 입력되는 집합은 오름차순으로 정렬되어 있으며(이분 탐색 가능), 같은 수가 여러개 존재할 수 있다. 입력) 첫 줄에 한 정수 n이 입력된다. 둘째 줄에 n개의 정수가 공백으로 구분되어 입력된다. 셋째 줄에는 찾고자 하는 값 k가 입력된다. (단, 2 0) { m = (s + e) / 2; if (A[m] < k) s = m + ..
[C++] 계단 오르기 알고리즘
예로 들어서 n이 3이라면 꼭대기에 도달 하는데까지 총 3가지의 방법이 존재한다. 다른 예시로는 n = 1 // 한 가지의 방법만 존재하므로 1을 출력 n = 2 // 2, (1 , 1)과 (2) n = 4 // 5, (1, 1, 1, 1), (1, 1, 2), (2, 1, 1), (1, 2, 1), (2, 2) 재귀를 사용한 방식 방법의 수(n) = 방법의 수(n - 1) + 방법의 수(n - 2) 피보나치 수열을 이용하여 구할 수가 있다. 방법의 수(1) = 피보나치(2) = 1 방법의 수(2) = 피보나치(3) = 2 방법의 수(3) = 피보나치(4) = 3 int fib(int n) { if (n
세션의 생성과 관리
세션이란, 멀티 player 게임의 1 개의 인스턴스이다. 1 개의 세션에는 동시에 플레이 하는 복수의 사용자가 존재해, 각각이 자신의 컴퓨터상에 게임 클라이언트를 가지고 있다. player란, 게임안의 엔티티여, 각 게임에서 정의한다. 각 사용자가, 1 개의 게임에 복수의player를 가지는 경우도 있다. 다만, 게임 애플리케이션은, 개별의 Microsoft® DirectPlay® 인터페이스 또는 각 player의 개체를 사용해, 이러한 player를 애플리케이션 자신으로 관리해야 한다. 세션 생성의 최초의 순서는, 사용자 그룹의 수집이다. 이 때문에는, 2 개의 기본적 방법이 있다. 많은 게임 세션은, 리모트 컴퓨터로 실행되는로비 애플리케이션에 의해 준비된다. 이 방법은, 많은 인터넷 베이스의 게임에..
sort() 함수에서 쓰여지는 정렬 알고리즘 (Intro 인트로, Tim 팀)
일반적으로 시간 복잡도를 기준으로 sort 알고리즈므이 성능을 판단하지만, 실제로는 지역성이나 실 데이터의 분포 등 고려할 것들이 많다. 언어마다 default로 사용하는 sort들이 정해져있다. C++ : Intro Sort c++의 std::sort로 사용되고 퀵 정렬, 삽입 정렬, 힙 정렬로 이루어져 있다. 특징 기본적으로 퀵 정렬로 시작을 한다. 정렬할 element가 Threshold(일반적으로 16) 미만일 때는, 삽입 정렬로 수행된다. 재귀 depth가 정렬되는 element 수(n)과 비교해 log N보다 많아지면 힙 정렬로 수행된다. 퀵, 삽입 정렬은 지역성의 이점을 얻는 알고리즘(배열의 경우)으로 유명하다. 특히, 삽입 정렬은 참조 지역성을 아주 잘 만족한다고 한다. 삽입 정렬의 경우 ..
[C++] Radix Sort (기수 정렬)
기수정렬은 정말 신기하게도 비교를 하지 않고 정렬을 하는 방법이기에 시간 복잡도가 O(n)이다. 구체적인 정렬 법을 알기 전에 이름인 '기수'가 뭔지 부터 알아보자. 여기서 '기수'라는 것은 '자릿수'를 의미한다. 자릿수로 뭘 어떻게 하는 것일까?? 방법은 다음과 같다. 1. 1의 자릿수를 보면서 각각의 버킷에 알맞게 담아준다. 버킷에서 순차적으로 뺀다면 1의 자릿수에 맞게 정렬이된다. 2. 1)에 의해서 정렬된 배열에서, 10의 자릿수를 비교해서 버킷에 담고 순차적으로 빼준다. 3. 2)에 의해서 정렬된 배열에서, 100의 자릿수를 비교해서 버킷에 담고 순차적으로 빼준다. 4. 최대 자릿수까지 계속해서 반복한다.. 구체적인 과정을 알아보자. 먼저 최대자릿수 까지 위의 과정을 반복해야 하므로 우리는 최대..
[C++] Trie (트라이) 소스코드
trie.h #ifndef TRIE_H #define TRIE_H #include #include #include #include #include #include #include #include #include namespace trie { struct SetCounter { }; namespace detail { template struct TrieNode : public PrefixHolderT { private: typedef TrieNode self_type; typedef self_type * self_pointer; self_pointer * data = nullptr; uint32_t size = 0; /* Will still be 64 bit due to alignment */ public..