Computer Science 156

데이터베이스 3강 :: 릴레이션, 키, ERD 변환, 관계 연산

데이터베이스 3강을 보며 배운내용 정리(TL;DR) 관계형 모델은 표다 그 표를 릴레이션이라고 하고 그 릴레이션과 함께 사용되는 용어들은 컬럼, 레코드, 키, 스키마 등이 있다 그리고 이 표를 원하는 데이터를 가지고 있게 연산할 수 있다 릴레이션 1개에 사용하는 셀렉트, 프로젝트 등 릴레이션 2개이상에 사용하는 조인, 카티시언 프로덕트 등이 있다 다음 강의 4강은 데이터베이스를 듣기 시작한 이유인 SQL! 기본만 잘 알아놓자! 관계형 모델은 언제 사용하더라? 데이터베이스 2강에서 봤던 그림 호출 논리적 데이터 모델링이란? DBMS 구현 모델에 맞춰 데이터 표현하는 과정 데이터 정의 언어로 적은 개념 스키마 생성 왜 논리적 데이터 모델링이 필요한가? 구현 모델에 맞춰 데이터 수정 ERD를 RDBMS가 수용..

알고리즘 8강 :: 욕심쟁이, 최단경로, 작업스케쥴, 작업 선택

알고리즘 8강을 보며 배운내용 들어가기 전 7강 욕심쟁이 방법 강의를 듣고 욕심쟁이 알고리즘 문제를 풀었는데 강의를 들을 때처럼 꽤 직관적으로 해결됐다 포인트는 1. 최솟값 or 최댓값 합이나 축적된 값을 반환해야 된다면 2. 반복문 or 동적 프로그래밍처럼 값 저장 상기는 이렇게 마치고 8강 시작!! 정리(TL;DR) 각 단계에 충실하는 욕심쟁이 알고리즘으로 문제를 풀 수 있어보인다 최단 경로를 생각하면 지도 앱이 생각나기도 작업 스케쥴링, 작업 선택 문제를 욕심쟁이 방법을 모르고 처음 접했을 때 어버버 했던 기억도 난다 알고나니 간단하구나 한 정점에서 가는 모든 정점의 최단 경로 => Dijkstra 알고리즘 모든 작업 마무리하는 최소 기계 개수 구하기 => 작업 스케쥴링 한 기계로 할 수 있는 최대..

알고리즘 7강 :: 욕심쟁이, 동전거스름돈, 배낭문제, 신장트리

알고리즘 7강을 보며 배운내용 동적 프로그래밍을 6강으로 정리하고 Greedy(욕심쟁이) 알고리즘을 7강, 8강에 걸쳐 배운다 7강에서는 욕심쟁이 알고리즘에 대한 개념과 원리, 특징을 알아보고 예를 살펴본다 정리 그리디(욕심쟁이) 방법은 동적 프로그래밍 방법보다 조금 더 간단하게 다가왔다 최소를 구할 땐 최소의 값을 택하고 최대를 구할 땐 최대의 값을 택하는 직관적인 방법으로 보인다 이것 역시 유명한 알고리즘을 풀어보고 변형으로 넘어가면 꽤 이해가 되지 않을까 싶다 욕심쟁이 방법 전후 선택과 상관없이 해당 단계에서 가장 최선이라고 여겨지는 해를 선택해서 전체적인 최적해를 구한다 탐욕적 방법, 그리디(Greedy) 라고도 불린다 동적 프로그래밍 vs 욕심쟁이 공통 최적화 문제에 주로 사용 최적성의 원리가 ..

알고리즘 6강 :: 동적 프로그래밍 점화식, 편집 거리, 최단 경로

알고리즘 6강을 보며 배운내용 5강에 이어 6강도 동적 프로그래밍! 동적 프로그래밍의 포인트는 문제를 작은 문제로 쪼개고, 작은 문제에 대한 점화식을 이용해서 값을 구하고 저장 저장된 값과 점화식을 반복해서 이용해서 마지막까지 가서 문제의 답을 구하는 것 BUT 점화식 구하는게 쉽지않다 그럼 어떻게 할까? 유명한 점화식 그러면 우선은 유명한 점화식 이해를 먼저 하자 유명 점화식이 아무래도 여러 문제에 적용되어 있을 것 자주 보고, 사용하며 제대로 이해하면 다른 문제에 조금씩 변형하면서 사용가능할 것 같다 스트링 편집 거리 X = x1x2 ... xn Y = y1y2 ... ym 문자열 X를 Y로 변환하는데 필요한 편집 연산의 최소 비용 구하는 것 삽입, 삭제, 변경에 대한 최소 비용 X = SNOWY Y..

데이터베이스 2강 :: 데이터베이스 모델링 왜? 개체집합, 관계집합

데이터베이스 2강을 보며 배운내용 데이터베이스 모델링 왜 필요할까? 데이터베이스 효율적으로 이용하기 위한 계획 데이터 의미 파악, 데이터 관여 업무를 정의하고 분석하려고 👀 관점 비즈니스적 관점 : 어떤 데이터 저장하나? 프로그래머 관점 : 어떻게 데이터를 저장할까? ✅ 모델링 단계 데이터 모델 의미, 데이터 타입, 연산 등 명시하기 위해 사용하는 개념 집합 데이터 모델링 실세계 일부분을 DBMS가 지원하는 데이터 모델의 형태로 나타내는 것 사용자 요구사항 분석 사전 분석없이 설계가 불가능하다 데이터가 복잡해지고 수명주기가 짧아져서 신속, 정확이 필요 ✅ 요구사항 단계 도출 => 분석 => 기록 순서로 수행 ER 모델 실세계 속성들로 이루어진 개체(Entity)와 개체 사이의 관계(Relationship..

알고리즘 5강 :: 동적 프로그래밍 알고리즘 원리, 연쇄 행렬 곱셈

알고리즘 5강을 보며 배운내용 앞에서 분할정복에 대해 2강에 들었는데 동적 프로그래밍 알고리즘도 방법, 원리 특징을 2강에 걸쳐 배운다 동적 프로그래밍 알고리즘 원리 문제 크기가 작은 문제에 대해 해를 구하고, 크기가 조금 더 큰 문제의 해를 단계적으로 구해가는 상향식 접근 방법(bottom up) 작은 문제의 해는 테이블에 저장 해놓고 재사용 해를 구축하는 테이블을 이용한다고 해서 동적 프로그래밍이라 한다 소문제들 서로 독립적일 필요 없고, 중복되는 부분 존재한다 주로 최적화 문제 최적화 문제에 사용한다 최솟값, 최댓값, 피보나치 수열, 연쇄 행렬 곱셈 ... 사용하려면 최적성의 원리(Principle of optimality) 만족해야 동적 프로그래밍을 적용할 수 있다 => 주어진 문제의 최적해는 소..

알고리즘 4강 :: 합병 정렬, 선택 문제

알고리즘 4강을 보며 배운내용 분할정복 알고리즘 2탄 => 분할정복 알고리즘 1탄: 이진 탐색, 퀵 정렬 복습 순환적으로 문제를 하향식 접근으로 푼다 분할 - 정복 - 결합으로 문제를 푼다 분할된 문제는 크기만 작고 원래 문제와 같다 오늘은 합병정렬과 선택문제 합병 정렬 분할 정복 방법으로 정렬 분할, 정복, 결합을 잘 지키는 정렬 n만큼 저장장소(왼쪽배열, 오른쪽배열)가 필요하다 ⌛ 시간 복잡도 O(nlogn) ✨ 방법 분할: 동일한 크기로 나누기 정복: 부분배열을 순환적으로 정렬 결합: 합병해서 정렬된 배열 만든다 🤖 코드 // 합병 정렬 JavaScript function mergeSort(원배열, 길이) { if(n > 1) { let mid = Math.ceil(길이 / 2) let 왼쪽배열 =..

알고리즘 3강 :: 분할정복, 이진탐색, 퀵정렬

알고리즘 3강을 보며 배운내용 3대 알고리즘중 하나 분할정복 방법의 원리, 특징, 단계를 알아봐야지 분할정복 방법 원리 순환적(recursively) 문제를 하향식(top-down) 접근 문제를 계속 분할하고, 해결된 값(해)를 결합해서 문제의 답을 구한다 특징 분학된 작은 문제는 원래 문제와 같다 입력 크키가 작아진 것 분할된 작은 문제는 독립적이다 그래서 반복해서 분할과 결과를 합칠 수 있다 처리 단계 분할: 문제를 여러 개의 작은 문제로 나누기 정복: 작은 문제를 더 분할되지 않을 크기가 되면 해를 구하기 결합: 정복된 해를 결합해서 원래 문제의 해(값)을 구한다 결합 단계가 없는 문제도 있다고 한다 분할 정복은 어디에 쓸까? 이진 탐색, 퀵 정렬, 합병 정렬, 선택 문제 이진 탐색 한 쪽만 조지는..

데이터베이스 1강 :: 데이터베이스 등장배경, DBMS, 시스템 아키텍처

데이터베이스 1강을 보며 배운내용 데이터베이스 강의 시청 시작 목표는 기본적인 SQL 배우기 AI 새삼 데이터베이스의 역사를 듣다보니 갑자기 AI가 등장한게 아니라는게 느껴진다 데이터를 받기 시작한 때부터 쌓이고, 신속하게 처리할 방법을 연구하고 데이터를 분석하다 보니 자연스레 등장하게 된 것 같다 다음은 뭘까? 데이터베이스 이전(🇧🇩 : Before Database) 데이터 중복 문제 데이터 중복이 많아지면, 일관성, 보안성, 경제성에서 문제 발생 무결성 훼손 문제 데이터가 가질 수 있는 가능 범위(제약조건)를 포함한다 동시 접근의 문제 동일 데이터에 다수 사용자가 접근하면 일관성 훼손된다 데이터베이스 등장(🇦🇩 : After Database) 위의 문제들을 막기 위해 데이터베이스가 나왔다 데이터 사용..

알고리즘 2강 :: 대표적인 알고리즘 3가지, 점근 성능

알고리즘 2강을 보며 배운내용 알고리즘의 정의 입출력, 명확성, 유한성, 유효성을 만족하고 효율적이어야 한다 순차탐색 처음부터 순서대로 찾는 방법 이진 탐색 반으로 나눠서 탐색 순서대로 되어있을 때 사용하면 좋다 랜덤이면 사용할 수 없다 대표적인 알고리즘 설계 기법 3가지 분할정복(divide and conquer) 동적 프로그래밍(dynamic programming) 욕심쟁이(greedy) 알고리즘 분석 정확성, 효율성 효율성 분석 메모리 양 => 공간 복잡도(space complexity) 수행 시간 => 시간 복잡도(time complexity) 메모리 적게 쓰고, 수행 시간 짧은게 좋은 알고리즘 보통 시간 복잡도만 따진다(메모리는 구하기 쉬워서) 시간 복잡도 알고리즘 단위 연산의 수행 횟수의 더해..

728x90