공부 63

HTML 기초 #1

디버깅 엔진 설치 [ATOM] 적정 File Folder을 만든다. 간단한 문구 적은 뒤 저장 폴더에 가서 Web Page를 연다. wow! 작동 원리 클라이언트에서 웹 서버로 접속한다. 웹 서버에서 클라이언트가 요청하는 HTML 파일을 읽어와 클라이언트에 전송한다. 이를 클라이언트에서 파싱하여 요청한 웹 화면을 보게 된다. 본격적으로 알아보기 이거슨 노지환이 직접 만드는 HTML의 페이지이다. 노지환 왈 "왈왈왈" 이라고 전했다. 이거슨 굵기 이거슨 스트롱맨 https://www.w3schools.com/tags HTML Reference W3Schools offers free online tutorials, references and exercises in all the major languages ..

공부/웹서버 2022.03.25

동적 계획법

#include #include #include #include #include using namespace std; // 동적 계획법 (DP) // memoization int cache[50][50]; // n개에서 r개를 추출할 경우의 수를 계산하는 함수 int combination(int n, int r) { // 0개를 뽑을 경우 및 n개에서 n개를 뽑을 경우 경우의 수는 1개이다. if (r == 0 || n == r) return 1; // 이미 답을 구한 적 있으면 바로 반환 int& ret = cache[n][r]; if (ret != -1) return ret; // 새로 답을 구해서 캐시에 저장 return ret = combination(n - 1, r - 1) + combinati..

데이터 베이스 원리

[데이터 베이스] - 데이터를 보다 많이 - 데이터를 좀 더 빠르게 - 데이터를 보다 안전하게. 데이터 저장은 하드 디스크에 저장되어야 지속적 보관이 가능하다. 하지만, 디스크까지 접근 시 시간적 비용이 많이 들기 때문에 효율성을 위해 여러 방법이 필요하다. 데이터 베이스 구동 원리 요청 - Client에서 원하는 데이터를 요청한다. (쓰기, 읽기) 이때 버퍼 캐시는 데이터베이스의 서버 쓰레드가 처리하여 빠르게 요청에 대답을 전달한다. 캐싱 확인 - 만약 메모리(RAM)에 캐싱 되어 있는 상태라면 바로 요청에 응답하지만 캐싱이 안되어 있다면 하드디스크 에 접근한다. 쓰기는 데이터베이스에 접근하기 전 사용자에게 미리 완료여부를 전달한 후, 버퍼캐시에 Task(밀린 쓰기 작업)을 저장한다. 백그라운드 쓰레드..

Sorting

USE BaseballData -- Sorting (정렬) 을 줄이자 ! -- O(N LogN) -> DB는 데이터가 어마어마하게 많다 -- 너무 용량이 커서 가용 메모리로 커버가 안 되면 -> 디스크까지 찾아간다. /* -- Sorting이 일어날 때 --1) Sort Merge Join -- 원인) 알고리즘 특성상 Merge하기 전에 Sort를 해야 함 2) ORDER BY 3) GROUP BY 4) DISTINCT 5) UNION 6) RANTKING WINDOWS FUNCTION 7) MIN MAX */ -- ORDER BY -- 원인) ORDER BY 순서로 정렬을 해야 하니까 Sort SELECT* FROM players ORDER BY college; -- GROUP BY -- 원인) 집게를..

Kruskal 알고리즘

#include #include #include #include using namespace std; /* Kruskal 알고리즘 스패닝 트리-간선의 수를 최소화(사이클이 생기면 안된다)해서, 모든 정점을 연결한다. N개의 정점을 N-1개의 간선으로 연결 ex) 통신 네트워크 구축 -> 실용성이 있을려면, 비용을 최소화 해야한다. 크루스칼 MST 알고리즘 - 탐욕적인(Greedy) 방법을 이용 - 지금 이 순간에 최적인 답을 선택하여 결과를 도출하자. - 모든 길을 확인하고, 최저 비용을 먼저 연결시킨다. - 노드간에 길이 안뚤린 곳이 있으면, 다시 최저 비용을 확인하고 연결시킨다. - 순환이 되지 않도록 항상 주의한다. -> 순환이 되는 노드들을 하나의 묶음으로 취급한다. 상호 배타적 집합(Disjoi..

JOIN의 원리

NL(Nested Loop) , Merge 조인 USE BaseballData; SET STATISTICS TIME ON; SET STATISTICS IO ON; SET STATISTICS PROFILE ON; -- 조인 원리 -- 1) Nested Loop (NL) 조인 -- 2) Merge(병합) 조인 -- 3) Hash(해시) 조인 -- Nested Loop SELECT top 5* FROM players AS p INNER JOIN salaries AS s ON p.playerID = s.playerID; -- 상단 players에서 하나하나 salaries의 playerID를 비교하여 찾는 작업 -- 효율이 떨어질 수 있지만, top 5 같이 끊을 수 있는 작업에서 빠르게 작동시킬 수 있음. -..

DisjointSet

#include #include using namespace std; // 그래프 / 트리 응용 // 오늘의 주제 : 최소 스패닝 트리 (Minimum Spanning Tree) // 상호 배타적 집합 (Disjoint Set) // -> 유니온-파인드 Union - Find (합치기-찾기) // Lineage Battleground 개발 // 혈맹전 + 서바이벌 // 1인 팀 1000명 (팀 id 0~999) // 동맹 (1번팀 + 2번팀 = 1번팀) // 트리 구조를 이용한 상호 배타적 집합의 표현 // [0] [1] [2] [3] [4] struct Node { Node* leader; }; // [1][3] // [2] [4][5] //[0] // 시간복잡도 : 트리의 높이에 비례한 시간이 걸림...

Hashmap (해쉬 맵)

#include #include #include #include #include using namespace std; #include // 해시 테이블 // map vs hash_map // map : Red-Black Tree // 균형적 이진 트리 // - 추가/탐색/삭제 O(logN) // C# dictionary = C++ map (X) // C# dictionary = C++ unordered_map // hash_map(c++11 표준 unordered_map) // - 추가/탐색/삭제 O(1) // 메모리를 내주고 속도를 얻는다. // EX) 아파트 우편함 // [201][202][203][204][205] // [101][102][103][104][105] // 1 ~ 1000 user( ..

퀵 정렬 (Quick Sort)

퀵 정렬(Quicksort)은 찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘이다. 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. 퀵 정렬은 n개의 데이터를 정렬할 때, 최악의 경우에는 O(n2)번의 비교를 수행하고, 평균적으로 O(n log n)번의 비교를 수행한다. 알고리즘 퀵 정렬은 분할 정복(divide and conquer) 방법을 통해 리스트를 정렬한다. 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라고 한다. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. 이렇게 리스트를 둘로 나누는 것을 분할이라고 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다. 분..