분류 전체보기 90

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 같이 끊을 수 있는 작업에서 빠르게 작동시킬 수 있음. -..

IL2CPP

유니티는 C#으로 개발하기 때문에 느리다? -> C#은 개발의 효율성을 위해 유저 코드가 C#으로 이루어 지지만, Unity 엔진은 C++로 구성되어 있어 실제로는 빠르게 개발할 수 있다. 이러한 구조를 알기 위해선 C#과 C++의 차이점을 알아야 한다. - 동적할당 C++은 new를 선언하게 되면 항상 delete를 통해 동적할당을 끝맺어야 한다. 그렇지 않으면 메모리는 계속적으로 new에 대한 값을 갖게 되며 결과적으로 메모리에 대한 과부하가 일어나게 되기 때문이다. 하지만 C#은 GC (Garbage Collection)이라는 기능이 알아서 처리해주기 때문에 좀 더 편하게 작업을 진행 할 수 있다. --> 이러한 점으로 미루어 보아, C#은 동적할당 해제 필요성이 없기 때문에 코드 작성에 있어 C+..

정리/UNITY 2022.03.19

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] // 시간복잡도 : 트리의 높이에 비례한 시간이 걸림...

건강에 대한 논문 링크 모음

눈과 컴퓨터 사용에 대한 상관관계 (초등학생 대상) https://www.koreascience.or.kr/article/CFKO200434939592807.page Influences of Computer Use on the Eye-Sights of Higher Grades Pupils in Primary Schools -한국정보교육학회:학술대 Abstract 한국정보문화진흥원에 따르면 국내 전체 가구 컴퓨터 보급률은 매년 증가하고 있는 추세이며 전체 국민의 인터넷 이용률 및 계층별 인터넷 이용률 모두 매년 증가하고 있어 사회 전반의 www.koreascience.or.kr

정리/Reference 2022.03.17

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) 방법을 통해 리스트를 정렬한다. 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라고 한다. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. 이렇게 리스트를 둘로 나누는 것을 분할이라고 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다. 분..

BookMark LoopUp

USE Northwind; -- 북마크 룩업 -- Index Scan vs Index Seek -- Index Scan이 항상 나쁜 것은 아니고 -- Index Seek가 항상 좋은 것은 아니다. -- 인덱스를 활용하는데 어떻게 느릴 수 있을까? --NonClustered --Clustered --Heap Table -- Clustered의 경우 Index Seek가 느릴 수가 없다. -- NonClustered의 경우, 데이터가 Leaf Page에 없다. -- 따라서 한 번 더 타고 가야함 -- 1) RID -> Heap Table (Bookmark Lookup) -- 2) Key -> Clustered SELECT* INTO TestOrders FROM Orders; SELECT* FROM TestO..

INDEX SCAN vs INDEX SEEK

USE Northwind; -- 인덱스 접근 방식 (Access) -- Index Scan vs Index Seek CREATE TABLE TestAccess ( id INT NOT NULL, name NCHAR(50) NOT NULL, dummy NCHAR(1000) NULL, ); GO CREATE CLUSTERED INDEX TestAccess_CI ON TestAccess(id); Go CREATE NONCLUSTERED INDEX TestAccess_NCI ON TestAccess(name); GO DECLARE @i INT; SET @i = 1; WHILE(@I 실제 데이터를 찾기 위해 페이지 수 SET STATISTICS TIME ON; SET STATISTICS IO ON; -- INDEX..