Processing math: 100%
본문 바로가기

알고리즘/online algorithm

Online 알고리즘 (3) - Deterministic Online Algorithms (2)

Maximization Problem: Time Series Search

이번 포스팅에서는 전 포스팅의 Minimization과 대비되는 형태의 문제인 Maximization 문제를 다루도록 하겠습니다. Time Series Search (이하 TSS)문제는 대표적인 maximization 문제입니다. 

 

한 항공사에서 유럽여행 이벤트를 한다고 가정하겠습니다. 이럴 경우는 없겠지만 이 이벤트는 여러분을 n일 후에 유럽으로 공짜로 보내주는 이벤트입니다. 다만 여러분은 n일이 언제인지 모르고 당일날 통보를 받게 됩니다. 이 여행을 가기 위해서 많은 준비를 해야하겠지만 가장 중요한 건 원화를 유로로 바꿔야합니다. 목표는 환율이 여러가지 요인으로 변동하는 상황에서 가장 이득이 되는 날을 골라서 모든 돈을 바꾸는 것입니다. 하지만 만약에 바꾸지 못한다면 항공사에서 정해준 n일뒤에 바꿔야 하는 불상사가 일어날 수 있습니다. 물론 그 날의 환율이 좋다면 괜찮지만 최악일 수도 있습니다. 그렇다면 한번 문제를 정의해보겠습니다.

 

문제의 입력은 (p1,p2,...,pn), pj는 j번째 날 환율입니다. 1원에 pj달러라고 합시다. 그리고 환율 pjLpjU를 만족하는 bound를 가지고 있다고 가정합시다..

문제의 출력은 pi가 최대가 되는 i입니다.

 

그럼 이 문제를 reservation price policy 줄여서 RPP 알고리즘으로 분석을 해보도록 하겠습니다. 우선 파라미터 ϕ=U/L를 정의하겠습니다. 최대 환율과 최소 환율의 비율입니다. 알고리즘은 매우 단순합니다. pjp=UL를 만족하는 날에 모든 돈을 환전합니다. 물론 n번째날 까지 그런 날이 없다면 n번째 날 모든 돈을 바꿔야합니다. 이 알고리즘은 다음 3가지를 만족합니다. 

 

  1. RPP 알고리즘의 competitive ratio는 n의 값을 아느냐 모르냐에 상관없이 ϕ를 만족합니다
  2. n의 값을 알더라도 ϕ-competitive ratio보다 작을 수 없습니다.
  3. UL을 모르고 ϕ만 안다고 할 경우에 competitive ratio는 적어도 ϕ를 보장합니다.

1번 Proof.

만약에 모든 n에 대하여 pjp라고 하면, RPP 알고리즘은 모든 돈을 마지막 날에 환전을 할 것이고 pnL을 보장합니다. 최적해는 pjp=UL이므로 ratio는 다음과 같습니다.

OPTALGULL=ϕ

 

pjp를 만족하는 j가 존재한다고 하면, RPP 알고리즘은 pjUL를 만족하는 값을 보장합니다. 그리고 최적해는 pjU 입니다. 둘 사이의 ratio는 다음과 같습니다.

OPTALGUUL=ϕ

 

2번 Proof.

1번 증명에서 밝혔듯이 n에 따라서 competitive ratio가 바뀌지는 않습니다.

 

3번 Proof.

우리가 ϕ를 알고 있고 입력 시퀀스 (p1,p2,...,pn)에서 pi=1,i[n1]을 RPP 알고리즘 ALG에 대입합시다. 이럴경우, LU이므로, ϕ1을 만족해야 합니다.

만약 ALG가 day i[n1]에 트레이드를 한다면, pn=ϕ라고 할 때, 최적해는 pn에 트레이드하는 것입니다. 

 

OPTALGϕ1=ϕ

 

만약 ALG가 n번째 날에 pn=1/ϕ에 환전을 한다고 하면, 최적해는 1이 되므로 ϕ ratio를 만족합니다.

 

OPTALG11/ϕ=ϕ

 

One-Way Trading

One-Way Trading은 TSS 알고리즘의 기본적인 접근방식입니다. 앞서 정리한 알고리즘에서는 특정한 환율에서 모든 돈을 바꿔야 했다면 이제는 분할해서 환전을 할 수 있다고 합시다. 물론 모든 돈을 n일이 되기전에 바꿔야합니다. 만약 n일 되었는데 환전을 안한 돈이 남아있다면, n일의 환율로 환전을 해야합니다. 

 

문제의 입력은 이전 문제와 같습니다. (p1,p2,...,pn), pj는 j번째 날 환율입니다. 그리고 환율 pjLpjU를 만족하는 bound를 가지고 있다고 가정합시다.

문제의 출력은 f1,f2,...,fn[0,1] fi는 i번째 날에 환전하는 전체 금액의 비율입니다. 즉, ni=1fi=1를 만족해야합니다. 결과적으로, 총 환전하는 금액을 최대로 하는 비율의 시퀀스를 구하면 됩니다.

 

분할구매는 일괄구매보다 당연히 훨씬 강력합니다. 쉬운 알고리즘으로 competitive ratio를 logϕ로 구현할 수 있습니다. 알고리즘을 설명하도록 하겠습니다. 우선 보기쉽게 하기 위해서 ϕ=2k,k>0로 가정합시다. 그렇다면 우리는 i번째 날의 환율을 L2i,i0,1,...,k1이라고 할 수 있습니다.

 

처음 pi을 알았을 때, 알고리즘은 i에 현재까지 가장 큰 환율을 구합시다. 그리고 (i+1)/k 만큼의 비율을 환전합니다. 그리고 ii에 저장합니다. 이 알고리즘을 계속 반복합시다. 그리고 ii인 경우에는 그 날은 생략합니다. 아니면 (ii)/k 비율의 돈을 환전합니다. 이로써 i에는 가장 좋은 환율인 날을 기록합니다. 이것이 mixture of RPP 알고리즘입니다. 

 

Mixture of RPP 알고리즘은 c(ϕ)logϕ,(c(ϕ)1,ϕ)의 competitve ratio를 가지고 있습니다. 한번 증명해보도록 하겠습니다. 

 

입력 시퀀스 (p1,p2,...,pn)라고 합시다. 만약, ijL2ijpj를 만족하는 가장 큰 인덱스라고 할 때,  pl=max(p)를 만족하는 l이 있다고 할 때, OPT=plL2il+1이라고 할 수 있습니다. 그렇다면 환율이 꾸준히 내려가는 형태가 아니면 우리는 1=i0<i1<i2<...<ip=il라고 할 수 있습니다. 그리고 알고리즘을 적용하면 다음과 같은 값이 나올 것입니다.

pj=1ijij1kL2ij+kilkL

앞에는 l까지의 환전 값이고 뒤는 마지막날 남은 돈을 전부 환전한 값입니다. 앞에 값의 bound를 구해보자면, 값의 증가에서 skip이 없이 계속 시퀀스가 1,0,1,2,...,il로 모든 환율을 구매하는 경우입니다. 이유는 당연히 계속 일정한 비율을 최고 환율이 아닌 환율에서 스킵없이 구매를 하기 때문입니다. 그리고 우리는 다음과 같은 ALG의 바운드를 구할 수 있습니다.

 

ALG2il+11kL+kilkL

 

다음은 Randomized online 알고리즘에 대해서 정리해보도록 하겠습니다.