• Affine Set?

    점의 집합

Affine Set 안에는 요소(점)가 있고, 이 요소들을 묶음으로써 하나의 집합이 만들어진다.

이 요소들은 개별적으로 하나의 독립된 물체이기 때문에 따로 사용할 수가 없다.

그래서 집합에 있는 요소들을 사용하려면 점과 점 사이에 연관 관계가 있어야 한다.

 

벡터 공간으로 예를 들어보면

벡터 공간 안에는 A라는 벡터와 B라는 벡터가 있고, 이 요소들은 서로 간의 구별될 수 있는 독립적인 물체이다.

하지만 이 벡터 공간에 있는 벡터를 정의하기 위해서는 연산자가 필요하다.

왜냐하면 연산자가 있어야 계산을 해서 활용을 할 수 있기 때문이다.

 

벡터에서 사용하는 연산자는 덧셈스칼라곱이 있다. 이러한 연산자들이 있기 때문에 새로운 벡터를 만들 수 있다.

만약 연산자라는 것이 없으면 A벡터와 B벡터는 서로 연관 관계가 없기 때문에 새로운 벡터를 만들 수가 없다.

 

아핀 공간도 마찬가지이다. 공간 안에 요소만 있고 연산자가 없으면 이 요소들을 활용을 할 수가 없다.

 

-아핀 공간에서 점과 벡터의 연산-
점 - 점 = 벡터
점 + 벡터 = 점
벡터 + 벡터 = 벡터

 

아핀 공간 역시 뺄셈 연산자로 인해서 점과 점 사이의 최단 거리를 계산할 수 있는 벡터가 존재하고,

bijection(전단사 함수) 성질을 가지고 있기 때문에 벡터와 크기가 같으며 반대 방향인 "역 벡터"도 존재한다.

따라서 이러한 벡터의 연산을 통해서 아핀 공간에 있는 점들을 활용할 수가 있다.

 

이것을 이제 시각적으로 표현을 해보자

부분 공간으로 생각을 해보면, 새로운 차원에서 마지막 차원의 값이 0인 부분이 벡터이고 1인 부분이 점이 되고,

3차원 공간으로 생각을 한다고 하면 벡터는 (x, y, z, 0)이 되고 점은 (x, y, z, 1)이라고 보면 된다.

 

이것을 연산을 해보면

점 - 점 = 0

점 + 벡 = 1

벡터 + 벡터 = 0 이 나오게 된다.

 

그렇다면 점 + 점은 가능할까?

가능은 하다. 하지만 특정 조건에서만 가능하다.

 

임의의 a라는 점과 b라는 점이 존재할 때 이 두 개의 점의 합이 반드시 1이 나와야 한다는 결론이 나와야 한다.

공식을 만들어보면

a (x1, y1, z1, 1)

b (x2, y2, z2, 1)

 

(ax1, ay1, az1, a) + (bx2, by2, bz2, b) = (ax1 + bx2, ay1 + by2, az1 + bz2, a+b)에서

a+b의 값이 1이 나오게 되면 점의 성질을 만족하게 된다.

 

이런 것을 이제 "아핀 조합"이라고 하는데 아핀 조합의 공식을 보면 위에 적힌 공식과 같다.

따라서 아핀 조합을 이론적으로 보면 "여러 점들을 선형 조합할 때 계수의 합을 1로 제한하게 되는 것" 이라고도 하지만

위와 같이 직접 공식을 만들어서 알아볼 수도 있다.

 

이러한 방식으로 만들어진 형태는 다음과 같다.

이렇게 해서 새로 만들어 진 점을 "무게 중심"이라고 한다.

 

무게 중심을 이제 계수로 표현을하면 아래와 같다.

표현된 계수를 앞서서 말한 것처럼 하면 (a, b)가 되고, 이것을 이제 "무게 중심 좌표"라고 한다.

 

무게 중심 좌표를 설명하자면 새롭게 두 점을 덧셈으로 조합해서 생성된 점이 "무게 중심"이고,

그 것을 만드는데 기여한 계수(a, b)를 묶어서 벡터로 만든 것이라고 생각하면 된다.

  • STL Vector란 무엇인가?

    Vector는 임의 접근 반복자를 지원하는 배열 기반 컨테이너이다.
    일반적으로 배열처럼 개체들을 연속적인 메모리 공간에 저장한다.


  • Vector의 시간 복잡도
Vector
검색 O(N)
삽입 O(N)
삭제 O(N)

 

  • Linear Search(선형 탐색)란 무엇인가?

    데이터가 모인 집합(배열, 리스트 등)의 처음부터 끝까지 하나씩 순서대로 비교하며 원하는 값을 찾아내는 선형 탐색 알고리즘이다.

 

 

  • Binary Search(이진 탐색)란 무엇인가?

    오름차순으로 정렬된 배열에서 중간 값 부터 위치를 찾는 이진 탐색 알고리즘이다.

 

 

  • Linear Search와 Binary Search의 차이점
Linear Search Binary Search
입력 데이터를 정렬해야함 입력 데이터를 정렬 할 필요가 없음
순서 비교가 필요 동등 비교만 필요
시간 복잡도 O(N) 시간 복잡도 O(logN)
데이터에 무작위로 액세스해야 함  순차적 액세스만 필요



  • Linear Search와 Binary Search의 장점
Linear Search Binary Search
단순한 방식으로 정렬되지 않는 탐색에 유용 선형 탐색과 비교하여 탐색 시간이 빠름

 

  • Linear Search와 Binary Search의 단점
Linear Search Binary Search
평균 탐색시간이 많이 걸림 정렬된 리스트에서만 사용 가능

 

  • map 은 무엇인가?

    map STL에 속한 컨테이너 중 하나로 key와 value로 이루어져 있으며 이는 pair 객체 형태로 저장된다.

  • unordered_map은 무엇인가?

    unordered_map은 hash_table 기반의 hash container 이다.
    기존의 map과 달리 이진 탐색트리가 아닌 해시 테이블로 구성 되어있다.
    언뜻보면 hash_map과 똑같다고 볼 수 있지만 hash_map은 비표준 컨테이너 인데 반해 unordered_map은
    c++11에서 STL 표준 컨테이너로 추가되었으며, hash_map과 거의 동일한 기능을 제공한다고 한다.
    hash_map과 동일하다고 하지만 MSDN에서는 표준 컨테이너인 unordered map 사용을 권장하고 있다.


  • Hash Table은 무엇인가?

    key아 value로 된 쌍을 저장하는 자료구조이고, c#에서 Dictionary와 같다.

  • map과 unordered_map의 차이점

    map은 자료를 저장할 때 자동으로 정렬을하고, unordered_map은 정렬하지 않는다.
    일반적으로 unordered_map이 map보다 성능이 더 좋지만 데이터의 양이 많으면 많을수록 map보다
    성능이 더 떨어진다고 한다. 이유는 균형트리는 이론상 무조건 균형을 맞추게 되어 있기 때문이다.
    따라서 데이터가 작다면 unordered_map을, 크다면 map을 사용하는 것이 바람직하다.

  • map과 unordered_map의 장단점

    map의 장점 : 컨테이너에 속한 list나 vector보다 탐색 속도가 빠르기 때문에 검색에는 최적의 컨테이너이다.
    map의 단점 : 키를 새로 추가할 때마다 정렬된 위치를 찾아서 추가를 해야 하므로 대용량의 맵을 작성하는 데에는
    시간이 많이 소요됨

    unordered_map의 장점 : hash로 인해 key를 통한 value로의 접근이 빠르고 적은 양의 자료에 유리
    unordered_map의 단점 : 해시 충돌로 인하여 성능이 저하 될 수 있고 버킷으로 인해 메모리 사용양이 증가함


  • map과 unordered_map의 시간 복잡도
  map unordered_map
검색 O(logN) O(1)
삽입 O(logN) O(1)
삭제 O(logN) O(1)

 


  • map 활용 시 주의사항


    자료를 저장할 때 자동으로 정렬된 상태로 저장하기 때문에 삽입 삭제가 빈번하면 안됨.


  • map이 사용하는 자료구조

    map이 사용하는 자료구조는  "레드 블랙트리(Red-Black Tree)"라는 자료구조이다.




 

 

 

  • 레드 블랙트리는 무엇인가?

    자가균형이진탐색 트리로써, 대표적으로 "연관배열" 등을 구현하는데 쓰이는 자료구조이다.
    트리에 n개의 원소가 있을때 O(logn)의 시간복잡도로 삽입, 삭제, 검색을 할 수 있다.


  • 레드 블랙트리는 어느 경우에 사용되는가?

    이진 탐색 트리 중에 값이 한쪽으로 치우치게 되는 경우가 있다.
    이런 경우, 이진 탐색 트리의 검색 효율을 나쁘게 하므로, 균형을 바로 잡기 위해서 해당 자료구조를 사용한다.

 

  • map에서 사용하는 이유는? 

    map은 많은 자료를 정렬하여 저장하고 있고 빠른 검색을 필요로 할 때 자주 사용하게된다.
    그러므로 map을 구현을 할 때 레드 블랙트리를 참고하면 좋을 것 같다.
    복잡한 자료구조 이지만, 사용하는데 있어서 효율적이고, 최악의 경우에도 상당히 우수한 검색 속도를 보여준다.

 

 

 

 

'Programming > STL' 카테고리의 다른 글

C++(STL Container) vector  (0) 2020.09.27
C++(STL Container) map  (0) 2020.09.27
C++(STL Container) list  (0) 2020.09.27
C++ STL이란?  (0) 2020.09.27
STL vector에서 push_back과 emplace_back의 차이점  (0) 2019.12.04

트랜스폼에는 세 가지 주요 변환 행렬이 있다.

  • Scale(크기)

 

 

  • Rotation(회전)

 

 

 

  • Shear(이동)

 

 

Transform에서 크기, 회전, 이동 세 가지 변환을 순서대로 적용할 경우 가장 이상적인 변환은 무엇인가?

 

SRT는 크기, 회전, 이동을 차례로 적용한 행렬이고, TRS는 이동, 회전, 크기를 차례로 적용한 행렬이다.

세 가지 변환 중 어떤 순서로 적용을 하던 개인의 선택이지만 그 중에서 가장 좋다고 판단이 되는 순서는

크기 -> 회전 -> 이동이라고 생각한다. 왜냐하면 크기는 회전의 영향을 받고, 회전은 이동의 영향을 받기 때문이다.

 

 

 

+ Recent posts