목록전체 글 (114)
suyeonme
너비 우선 탐색(Breath-first-search, BFS) 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하여 그래프를 순회한다. 시작 정점을 방문한 뒤, 깊이가 1인 모든 정점을 방문하고, 그다음에는 깊이가 2인 모든 정점을 방문하는식으로 깊이를 더해가며 해당 깊이에 있는 모든 정점을 방문하며 나아가다가 더 이상 방문할 정점이 없을 때 탐색을 종료한다. 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 사용한다. 큐(queue)를 사용하여 구현한다. (방문한 노드들을 차례로 저장한 후 꺼낸다.) 너비 우선 탐색의 동작 방식 루트 노드를 방문한다. 큐에 방문된 노드를 삽입(enqueue)한다. 초기 상태의 큐에는 시작 노드만이 저장된다. 큐에서 꺼낸 노드..
운영 체제의 구조 운영체제는 크게 커널(Kernel)과 인터페이스(Interface)로 나뉜다. 커널(Kernal) 운영체제의 핵심 기능을 모아놓은 것으로 운영체제의 성능은 커널이 좌우한다. (프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스간 통신 관리등) 자동차에 비유하면 엔진에 해당한다. 같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작할 수 있다.(e.g. 유닉스, 매킨토시) 시스템 호출을 제어한다. 커널은 사용자나 응용프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근을 차단한다. 따라서 자원을 이용하기 위해서는 시스템 호출이라는 인터페이스를 사용해야한다. (e.g. C언어의 printf()함수) 드라이버를 사용하여 다양한 종류의 하드웨어를 커널에 연..
그래프(Graph)란? 그래프는 정점(vertice)과 간선(edge)으로 이루어진 자료구조로, 트리(tree)도 그래프의 종류 중 하나이다. 하지만 그래프의 경우 정점마다 간선이 있거나 없을 수 있으며 루트 노드, 부모-자식이라는 개념이 존재하지 않는다. 그래프 사용 예시 포털 사이트의 검색 엔진, facebook의 네트워킹, 지하철 노선도등 그래프 관련 용어 용어 설명 정점(vertice) 노드(node)라고도 하며 데이터가 저장된다. 간선(edge) 링크(arcs)라고도 하며 노드간의 관계를 나타낸다. 인접 정점(adjacent vertex) 간선에 의해 연결된 정점이다. 단순 경로(simple-path) 경로 중 반복되는 정점이 없는것, 즉 동일한 간선을 자나가지 않는 경로이다. 차수(degree..
운영 체제의 역사 흐름 1940년 최초의 컴퓨터 에니악 등장(미사일 탄도를 계산하기 위해서 제작) 18000개의 진공관을 전선으로 연결하여 논리회로를 구성했다.(hard writing) 다른 작업을 하기 위해서는 전선을 일일히 다시 연결해야했다. 1950년 천공 카드리더 사용 OMR(Optical Mark Reader)의 원조 일괄 처리 시스템(batch processing system) 한번에 한작업만 할 수 있다. 작업에 필요한 프로그램과 데이터를 동시에 입력해야한다. 모든 작업을 한꺼번에 처리해야하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정할 수 없다. 단순 계산 위주의 작업만 가능 라인 프린터 사용 1960년 키보드, 모니터 등장 대화형 시스템(Interactive System) 작..
터미널에 alias(별칭)를 지정하여 자주 사용하는 커맨드를 빠르게 사용할 수 있다. 설정 방법 터미널에 vi ~/.zshrc 입력 사용할 alias 입력 source ~/.zshrc 입력하여 변경 사항 저장 나는 아래와 같이 alias를 등록하였다. # Port alias kill9999='kill -9 $(lsof -t -i tcp:9999)' alias nsl='netstat -na | grep LISTEN | grep $1' alias lsof8080='lsof -i:8080' alias lsof8082='lsof -i:8082' # Git alias gitb='git branch' alias gitl='git log' alias gits='git status' alias gitc='git che..
탐욕 알고리즘(Greedy Algorithm)이란? 선택의 순간마다 당장 눈 앞에 보이는 최적의 해답(local optional solution)을 찾으며, 이를 바탕으로 최종 문제의 해답(global optional solution)에 도달하는 방법이다. 매 순간의 선택은 지역적으로는 최적의 해답이지만, 그 선택들을 반복하여 얻은 최종적인 해답이 최적이라는 보장은 없다. 항상 최적의 해답을 찾는 것은 아니지만, 최적에 근사한 값을 빠르게 찾을 수 있다. 따라서 근사 알고리즘(approximation algorithm)으로 사용할 수 있다. 동적 계획법보다 효율적이지만, 동적 계획법처럼 반드시 최적의 해를 구한다는 보장을 하지 못한다. 탐욕 알고리즘 조건 아래 두가지 조건을 만족하는 경우, 탐욕 알고리즘..
책의 핵심 내용 정리 행동이 상태를 결정한다. 초보자들은 먼저 객체에 필요한 상태가 무엇인지를 결정하고 그 상태에 필요한 행동을 결정한다. 상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다. 객체가 적합한지를 결정하는 것은 그 객체의 상태가 아니라 행동이다. 애플리케이션 안에서 어떤 행동을 원하느냐가 어떤 객체가 적합한지를 결정한다. 상태를 먼저 결정할 경우 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출경우 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노풀될 확률이 높아진다. 객체를 협력자가 아닌 고립된 섬으로 만든다. 상태를 먼저 고려할 경우, 협력이라는 문맥에서 멀리 벗어난 채 객체를 설계함으로써 자연스럽게 협렵에 적합하지 못한..
코드를 작성하다가 폴더 이름에 대소문자 철자 오류가 있는 것을 발견하였다. 따라서 폴더명을 올바르게 고치고 변경 내용을 push하였다. 변경 사항을 반영하기 위하여, 젠킨스 빌드잡을 돌렸는데 빌드잡이 실패하였다. 하지만 내 로컬 환경에서는 정상적으로 작동하였다. 젠킨스 빌드 실패 젠킨스 빌드 실패 로그는 아래와 같았다. 내가 변경한 모듈의 경로를 찾지 못해서 Module not found 에러가 발생한 것이였다. 확인해보니 해당 모듈을 import하는 경로에는 문제가 없었다. 젠킨스 빌드 실패 원인 알고보니 원인은, vscode에서 직접 폴더 이름의 대소문자를 변경한 탓이였다. 나의 로컬 환경에는 변경사항이 적용이 되었지만, 해당 변경사항을 push했을 때, 원격 저장소에 있는 폴더명과 나의 로컬 환경의..