728x90
๊ณ์ฐ ๊ธฐํ
- 2, 3์ฐจ์ ๊ณต๊ฐ์์์ ์ , ์ , ๋ํ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ค๋ฃจ๋ ๋ฌธ์
- ๊ธฐ๋ณธ ๊ฐ์ : 2์ฐจ์ ๊ณต๊ฐ, ์ ์์ขํ๋ง ๊ณ ๋ คํจ. ์ค์ ์ฐ์ฐ์ ์ง์
- polygon : ์ ๋ถ๋ค๋ก ์ด๋ค์ง ๋ซํ ๋ํ. ๋ ์ ๋ถ์ด ๋ง๋๋ ์ ์ ํ๋๋ฟ์ด๋ค.
๋ชจ๋ ์ ์ ์ง๋๋ ๊ฒฝ๋ก
- n๊ฐ์ ์ ์ด ์ฃผ์ด์ง๋ฉด, ์ด ์ ๋ค์ ๋ชจ๋ ์ง๋๊ณ ์์์ ์ผ๋ก ๋์์ค๋ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ์์ค. ๋จ, ๊ต์ฐจํ์ง ์๊ฒ
- ํ์ด ๋ฐฉ๋ฒ
- y์ขํ๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ ์ ๊ธฐ์ค์ ์ผ๋ก ์ก์. O(n)
- ์ด ์ ์ ์ง๋๋ ์ง์ ๊ณผ ๋ค๋ฅธ ์ ๋ค์ ์๋ ์ง์ ์ ๋ชจ๋ ๊ตฌํ๊ณ , ๊ฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ๋ ฌํ๋ค. O(n log n). ๊ทธ๋ฆฌ๊ณ ์ด ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด ๋จ
- ๊ฐ์ ๊ณ์ฐ : arctan ํจ์์ ๋น์ทํ ์ฑ์ง์ ๊ฐ์ง๊ณ , ๋ถ๋ชจ๊ฐ 0์ธ ๊ฒฝ์ฐ๊ฐ ์๋๋ก ํ๋ ํจ์๋ฅผ ์ง์ ๋ง๋ค์ด์ ๊ณ์ฐํ๋ค.
์ ๊ณผ ํด๋ฆฌ๊ฑด์ ํฌํจ ๊ด๊ณ
- ์ ์ ์ขํ๊ฐ (x,y)๋ผ๊ณ ํ์.
- (x,y)-(∞,y) ์ง์ ๊ณผ ๋ํ์ ๋ชจ๋ ์ ๋ถ๊ฐ์ ๊ต์ฐจ ์ฌ๋ถ๋ฅผ ํ์ ํ์ฌ ๊ต์ ์ ์๋ฅผ ์ผ๋ค.
- ๊ต์ ์ ์๊ฐ ์ง์๋ผ๋ฉด, ์ด ์ ์ ๋ํ ์ธ๋ถ์ ์๋ค
- ๊ต์ ์๊ฐ ํ์๋ผ๋ฉด, ์ด ์ ์ ๋ํ ๋ด๋ถ์ ์๋ค.
์ ๊ณผ ๋ณผ๋ก ๋ค๊ฐํ์ ํฌํจ๊ด๊ณ (์ปจ๋ฒก์ค ํด๋ฆฌ๊ณค)
- Convex polygon = ๋ชจ๋ ๋ด๊ฐ์ด 180๋ ์ดํ์ธ ๋ค๊ฐํ
- ๋๋, ๋ค๊ฐํ ์์ ๋ ์ ์ ์๋ ์ง์ ์ด ํญ์ ๋ค๊ฐํ ๋ด์ ์๋ ๋ค๊ฐํ
- ๋ค๊ฐํ์ ๋๋ ๋ฅผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๋ ๋, ํญ์ ์ขํ์ ๋๋ ํญ์ ์ฐํ์ ์ด๋ฉฐ ํ์ ๋ฐฉํฅ์ด ๋ฐ๋์ง ์๋๋ค.
์ปจ๋ฒก์ค ํ (Convex Hull) : n๊ฐ์ ์ ์ด ์ฃผ์ด์ง ๋, ์ด ์ ๋ค์ ๋ชจ๋ ํฌํจํ๋ ๊ฐ์ฅ ์์ ๋ณผ๋ก ๋ค๊ฐํ์ด๋ค.
์ปจ๋ฒก์ค ํ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ
- ๋ธ๋ฃจํธ ํฌ์ค : O(n^3)
- ๊ฐ์ฅ y์ขํ๊ฐ ์์ ์ ์ ๊ธฐ์ค์ u๋ก ์ก๋๋ค. u๋ ๋ฐ๋์ ์ปจ๋ฒก์ค ํ์ ํฌํจ๋๋ค.
- ๋ค๋ฅธ ๋ชจ๋ ์ ์ด ์ ๋ถ (u,v)์ ์ผ์ชฝ์ผ๋ก ๊ฐ๋ ์ v๋ฅผ ์ฐพ๋๋ค. ๊ทธ ์ v๋ ์ปจ๋ฒก์ค ํ์ ํฌํจ๋๋ค.
- v์์ ๋ค์ 2๋ฒ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ์ ์ฐพ๋๋ค. ๋ฐ๋ณต
- Graham scan : O(n log n) : stack์ ์ ์ ์ ์ฅ
- ๊ฐ์ฅ y์ขํ๊ฐ ์์ ์ ์ ๊ธฐ์ค์ u๋ก ์ก๋๋ค. u๋ ๋ฐ๋์ ์ปจ๋ฒก์ค ํ์ ํฌํจ๋๋ค. O(n log n)
- ๋ค๋ฅธ ์ ๋ค์ ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌํ๋ค. O(n log n)
- ์ฒ์์ผ๋ก ๊ฒ์ฌํ ์ 2๊ฐ(๊ธฐ์ค์ ํฌํจ)๋ฅผ stack์ ๋ฃ๊ณ , ์ด ๋์ ์ ์ด์ ๋ฒกํฐ์, ๊ทธ ๋ค์ ์ ๊ณผ ๊ธฐ์ค์ ์ ์ด์ ๋ฒกํฐ์ ์ธ์ ์ ๋น๊ตํ๋ค.
- ๊ฒฐ๊ณผ๊ฐ ccw์ด๋ฉด(stack ๋ด๋ถ์ ์ ์ ์ด์ ๋ฒกํฐ๊ฐ ์ค๋ฅธ์ชฝ์ด๋ฉด) ์ปจ๋ฒก์คํ์ ํฌํจ์ํจ๋ค.
- ๊ฒฐ๊ณผ๊ฐ cw์ด๋ฉด, ๋ง์ง๋ง์ stack์ ๋ค์ด๊ฐ ์ ์ popํ๊ณ , ์ด์ ๊ณผ์ ๋ถํฐ ๋ค์ ์งํํ๋ค.
- n-1๊ฐ์ ์ ๋ง๋ค ์ด์ ์ ๊ทธ์ ์ ๋ถ๊ณผ ์๋ก ๊ทธ์ ์ ๋ถ์ ์ธ์ ์ ๋น๊ตํ๋๋ฐ์ O(n)
- Quick Hull : T(n) = O(n) + T(a) + T(b)
- ๊ฐ์ฅ ์ํ์ข์ฐ์ ์๋ ์ 4๊ฐ๋ ๋ฐ๋์ ๋๋ ์ ํฌํจ๋๋ค. ์ด ์ค 2๊ฐ์ ์ ์ ์๋ ์ ๋ถ A์ ๊ฐ์ฅ ๋จผ ์ x๋ฅผ ์ฐพ๋๋ค.
- x๋ ๋ฐ๋์ ์ปจ๋ฒก์ค ํ์ ํฌํจ๋๋ค.
- A์ x๊ฐ ์ด๋ฃจ๋ ์ผ๊ฐํ์ ๋ด๋ถ์ ์๋ ์ ๋ค์ ์ปจ๋ฒก์ค ํ์ ํฌํจ๋์ง ์์ผ๋ฏ๋ก, ์ญ์ ํ๋ค.
- ๋จ์ ์ ๋ค์ ๋ํด ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด, ์ปจ๋ฒก์ค ํ์ ํฌํจ๋์ง ์๋ ์ ๋ค์ ๋ชจ๋ ์ง์์ง๋ค.
- ์ ๋ถ์ ์ฐพ๋๋ฐ์ O(n), ๊ฐ์ฅ ๋จผ ์ ์ ์ฐพ๋๋ฐ์ O(n)์ด ๊ฑธ๋ฆผ
- ์ ๋ถ์ ๊ธฐ์ค์ผ๋ก ๊ณต๊ฐ์ ๋๋์ด ๊ฐ ๊ณต๊ฐ์ a, b๋ผ๊ณ ํ๋ฉด,
- Best : a=b=n/2 → T(n) = O(n log n)
- Worst : a=1, b=n-1 → T(n) = O(n^2)
- ์ด ์๊ฐ๋ณต์ก๋๋ T(n) = O(n) + T(a) + T(b)
์๋๋ graham scan ์ฝ๋์ ํจ์ ์์ฑ ์์์ด๋ค.
// Graham's scan ์ผ๋ก ์ปจ๋ฒก์ค ํ ์ฐพ๋ ์ฝ๋
nextToTop(stack<Point> &S): ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ๋ ๋ฒ์งธ ์ ์ ๋ฐํํ๋ ํจ์์
๋๋ค.
์คํ์ ๋งจ ์์ ์ ์ ๊ฐ์ ธ์จ ๋ค ์คํ์์ ์ ๊ฑฐํ ๋ค์, ๋ค์ ์คํ์ ๋ฃ์ง ์๊ณ ๋ฐ๋ก ๊ทธ ์๋์ ์๋ ์ ์ ๋ฐํํฉ๋๋ค.
swap(Point &p1, Point &p2): ๋ ์ ์ ๊ตํํ๋ ํจ์๋ก, ๋ ๊ฐ์ Point ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์์ ๊ฐ์ ๊ตํํฉ๋๋ค.
distSq(Point p1, Point p2): ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ ๊ณฑ์ ๋ฐํํ๋ ํจ์๋ก, ๋ ๊ฐ์ Point ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์์ ๊ฑฐ๋ฆฌ์ ์ ๊ณฑ์ ๊ณ์ฐํ์ฌ ๋ฐํํฉ๋๋ค.
compare(const void *vp1, const void *vp2): qsort() ํจ์์ ์ ๋ฌ๋์ด ์ฌ์ฉ๋๋ ๋น๊ต ํจ์์
๋๋ค.
์ด ํจ์๋ ๋ ๊ฐ์ Point ํฌ์ธํฐ๋ฅผ ์ธ์๋ก ๋ฐ์์ ๋น๊ต๋ฅผ ์ํํ๊ณ , ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋ํ orientation() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ค์ ๋ฐฉํฅ์ฑ์ ๋น๊ตํ๊ณ , ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ ์ ๋ ฌ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
convexHull(Point points[], int n): ๋ณผ๋ก ๊ป์ง์ ๊ณ์ฐํ๋ ์ฃผ์ ํจ์์
๋๋ค. ์ฃผ์ด์ง ์ ๋ค์ ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค.
์ด ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ์ํ๋ฉ๋๋ค:
๊ฐ์ฅ ์๋์ ์๋ ์ ์ ์ฐพ์ต๋๋ค.
์๋์ ์๋ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์ผ์ชฝ์ ์๋ ์ ์ ์ ํํฉ๋๋ค.
๊ฐ์ฅ ์๋์ ์๋ ์ ์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๊ตํํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ์ ์ ๊ธฐ์ค์ผ๋ก ๋๋จธ์ง ์ ๋ค์ ์ ๋ ฌํฉ๋๋ค. qsort() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, compare() ํจ์๋ฅผ ๋น๊ต ํจ์๋ก ํ์ฉํฉ๋๋ค.
์ ๋ ฌ๋ ์ ๋ค ์ค์์ ๊ธฐ์ค์ ๊ณผ์ ๊ฐ๋์ ๋ฐ๋ผ ๊ฒน์น๋ ์ ๋ค์ ์ ๊ฑฐํฉ๋๋ค.
๋ง์ฝ ์ ์ ๊ฐ์๊ฐ 2๊ฐ ์ดํ๋ผ๋ฉด ๊ณ์ฐ์ ์ค๋จํ๊ณ ๋ฐํํฉ๋๋ค.
๋ณผ๋ก ๊ป์ง์ ๊ณ์ฐํ๊ธฐ ์ํด ์คํ์ ์ฌ์ฉํฉ๋๋ค. ์ฒ์ ์ธ ๊ฐ์ ์ ์ ์คํ์ ๋ฃ๊ณ , ๋๋จธ์ง ์ ๋ค์ ์ํํ๋ฉด์ ์คํ์ ์ถ๊ฐํฉ๋๋ค.
์คํ์์ ์ ๋ค์ ์ ๊ฑฐํ๋ฉด์ ๋น-์ผ์ชฝ ํ์ (non-left turn)์ด ๋๋ ๊ฒฝ์ฐ๊น์ง ์ ๊ฑฐํฉ๋๋ค. ์คํ์๋ ์ต์ข
์ ์ผ๋ก ๋ณผ๋ก ๊ป์ง์ ์ํ๋ ์ ๋ค๋ง ๋จ๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ ์ฃผ์ด์ง ์ ๋ค ์ค์์ ๋ณผ๋ก ๊ป์ง์ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ปจ๋ฒก์ค ํ ์์ฉ : n๊ฐ์ ์ ์ด ์์ ๋, ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋ ์ ์ ๊ตฌํ์์ค
- ๋ธ๋ฃจํธ ํฌ์ค O(n^2) : (n,2)์ ์กฐํฉ์ ๋ชจ๋ ํด๋ณธ๋ค
- ์ปจ๋ฒก์ค ํ์ ๊ตฌํ๋ค. ๊ฐ์ฅ ๋จผ ๋ ์ ์ ์ปจ๋ฒ ์ค ํ ์์ ์์ ๊ฒ์ด๋ฏ๋ก, ์ปจ๋ฒก์ค ํ ์์ ์ ๋ค๋ผ๋ฆฌ์ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค.
728x90
'๐ ์ ๊ณต ๊ณต๋ถ > ๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 11. ๋์ ๊ณํ๋ฒ (0) | 2023.06.16 |
---|---|
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 9. Flow Networks (0) | 2023.06.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 8. ์๋ก์์ธ ์งํฉ์ ํํ (Disjoint Sets) (0) | 2023.06.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 7. ์ด๋ถ ํ์ (0) | 2023.04.19 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 6. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (0) | 2023.04.18 |