(CLRS) 알고리즘의 역할

(CLRS) 알고리즘의 역할

2020, Apr 10    



  • 이 글은 CLRS(Introduction to algorithm) 책을 요약한 것이므로 자세한 내용은 CLRS 책을 참조하시기 바랍니다.
  • CLRS 내용 외에 따로 정리한 선분의 성질 관련 블로그 글은 아래 링크를 참조하시기 바랍니다.
    • CCW : https://gaussian37.github.io/math-algorithm-ccw/
    • 선분의 교차 : https://gaussian37.github.io/math-algorithm-line_intersection/


목차


  • 선분의 정의

  • 선분 관련 문제

  • 벡터 곱


선분의 정의


  • 점 \(p_{1} = (x_{1}, y_{1}), p_{2} = (x_{2}, y_{2})\)이 있을 때, 선분(line segment) \(\bar{p_{1}p_{2}}\)는 양 끝점을 \(p_{1}, p_{2}\)로 합니다.
  • 이 때, 선분 위의 점들을 \((x_{3}, y_{3})\) 라고 하면, \((x_{1}, y_{1}), (x_{2}, y_{2})\)와 다음 관계를 가집니다.
    • \[x_{3} = \alpha x_{1} + (1 - \alpha)x_{2}\]
    • \[y_{3} = \alpha y_{1} + (1 - \alpha)y_{2}\]
    • $$ \text{where, } 0 \ge \alpha \le 1
  • 만약 선분이 아니라 방향 성분이 필요한 방향 선분(directed segment)라면 \(\vec{p_{1}p_{2}}\)라고 정의해야 합니다.
  • 만약 \(p_{1}\)이 원점이라면 방향 선분 \(\vec{p_{1}p_{2}}\) 를 벡터 \(\vec{p_{2}}\)로 나타낼 수 있습니다.


선분 관련 문제


  • 이 책에서 다루는 선분과 관련된 대표적인 문제는 아래 3가지 입니다.
  • ① \(\vec{p_{1}p_{2}}, \vec{p_{0}p_{2}}\)에 대해 \(\vec{p_{0}p_{2}}\)가 \(\vec{p_{0}p_{1}}\)의 시계 방향에 있는가? (두 선분의 방향성)
    • 이 문제의 경우 두 선분의 시작점이 둘 다 \(p_{0}\) 인 것에 유의하시면 됩니다.
  • ② \(\vec{p_{1}p_{2}}, \vec{p_{0}p_{2}}\)에 대해 \(\vec{p_{0}p_{1}}\)을 순회한 다음 \(\vec{p_{1}p_{2}}\)를 순회할 때, 점 \(p_{1}\)에서 좌회전 하는가?
    • 이 문제는 ①과 유사하지만 첫번째 방향 선분의 끝점이 두번쨰 방향 선분의 시작점이 된다는 차이점이 있습니다.
  • ③ \(\bar{p_{1}p_{2}}\)와 \(\bar{p_{3}p_{4}}\)가 서로 교차하는가?


  • 위 3가지 문제를 어떻게 해결하는 지 이 글에서 자세하게 다루어 보도록 하겠습니다.