[Dynamic Programming] Working Days & Path Counting & Matrix Chain Multiplication
·
CS/Algorithm
Fibonacci NumberF(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) RecursionMemoizationDynamic ProgrammingBy Recursionint F(int n) { if(n  F(10)에서 타고 들어가게 되면, 같은 것이 호출되는 경우가 굉장히 많아진다. 노드들이 굉장히 많아지게 되고 엄청나게 느려진다.  By Memoizationint FF[1000]int init(){ for (i = 2; i 기록을 해둔 얘들은 바로 리턴이 되기 때문에, 간단한 재귀보다 더 빠르게 계산됨따라서 O(n)에 계산이 가능하다 모든 재귀가 memoization이 되는 것은 아니다. 결과 값만 의미가 있지, 내부 구조가 의미가 있는 경우에는 불가능하다. By Dyna..
[Dynamic Programming] Maximum Subarray & Floyd Warshall Alg
·
CS/Algorithm
Maximum SubarrayFind the consective subarray with maximum sum 합이 최대가 되는 연속되는 서브 배열을 찾아라O(\(N^3\)) is easy : sub array의 갯수가 n*(n+1) / 2개가 존재한다.O(\(N^2\)) is kind of easy : 연속인 subarray는 시작과 끝 점으로 존재함. 즉 \(_{n+1}\)C\(_2\)개의 subarray가 존재한다.O(N)?Do we allow subarray with zero elements?만약 전부 양수 : 배열 전체 (자기 자신도 부분 집합이라고 생각한다) O(\(N^2\))에서 보면, 이전에 구해둔 배열의 합에서 다음 것만 더하면 됨 => i~j 까지 더하는 과정이 O(1)로 줄어들게 됨 ..
[ Divide and Conquer ] Matrix Multiplication & Karatsuba Algorithm
·
CS/Algorithm
Matrix MultiplicationMultiply 2 N by N MatricesTakes O(\(N^3\)) Time using Normal Method -> Let's consider only number multiplicationApply Divide and Conquer지금 A, B, C, D 이것들이 전부 N/2 by N/2 Matrix 들이다.이러한 행렬들을 위의 공식으로 계산하면 결국 N by N 행렬을 곱한 것과 같다.결국 이는 O(N^3)이다. Strassen's Algorithm곱하기 갯수에 집중해서 생각해보자곱하기가 7번뿐이다. 대신 덧셈과 뺄셈이 늘어났다곱셈이 줄어들기 때문에, O(2^log7N)이 된다.  Karatsuba Algorithm n x n 자리수를 곱하는 것O(n^..
[ Divide and Conquer ] Farthest Point
·
CS/Algorithm
가장 먼 점을 찾는 문제직관적으로 생각했을 때도, 가장 먼 점은 무조건 convex hull 위에 있어야한다. Rotating Calipers캘리퍼를 움직여서 가장 먼 것을 구하는 것이다. 왼쪽을 아무데서 구하고, 각도를 이용하여 "캘리퍼가 닿는 각도"를 확인한다. (180도가 넘는 각도)캘리퍼를 한바퀴 돌리면서 확인한다.   가장 먼 점의 쌍을 구하는 유일한 방법이다. Convex Hull을 구하면 풀 수 있으므로 O(NlogN)에 해결된다.
[ Divide and Conquer ] Convex Hull
·
CS/Algorithm
Smallest Convex Polygon containing all the points모든 점을 포함하는 가장 작은 볼록 다각형작다라는 것은 면적도 가장 작고, 변의 길이와 변의 개수가 모두 작은 것을 의미한다.-> 직관적으로 이해하려면, 밖에 고무줄을 두른다고 생각했을 때 딱 들어가는 것을 convex hull 이라고 할수 있다.  결국은 이 문제가 NlogN에 풀린다. Q) NlogN보다 빠를 수가 없다. A) 점들이 원 모양으로 좌표에 있다고 하면, 이걸 이은것이 convex hull이다. 그러니, 무작위 좌표값을 각도로 sorting을 하고 이어야한다. 따라서 sorting 이 NlogN보다 빠를 수 없기 때문에 최소 NlogN이 걸린다.  CCW (Counter-Clock-Wise) 좌회전 아..
[ Divide and Conquer ] Closest Pair
·
CS/Algorithm
Closest pair Computational Geometry직관과 심하게 충돌하는 경우 많음주어진 점들 중에서 가장 가까우 쌍을 찾기(2차원)Usually Input is given by Coordinates좌표 형태로 입력이 들어온다. (a,b), (c,d)가 주어진다면 -> \(\sqrt{(a-c)^2 + (b-d)^2}\) 을 모든 쌍에 대해서 하면 \(n^2\)개가 생기고 이 중에 제일 작은거 찾으면 됨sqrt()라는 함수로 루트를 계산할 수 있지만, 무리수이기 때문에 정확한 계산이 불가능하다.  1 - Dimensional Versionsorting 후, 가장 옆에것과의 거리를 비교하여 가장 짧은 것을 고르면 됨Divide and ConquerFirst, Sort by x coordinate..
[ Divide and Conquer ] The Selection Problem & Approximate Median
·
CS/Algorithm
O notation에서 상수가 차이가 나기 때문에, 이 안에서 어떤게 더 좋을지 판단할 수 있다. 그런 류의 아주 복잡한 문제를 Quick Sort가 만들어낸다.  앞으로 이야기 하는 이야기에서는 Quick Sort가 그렇게 좋지 못하다는 것을 알게 될 것임. *Worst일 때는 merge sort가 더 좋다. 우리는 이걸 O(NlogN)으로 만들고 싶다.실제로는 merge보다 quick이 빠르다. 따라서 worst case만 고치면 O(NlogN)이 되면서 merge보다 빠르게 될 것이다. In Quick Sort : can we Find the Best Pivot?if we can do it in O(N), Quick Sort will run in Worst Case O(NlogN) time따라서, ..
[ Divide and Conquer ] Recursive Merge Sort
·
CS/Algorithm
Divide and Conquer입력을 나누어,더 작은 문제를 풀고작은 문제들의 답을 조합하여전체 문제듸 답을 만든다.아주 작은 문제는 어쨌는 풀 수 있다.  수 하나가 주어질 때도, 값이 큰지 작은지에 따라 다르다.어떤 문제든지 간에 size라는 것이 있고, 문제를 작게 나누어서 작은 문제를 풀고 이러한 답을 큰 문제를 푼다.이러한 작은 문제들은 재귀를 사용할 수 있다.  Recursive Merge Sortn개가 있다면, n/2로 나누고, 그것을 또 나누고.. 이를 반복하여 하나씩 남을 때까지 나눈다.이를 나누어서 목적지 배열에 Merge Alg를 사용해서 sorting을 한다. Merge Alg -> O(n) 왼쪽부터 하나씩 보면서 움직이는 것이므로 n번 걸린다.  https://m-in-zu.ti..
[Greedy Algorithm] Tape Storage
·
CS/Algorithm
Problem Definition1차원으로 된 테이브에 내가 원하는 것을 찾으러 가는 것이 굉장히 오래걸림N Data Items, Parameters \(L_i\), \(F_i\)\(L_i\) : Size of data = Length on Tape\(F_i\) : Frequency of Usage Read and Write Data on a TapeWrite once, everythingRead many timesEach read starts from the Beginning of Tape>> 어떤 순서로 배치하면 좋을까?idea) 큰게 앞에 있으면 뒤에를 읽으러 갈 때마다 큰거를 읽으면서 가야한다. 즉, 큰게 앞에 있으면 좋지 않다자주 쓰는게 앞에 있어야한다.  Algorithm Just Store ..
[Greedy Algorithm] Deadline Scheduling
·
CS/Algorithm
Problem DefinitionN Jobs, \(J_1\), \(J_2\). ..., \(J_N\)Each \(J_i\) = (\(D_i\), \(P_i\)) > \(D_i\) : Deadline, \(P_i\) : ProfitThere are time slots where you can schedule jobsEach job takes 1 slot to finishprofit은 이익, deadline 전에 끝내야한다.  어떠한 1차원 배열이 있다고 생각하고, 어떤 job가 slot에 들어가는지 생각해보자 ex) {(2,2), (1,3), (1,1)}deadline이 1인게 2개 있기 때문에, 그 중 하나밖에 할 수 없다. 최대 profit은 5가 된다.  AssumptionAll deadlines a..