본문 바로가기
728x90

알고리즘6

Segment tree 개요 Tree 구간의 정보를 빠르게 구하고 수정하기 [ 세그먼트 트리 관련글 ] 1. Segtree 단일정보 (합/최대) 단일 업데이트 [합] G1 2042 구간 합 구하기 G1 1275 커피숍2 G1 2268 수들의 합 7 G1 12837 가계부 (Hard) G1 18436 수열과 쿼리 37 [곱] G1 11505 구간 곱 구하기 G1 5676 음주 코딩 [최대최소] G1 10868 최솟값 G1 14438 수열과 쿼리 17 G1 2357 최솟값과 최댓값 [인덱스] G1 14428 수열과 쿼리 16 G2 14427 수열과 쿼리 15 2. Fenwick tree 코드 단순화 - 3. Lazy prop 다중업데이트 4. 금광 Seg 혼합 정보 (합의 최대) 접근 메이저하고 유용한 알고리즘, 세그트리에 도착했.. 2023. 4. 23.
Circumcenter (추가중) 개요 Geometry 삼각형의 외심 구하기 접근 고등수학에서 외심의 정의부터 복습해보자. 외심은 세 꼭짓점으로부터의 거리가 같은 점이다. 정의를 바탕으로 점을 구해보자. 방식은 좌표로 노가다하는 법과 벡터를 이용하는 방법 (1), (2)가 있는데, 좌표 노가다부터 해보자. 내심은 좌표를 이용하는 방법에서 식이 너무 길어져서 포기했다. 벡터를 이용하는 방법을 읽어보면 내심도 쉽게 구할 수 있으니 잘 읽어보자. 1. 좌표 이용하기 점 A,B,C를 (x1,y1,z1), (x2,y2,z2), (x3,y3,z3) 라고 하면, 외심 P(x,y,z)와 외접원의 반지름 R에 대해 다음이 성립한다. $(x-x_1)^2+(y-y_1)^2+(z-z_1)^2$ $=(x-x_2)^2+(y-y_2)^2+(z-z_2)^2$ $=(.. 2023. 4. 8.
Barycentric, Trilinear coordinate 개요 Geometry 삼각형과 관련된 점을 나타내는 새로운 좌표체계 접근 Barycentric, Trilinear 고등수학에서 삼각형의 오심에 대해 배운다. 외심, 내심, 무게중심, 수심, 방심인데, 외심 내심 무게중심을 제외하고는 잘 쓰지 않는다. 외심과 내심 무게 중심을 벡터를 이용해 일반화하려면 생각할 부분이 많아지는데, 이때 좌표계를 새로 정의해 나타내면 생각이 쉬워진다. 편의상 외심, 내심, 무게중심을 각각 O, I, G라고 하자. Barycentric coordinate, 무게중심 좌표는 이름의 무게중심과 달리 G만 나타내는 것은 아니고, 삼각형 내부의 점 P에 대해 ▵BPC, ▵CPA, ▵APB의 넓이의 비를 나타내는 좌표이다. $\alpha:.. 2023. 4. 8.
Subset sum problem 개요 NP-complete 집합 내 원소의 합으로 S를 구성하는 방법의 수 구하기 P, NP문제는 너무 어려워서 이해하는 데에도 시간이 꽤 오래걸렸다. 막 작성해보는 중인데 NP-hard, NP-complete나 "deterministic"에 대한 이해가 어려워서 일단 SSP부터 정리하고 가려고 한다. 접근 SSP는 NP-complete 문제이다. 다항 시간 내에 검증이 가능하고, 다항시간 내에 해결이 불가능하다. SSP의 해결방법은 크게 세 가지를 소개하려 하는데, Bruteforce, Meet in the middle, Knapsack이다. Bruteforce Meet in the middle Knapsack $O(2^n)$ $O(2\times 2^{n\over 2})$ $O(nS)$ 1. Brute.. 2023. 3. 31.
Bipartite matching 개요 Network flow, 비선형 그래프 이분 그래프의 최대유량 구하기 접근 이분 이분 이라는 단어를 보고 파블로프의 개마냥 이분탐색을 생각하기 쉽다. 이분과 매칭이라니, 리스트를 절반으로 나누면서 탐색하는 문제인가? 하는 생각을 하기 쉽다. 하지만 이분탐색과는 단 하나도 관련이 없다. 우선 그래프란, 컴퓨터가 데이터를 이해하고 인간이 데이터를 처리하기 쉽도록 만든 데이터의 연결관계이다. 이걸 자료구조라고 하고, 연결 방식에 따라 선형과 비선형으로 나뉘는데 그래프는 이 중 비선형 구조에 해당한다. 선형 구조는 리스트, 스택, 큐처럼 인접한 원소의 인덱싱이 선형적인 관계를 가지는 것들이라 생각하면 쉽다. 연결 구조를 나타낼 수만 있으면 그래프가 되기 때문에 배열, 행렬도 모두 그래프가 된다. 모든 지점.. 2023. 3. 15.
Freivald's algorithm 개요 Approximation, 확률론 A×B=C를 O(kN^2)에 해결하기 접근 기존의 행렬곱 일반적인 상황은 아니지만, 두 행렬의 곱이 다른 행렬과 같은지 확인해야 하는 상황이 있다. A×B=C를 검증한다고 가정하자. 만약 A,B,C의 크기가 각각 [p,m], [m,q], [p,q] 라면 곱셈 연산을 하는데 p×m×q번의 연산이 필요하고, 정수행렬 C를 만들기 위해 p×q×4 만큼의 메모리가 필요하다. 왜냐? 일반적으로 행렬곱 계산은 아래와 같이 해주기 때문이다. for (i = 0~p) for (j = 0~q) for (k = 0~m) C[i][j]+=A[i][k]*B[k][j] 크기가 100×100정도라면 큰 문제가 아니다. 하지만 1000이면 1e9번의 연산을 해야하고, 시간을 1분을 주지 않는.. 2023. 3. 12.
728x90