ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 누적합의 확장 IMOS
    Computer/CS 2021. 9. 30. 01:11

    IMOS는 누적합의 개념으로 특정 구간에서 가장 많이 중첩되는 영역을 구할 수 있는 방법 중 하나이다.

    예를 들어 가게에 Q명의 손님이 방문한다. 가게는 시간 0부터 T까지 운영되며, 각각의 손님 i의 방문 시각(si)과 퇴장 시각(ei)이 입력으로 주어진다. 가게 운영 중 손님이 가장 많이 방문했을 때의 손님 수는 몇 명인가?

    이런 문제가 있다면 입력을 위와 같은 그림으로 나타낼 수 있을 것이다.
    이 때 가장 단순하게 구현한다면 for문을 si부터 ei까지 돌리면서 해당 배열의 값을 +1 해주는 것이겠지만 이 경우는
    쿼리 하나의 처리 시간이 T 쿼리의 갯수를 Q라고 했을 때 시간 복잡도는 Q(TQ)가 되어서
    쿼리가 많아지고 시간이 길어지는 경우에는 풀 수 없게된다.

     

    이 때 사용하는 IMOS는 입장과 퇴장에 대한 정보만 기록하는 것이다.
    입장하는 시간에 +1 퇴장하는 시간에 -1을 하는 것으로 마지막에 답을 구할 때, 처음부터 내가 원하는 시간까지의 합을 구하면 O(T)로 구할 수 있게된다.

    입장 시각 +1, 퇴장 시각 -1

    쿼리 하나당 처리 시간 O(1)의 시간이 소요되고 후에 계산은 T만큼 걸리기 때문에 O(Q + T)의 시간이 걸린다.

     

    누적합과의 비교

    누적합의 경우는 입력을 다 받고, 1번의 전처리로 데이터를 완성하기 때문에 쿼리가 데이터의 값을 갱신하지 않는다.
    imos는 각 쿼리가 구간의 값을 갱신하는 경우에 매 쿼리마다 갱신하는 것이 아니라 데이터가 필요한 순간에
    계산하여 사용하는 방식이다.

     

     

    출처

    https://driip.me/65d9b58c-bf02-44bf-8fba-54d394ed21e0

     

    누적합의 확장, imos법

    imos법에 대해 알아보자.

    driip.me

     

    'Computer > CS' 카테고리의 다른 글

    프로세스  (0) 2021.10.09
    Multi Process와 Multi Thread  (0) 2021.10.07
    Hashing - Chaining, Open Addressing  (0) 2021.09.27
    HTTP 상태 코드  (0) 2021.09.27
    로그인  (0) 2021.09.09

    댓글

From BlackHair