: 배열의 크기를 더이상 나눠지지 않은 형태까지 분할하고(Divide), 전부다 합쳐질 때 까지 정렬하며 합친다(Conquer) 어떠한 경우에도 O(n logn) 시간 복잡도를 갖는다.(복잡도가 안정적) Divide and Conquer 방식 문제를 작은 단위의 문제로 분할하고 각각을 해결(정복)한다음 결합해서 문제를...
퀵 정렬(Quick sort)
: pivot(보통 가운데 값)을 기준으로 좌우 구간으로 나눠 정복(분할, 정복). e.g. 오름차순의 경우, pivot 왼쪽엔 pivot보다 작은 값을, 오른쪽엔 큰 값을 위치하도록 partition. 또 이렇게 나뉜 좌 우 배열을 다시 quick sort 수행(분할). 이 때 pivot 값은 해당 부분 배열에서 이미 본인의 위치를 찾은 것이...
프로세스(Process)
: 실행중인 프로그램. 디스크로부터 메모리에 적재되어 CPU의 할당을 받고, OS로부터 주소 공간, 메모리 등을 할당받는 것 Memory Section Data(BSS + DATA) 전역 변수(초기화 되지 않은 전역변수는 BSS영역에, 나머지는 DATA영역), static 변수 저장 프로세스 생성 시점에 ...
선택 정렬(Select sort)
: 제자리 정렬 알고리즘. 가장 작은원소를 찾아 첫번째 자리에, 그 다음을 찾아 두번째 자리에 .... 이러한 방식으로 진행 기본적으로 O(n^2) 의 시간복잡도를 갖는다. 장점: 자료 이동 횟수가 미리 결정됨 단점: 값이 같은 레코드가 있는 경우에 상대적인 위치가 변경될 수 있다. 정렬 안정성을 만족하지 않는다. -...
버블 정렬(Bubble sort)
: 인접한 두 원소끼리 비교해, 크기가 순서대로 되어있지 않으면 두개를 바꾼다. 기본적으로 O(n^2) 시간복잡도를 갖는다. 그냥 무조건 for문 두번 돌기 때문에 최악, 평균 이런거 없이 다 O(N^2) 선택정렬과 기본 개념이 유사 장점: 간단하다 단...
JPA 연관관계
연관관계 객체 연관관계와 DB 연관관계를 어떻게 매핑할지를 고민 이를 통해 객체지향과 DB사이의 패러다임 불일치 해결 필요한 이유? 객체지향적으로 설계하기 위해 테이블에 맞춰 데이터중심으로 모델링하는 경우 객체 관점, DB 관점 존재 DB관점에서는 외래키 하나로 양쪽 테이블을 조인한다. ...
삽입 정렬(Insert sort)
: 두번째 element부터 시작해 본인의 앞 element들과 비교하면서(계속 swap하면서) 본인의 위치를 찾아감. 최선의 경우 : 이동 없이 1번의 비교만 이루어지는 경우(이미 정렬되어 있는 경우) O(N) 시간복잡도를 갖는다. 최악의 경우 : 완전 역순으로 되어있을 때 O(n^2)...
MST(최소 스패닝 트리)와 Kruskal, Prim
: 최소한의 연결을 가지면서 모든 정점을 포함하고, 가중치도 최소인 것 특징 스패닝 트리 중 간선 가중치 합이 최소 스패닝 트리이므로 n-1개의 간선 간선의 weight(가중치) 합이 최소여야 한다. Cycle이 없어야 한다. 스패닝 트리? 최소한의 연결로 모든 정점을 포함하는 트리 ...
JPA + Kotlin에서 고려할 것들
Entity는 public, protected의 매개변수가 없는 “기본 생성자(No-argument 생성자)”를 가지고 있어야 한다. 클래스 상태를 초기화 할 때 기본 생성자를 이용하기 때문. 코틀린에서는 @Entity / @Embeddable / @MappedSuperClass annotation이 붙어있을 때...
HTTP 1.0, HTTP 1.1, HTTP 2.0
HTTP/1.0 처음으로 널리 쓰인 HTTP 버전 1연결당 1Req,1Res를 처리 keep-alive 헤더로 connection 유지 가능 브라우저에서 요청에 대한 성공과 실패를 바로 알 수 있게 됨. 이전(0.9)에는 GET만 사용했고, 여기서 POST 추가됨 HTTP/1.1 ...