[DataBase] 03. SQL(Structured Query Language)(2)
·
Computer Science/Database
SQL(Structured Query Language)(2)#Database/Concepts/Temp(10/10) 굉장히 공들여서 작성한 글이여서 원래 동아리 스터디 용도로 일부 공개 했었는데, 더 많은 분들이 봤으면 하는 마음에 오픈!게시글 길이 제한으로 글을 분리해서 업로드하는 점 양해 바랍니다SQL에서의 집합 연산 (SET Operations in SQL)위에서는 특정 릴레이션들에서 특정 조건을 만족하는 튜플, 또는 그 튜플 중 원하는 attribute를 선택하는(= 쿼리) 구문에 대해 배웠다.여기서부터는 두 개 이상의 쿼리 결과를 조합해서 하나의 결과 집합을 만들어내는 집합 연산에 대해 알아본다. (쿼리 + 쿼리)SQL은 테이블 데이터에 대해 수행될 수 있는 집합 연산을 지원합니다.이는 테이블에 ..
[DataBase] 03. SQL(Structured Query Language)(1)
·
Computer Science/Database
SQL(Structured Query Language)(1)#Database/Concepts/Temp(10/10) 굉장히 공들여서 작성한 글이여서 원래 동아리 스터디 용도로 일부 공개 했었는데, 더 많은 분들이 봤으면 하는 마음에 오픈!게시글 길이 제한으로 글을 분리해서 업로드하는 점 양해 바랍니다첫 번째 챕터에서 데이터를 정의하는 언어 DDL, 데이터를 조작하는 언어 DML에 대해서 배웠고 데이터베이스에 접근하고 조작하는데 사용하는 표준적인 언어로 SQL에 대해서 간단히 소개하였다. 이번 챕터에서는 SQL에 대해 자세히 다룬다. SQL의 중요성에 대해선 첫 번째 챕터에서 다뤘으므로 넘어간다.SQL Parts - 개요SQL은 DDL, DML, DCL, TCL 모두를 포함하고 있다. 이 4가지에 대해서 배..
[DataBase] 02. Relational Model(관계형 모델)
·
Computer Science/Database
Relational Model(관계형 모델)#Database/Concepts(10/10) 굉장히 공들여서 작성한 글이여서 원래 동아리 스터디 용도로 일부 공개 했었는데, 더 많은 분들이 봤으면 하는 마음에 오픈!이전 챕터에서 여러 종류의 Data Model에 대해 간단히 언급하고 넘어갔다. 그 중 Relational Model에 대해 이번 챕터에서 다루게 된다.관계형 모델로 만들어진 데이터베이스를 RDB라고 한다. RDB는 매우 중요하다. 실제로 여러분이 사용하는 서비스 대부분에서 대부분의 도메인을 RDB로 저장하고 있다.Application에서 사용하는 DBMS나 프로그래밍 언어, 프레임워크는 언젠간 새롭고 더 나은 것으로 바뀔 것이다. 현재 IT 서비스 기업에서 가장 많이 사용하는 자바, 스프링, M..
[DataBase] 01. Introduction
·
Computer Science/Database
Introduction#Database/Concepts(10/10) 굉장히 공들여서 작성한 글이여서 원래 동아리 스터디 용도로 일부 공개 했었는데, 더 많은 분들이 봤으면 하는 마음에 오픈!들어가기 앞서이 과목을 배우기 앞서서 Database가 왜 필요한 지부터 생각해보자.여러분이 수강신청 시스템을 만들어야 하는 개발자가 되었다고 생각해보자. 기존에 배웠던 프로그래밍 문법(Java, C)와 GUI를 이용해서 수강신청 시스템을 만들기로 했다. 어떻게 해서 수강 과목, 회원, 클래스를 만들고 프로그래밍을 완료해서 컴파일후 프로그램을 실행시킨다. 하지만 이 프로그래밍이 종료되면 메모리 상의 데이터는 모두 사라지게 된다.따라서 여러분들은 프로그래밍입문 시간에 배운 파일 입출력을 이용해서 2차 저장소(HDD or..
[컴퓨터 구조] 01. Computer Abstractions and Technology
·
Computer Science/컴퓨터구조
Computer Abstractions and Technology#Computer_Architecture1장: 컴퓨터 추상화 및 기술컴퓨터 혁명(The Computer Revolution)컴퓨터 기술의 발전은 도메인 특화 가속기(Domain-Specific Accelerators)에 의해 뒷받침됨새로운 응용 프로그램을 실현 가능하게 만듦자동차 내 컴퓨터, 휴대폰, 인간 게놈 프로젝트, 월드 와이드 웹, 검색 엔진 등 다양한 곳에서 사용됨컴퓨터는 우리의 생활 전반에 걸쳐 존재컴퓨터의 종류(Classes of Computers)개인용 컴퓨터 (Personal Computers)범용 컴퓨터로 다양한 소프트웨어를 사용비용과 성능 간의 상충(tradeoff)이 존재서버 컴퓨터 (Server Computers)네트..
[Algorithm/DP] 문자열과 시퀀스에 대한 동적 계획법 - 최장 공통 부분 시퀀스(LCS) 문제(메모이제이션, 타뷸레이션, 브루트포스)
·
Computer Science/Algorithm
문자열과 시퀀스에 대한 동적 계획법이전 게시물에서 다룬 문제는 정수 시퀀스 계산 문제에 초점을 두었다.이번에는 동적 계획법이 많이 사용되는 분야 중의 하나인 데이터 시퀀스의 패턴 문제에 대해 알아본다.주로 문자열 검색, 비교, 문자열 재구성 등의 문제와 관련이 있다.EX) 버전 관리 시스템(VCS)Git과 같은 VCS에서 우리가 다룰 데이터 시퀀스의 패턴 문제가 적용된다VCS는 변경된 소스 코드 부분을 쉽게 찾아보기 위해 두 가지 버전의 소스 코드를 비교하여 사용자에게 차이점을 표시해주는 비교 기능을 제공한다두 버전에 공통적인 문자열 시퀀스가 연속적일 필요가 없다는 사실을 고려하여 두 소스 코드의 유사성을 판별해야 한다.문자열 일부가 제거되거나 새로운 문자열이 임의 위치에 추가될 수도 있다.이러한 작업은..
[Algorithm/DP] 부분집합의 합 문제(브루트포스, 백트래킹, 메모이제이션, 타뷸레이션)
·
Computer Science/Algorithm
부분집합의 합 문제(브루트포스, 백트래킹, 메모이제이션, 타뷸레이션)금전등록기에 남아 있는 동전을 조합하여 필요한 거스름돈을 만들 수 있는지 확인해보자.필요한 잔돈이 73270원이고, 10000원권, 1000원권과 500원, 100원, 50원, 10원 동전들이 전체 100개가 들어있다면?가능한 모든 조합을 시도해보면서 거스름돈의 금액을 맞추는 것은 너무 복잡해지고 실제로 구현하는 것은 너무 복잡하고 비현실적이러한 문제를 부분집합의 합 문제(subset sum problem)이라고 한다"음수가 아닌 정수로 이루어진 집합 S와 임의의 정수 x가 주어질 때, S의 부분집합 중에서 그 원소의 합이 x와 같은 부분집합이 존재하는가?"ex) S = {13, 79, 45, 29}, x = 42 --> True원소의 ..
[Algorithm/DP] 동적 계획법(Dynamic Programming)
·
Computer Science/Algorithm
동적 계획법(Dynamic Programming)이란?분할 정복 패러다임 개념을 확장한 것앞서 다룬 분할정복 / 그리디 알고리즘으로 해결할 수 없는 문제 중에서 재귀적으로 표현할 수 있는 문제는 동적 계획법을 이용한 문제 해결 방법이 적합할 수 있다.ex)조합(특정 기준을 만족하는 시퀀스의 조합 또는 순열의 개수 구하기)문자열과 시퀀스(편집 거리, 최장 공통 부분 시퀀스, 최장 증가 부분 시퀀스 등)그래프(최단 경로 문제)머신 러닝(음성/얼굴 인식)Ex) 피보나치 수열 문제의 특성피보나치 수열은 F(n) = F(n - 1) + F(n - 2)의 재귀적인 관계를 가지고 있다.위 수식은 이 수열의 재귀 관계를 표현한다.이 수열의 처음 두 원소 F(0), F(1)은 기조 조건(base case)이라고 부르며,..
[Algorithm/Graph] 강한 연결 요소와 코사라주 알고리즘(Kosaraju's algorithm)
·
Computer Science/Algorithm
강한 연결 요소동영상 서비스 사이트에서 다양한 채널 구독자 간의 공통점에 대한 통계를 작성하여, 서로 연관이 있는 구독 정보 그룹으로 나누려고 한다. 이 때 방향 그래프에서 나타나는 공통적인 특징을 이용하여 이러한 복잡한 문제를 해결할 수 있다. 방향 그래프에서 에지는 명시적인 "방향" 정보를 가진다. 방향 그래프에서 에지는 한쪽 방향으로만 이동할 수 있기 때문에 그래프의 특정 정점에 도달할 수 있는지 여부는 탐색을 어느 정점에서 시작했는지에 따라 다르게 결정된다.주어진 그래프를 여러 개의 구역으로 나누되 같은 구역 안의 정점끼리는 서로 이동 가능한 경로를 갖도록 나눌 경우, 각 구역은 해당 그래프의 강한 연결 요소를 나타낸다. 방향 그래프와 무방향 그래프에서 연결성무방향 그래프에서 연결 요소(conne..
[Algorithm/Graph] 벨만-포드 알고리즘(Bellman-Ford algorithm)과 음수 가중치 사이클 찾기
·
Computer Science/Algorithm
벨만 포드 알고리즘그래프의 모든 에지에 대해 다익스트라의 그리디 선택 방법을 (V - 1)번 반복하여 점진적으로 최단 거리를 찾는다 (V는 정점의 개수)음수 가중치가 있는 그래프를 다룰 때 벨만 포드 그래프를 사용할 수 있다.다익스트라 알고리즘에 비해 높은 점근적 시간 복잡도를 가지지만, 다익스트라 알고리즘이 잘못 해석할 수 있는 그래프에 대해서도 정확한 결과를 제공한다. 벨만-포드 알고리즘 구현각 정점의 최단 거리 값 배열을 반환하는 함수struct Edge{ int src; int dst; int weight;};const int UNKNOWN = INT_MAX;vector BellmanFord(vector edges, int V, int start){ vector distance(V, UNKNOWN..