1. ๋ฒกํฐ์ ์ธ์ : cross product
2. ์ธ์ ์ ์์ฉ : ๋ถํธ ์ ๊ฒ
3. CCW ์๊ณ ๋ฆฌ์ฆ : Counter-Clock Wise
์ธ ์ ์ด ์ฃผ์ด์ก์ ๋ A->B์ A->C ๋ ๋ฒกํฐ์ ์ธ์ ์ ๋ถํธ๊ฐ ๋ฐฉํฅ์ ๊ฒฐ์ ํจ.
int ccw(int x1, int y1, int x2, int y2, int x3, int y3){
int tmp = x1*y2 + x2*y3 + x3*y1;
tmp -= (y1*x2 + y2*x3 + y3*x1);
if(tmp > 0) return 1; // a์ ๋ํด b๊ฐ ๋ฐ์๊ณ ๋ฐฉํฅ(์ผ์ชฝ)์ ์์
else if(tmp < 0) return -1; // a์ ๋ํด b๊ฐ ์๊ณ ๋ฐฉํฅ(์ค๋ฅธ์ชฝ)์ ์์
else return 0;
}
4. ์์ฉ : ์ ๋ถ์ ๊ต์ฐจ ์ฌ๋ถ
a-b๋ฅผ ์ด์ ๋ฒกํฐ A์ ๋ํด a-c์ a-d๊ฐ ๋ฐ๋ ๋ฐฉํฅ์ด๋ฉด ๋ฒกํฐ A์ c-d๋ ๊ต์ฐจํ๋ค.
5. ์ ๋ถ์ ๊ต์ฐจ๋ฅผ ํธ๋ ๋ฌด์ํ ๋ฐฉ๋ฒ
- ๋ ์ ๋ถ์ ์ง์ ์ผ๋ก ๋ณด๊ณ ๊ต์ ์ ์ฐพ๊ธฐ
- ๊ต์ ์ด ๋ ์ ๋ถ ์์ ์๋์ง ํ์ธ
์๊ฐ์ด ๋ง์ด ์์, ์ ์๊ฐ ์๋ ์ค์ ์ฐ์ฐ์ผ๋ก ์ธํ ์ค์ฐจ ๋ฐ์ ๊ฐ๋ฅ์ฑ (๋๋์ ํ ๋ ๋ฌธ์ ๋ฐ์)
6. ์ธ์ ์ ์ด์ฉํ ์ ๋ถ ๊ต์ฐจ ํ์ : ๋ ์ ๋ถ ๋ชจ๋์ ์ ์ฅ์์ ์ ๊ฒํ๋ค
์์ธ์ฌํญ) ๋ ์ ๋ถ์ด ๊ฒน์น์ง ์์๋(๋ง๋์ง ์์๋), ๋ ์ ๋ถ์ ๋์ด ๋ง๋ ๋, ๋ ์ ๋ถ์ด ๊ฒน์ณ์ง๋, ํ ์ ๋ถ์ด ๋ค๋ฅธ์ ๋ถ์ ํฌํจ๋ ๋
CCW ์๊ณ ๋ฆฌ์ฆ์ ์ 4๊ฐ์ง ๊ฒฝ์ฐ์ ๋ชจ๋ ๊ฑฐ์ง์ด๋ค.
-> ์ธ์ ์ด 0์ด ๋๋ค๋ฉด ๊ต์ ์ ๊ตฌํ์ฌ ์ ๊ฒํ๊ธฐ!!
1์ฐจ์ ์ง์ ์์์ ์ ๋ถ [a, b]๋ ์ ๋์ ์ด ์ขํ a, b์ธ ์ ์ด๊ณ [c, d]๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ธ์์ ํธํ๊ฒ ํ๊ธฐ ์ํด์ a <= b, c <= d๋ผ๊ณ ๊ฐ์ ํฉ์๋ค.
left = min(a, c), right = max(b, d)
- ๋ ์ ๋ถ์ด ๋ง๋์ง ์๋๋ค : a, b, c, d์ ์์น๊ด๊ณ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ข ๋ณต์กํฉ๋๋ค.
a <= b < c <= d ๋๋ c <= d < a <= b ๋ผ๋ฉด ๋ง๋์ง ์๊ฒ ์ฃ .
์ฝ๊ฐ๋ง ์๊ฐํ๋ฉด, right - left > |b-a| + |d - c| ์์ ์ ์ ์์ต๋๋ค. ๋ ์ ๋ถ์ ๊ธธ์ด์ ํฉ์ด ๊ฐ์ฅ ์ผ์ชฝ ๋์ ๊ณผ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋์ ์ ์๋ ์ ๋ถ์ ๊ธธ์ด๋ณด๋ค ์งง์ ๊ฒ์ด์ฃ .
๋น์ทํ๊ฒ,
- ๋ ์ ๋ถ์ด ํ ์ ์์ ๋ง๋๋ค :
a <= b = c <= d ๋๋ c <= d = a <= b์ด์ง๋ง
right - left = |b - a| + |d - c|
- ๋ ์ ๋ถ์ด ๊ต์ฐจํ๋ค :
right - left < |b - a| + |d - c|
- ํ ์ ๋ถ์ด ๋ ์ ๋ถ ์์ ์์ ํ ํฌํจ๋๋ค:
rifht - left = |b - a| or |d - c|
7. ๋ ์์ ์ต๋ ๊ณต์ฝ์ ์ฐพ๊ธฐ : ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (Euclid)
GCD(a,b) = GCD(b, a-b)
why? a=a'g, b=b'g -> b-a = (b' - a')g
O( log max(a,b) ) -> ์์ธ์๋ถํด๋ณด๋ค ๋น ๋ฆ.
์ต์ ์ ์ํฉ : ํผ๋ณด๋์น ์ซ์
ax+by = GCD(a,b)
unsigned int gcd(unsigned int a, unsigned int b){
if(a<b) return gcd(b,a);
if(b==0) return a;
return gcd(b, a - b); // ๋บ์
}
// ๋ ๋น ๋ฅธ gcd
unsigned int gcd(unsigned int a, unsigned int b){
if(a<b) return gcd(b,a);
if(b==0) return a;
return gcd(b, a % b); // ๋๋จธ์ง ์ฐ์ฐ
}
~ ์ธ๋ณต ๋ง์ ~
GCD(23, 5) = GCD(5, 3)
3 = 23*1 - 5*4
GCD(5, 3) = GCD(3, 2)
2 = 5 - 3 = 5 - (23*1 - 5*4) = 5*5 - 23*1
GCD(3, 2) = GCD(2, 1) = GCD(1, 0)
1 = 3 - 2 = (23*1 - 5*4) - (5*5 - 23*1)
= 23*2 - 5*9
์ ๋ฆฌ 1. GCD(a, b)๋ฅผ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋ ๊ณผ์ ์์ GCD๋ฅผ ๊ตฌํ๋ ๋ ์๋ ํญ์ ax+by๊ผด์ด๋ค.
(= ๊ฒฐ๊ตญ ์ด ์ค ํ๋๊ฐ GCD(a, b)์ด๊ธฐ ๋๋ฌธ์ GCD(a, b) = ax+by๊ฐ ๋๋ x, y๊ฐ ์กด์ฌํ๋ค)
์ฆ๋ช . ์ํ์ ๊ท๋ฉ๋ฒ.
๊ธฐ๋ณธ) a = a*1 + b*0, b = a*0 + b*1
๊ท๋ฉ) GCD(ax + by, a'x + b'y)๋ฅผ ๊ตฌํ ๋ ax + by > a'x + b'y๋ผ๊ณ ๊ฐ์ ํ๋ฉด
GCD(ax + by, a'x + b'y) = GCD(a'x + b'y, ((ax+by) - (a'x+b'y))
= GCD(a'x + b'y, (a-a')x + (b-b')y) ์ด๋ฏ๋ก ํญ์ ์ฑ๋ฆฝํ๋ค.
8. ์ ํ์ฒด : Finite Field
์์ฐ์๋ฅผ ์์ p๋ก ๋๋ ๋๋จธ์ง์ ์งํฉ Z = {0,1,...,p-1}
์ด ์งํฉ์์ ๋ง์ , ๋บ์ , ๊ณฑ์ ์ ์ ์ ๊ฐ๋ฅํ๋ค.
๋๋์ ์? -> ๊ณฑ์ ์ด ์ฑ๋ฆฝํ๋ค๋ ์กฐ๊ฑด์ ํ์ฉ
๊ณฑ์ ์ ๋ํ ํญ๋ฑ์์ 1์ด๋ฏ๋ก, ๋๋์ ์ ๊ณฑํด์ 1์ด ๋๋ ์๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด๋ค (๊ณฑ์ ์ ์ญ์)
a * x = 1 (mod p)
9. ์ ์์์ x๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ํ์ฅ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค
์๋ก์์ธ p์ a๊ฐ ์ฃผ์ด์ก์ ๋, ab = 1 (mod p) ์ b๋ฅผ ๊ตฌํ์์ค.
-> GCD(a,p) = ax + py ์ธ x, y๊ฐ ์กด์ฌํ๋ฉฐ, ์ด ๊ฐ์ a์ p๊ฐ ์๋ก์์ด๋ฏ๋ก 1์ด๋ค.
๋ฐ๋ผ์ GCD(a,p) = 1์ ๊ตฌํ๋ ๊ณผ์ ์์ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ x๋ฅผ ๊ตฌํ ์ ์๋ค.
a=4, p=7์ด๋ผ๊ณ ํ๋ฉด
GCD(4,7) = GCD(4, 7-4) = GCD(7-4, 4-(7-4)) = GCD(4-(7-4), (7-4)%(4-(7-4))) = 1
์ด ์ ์ค์์ 4-(7-4) = 4 + 4 - 7 = 4*2 - 7*1 = 1 ์ด๋ฏ๋ก, b = 2
10. Extended Euclidean Algorithm
#include <iostream>
using namespace std;
int xGCD(int a, int b, int &x, int &y){
if(b==0) {
cout << x << " " << y << "\n";
return a;
}
cout << x << " " << y << "\n";
int x1, y1;
x1 = y;
y1 = x - (a / b) * y;
int gcd = xGCD(b, a % b, x1, y1);
return gcd;
}
int main(){
int x = 1;
int y = 0;
cout << xGCD(4, 7, x, y);
}
์ฌ๊ธฐ์
x1 = y;
y1 = x - (a / b) * y;
์ด ์์ด ๋์จ ์ด์ ๋, gcd(a, b) = gcd(b, a%b) ์์
bx + (a%b)y = bx + (a - (a/b)*b)y = ay + b(x - (a/b)y) ์ด๋ ๊ฒ ์ ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์๋ก์ด x1์ y๊ฐ ๋ค์ด๊ฐ๊ณ , ์๋ก์ด y1์ x - (a/b) * y ๊ฐ ๋์ ๋๋ ๊ฒ์ด๋ค.
'๐ ์ ๊ณต ๊ณต๋ถ > ๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 6. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (0) | 2023.04.18 |
---|---|
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 5. ์์ฌ์์ด ๊ธฐ๋ฒ (0) | 2023.04.17 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 4. ์๋ฃ๊ตฌ์กฐ2 (0) | 2023.04.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 3. ์๋ฃ๊ตฌ์กฐ1 (0) | 2023.04.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 1. C++ (0) | 2023.04.16 |