TA(threshold algorithm), NRA(no random access algorithm) 2011-2 과제연구

각 algorithm을 사용하기 위해서는 사전에 몇 가지가 가정되어야 한다.
1. 각각의 대상(차량)은 고유한 ID와 각각의 기준(가격, 연비)과 그 값을 가지고 있다.
2. 각 값은 0~1까지의 값을 가진다. (꼭 필요하지는 않지만 설명의 편의상 가정 한다)
3. 각각의 기준에 의해 정렬된 목록들을 가지고 있다.
가격연비
IDID
170.993615810.9998
1530.982515510.9965
............
15810.88591530.5548
9950.35485590.2254
[표 1] 예제

4. 각각의 기준을 평가해 순위를 매기는 aggregation function을 가진다. 이 함수는
monotone 함수여야 한다. 즉, aggregation function F가 있고,모든 i에 대해 xi ≤ x'i 이면
F(x1, ... , xm) ≤ F(x'1, ... , xm)을 만족한다.
다른 가정들의 경우 문제를 간단하게 인식하기 위한 것이고 성능이나 비용에 영향을 미치지 않지만 3의 경우 정렬은 큰 비용이 필요하다. 하지만 대체로 DB(database)에서 정렬이 많이 사용되고, 한 번 정렬해 놓으면 다른 명령에서 쓰이는 경우가 많아 꼭 비용이크다고만 볼 수 없다.

TA(threshold algorithm)

TA는 현재 읽은 값을 통해 그 다음에 올 값의 한계를 정해 top-k(k등수 이내)를 구하는 방법이다. F가 monotone 이고 각 항목은 정렬되어 있으므로 큰 값부터 순서대로 읽어 다음에 올 값들의 최대값을 한정할 수 있다. 이 값이 현재 top-k에 속해 있는 값보다 작을경우 더 이상 top-k에 들어 갈 수 있는 값이 나오지 못하므로 전체를 다 읽어보지 않더라도 top-k를 구할 수 있다.
구하는 방법은 다음과 같다.

1. 각 정렬된 목록에서 아직 확인하지 않은 가장 큰 값을 가지는 ID들을 찾는다.
2. 각 대상을 aggregation function F를 통해 평가한다.
3. 이 들의 값이 top-k(k등수 이내)이면 기억한다.
4. 각 목록에서 1에서 찾은 ID의 다음 순위의 값을 찾는다.
5. 4에서 찾은 값들로 aggregation function을 통해 평가하고 이 값을 t(threshold)라 하자.
6. t가 현재까지의 top-k에 속하면 1부터 반복하고, 그렇지 않으면 tok-k를 반환한다.

이 방법이 최적의 방법이라 알려져 있지만, 문제점은 2에서 F를 통해 평가할 때 DB에 random access를 한다는 점이다. DB에 따라서 randon access가 허용되지 않는 경우도 있기 때문이다. 다음에 알아볼 NRA algorithm은 random access를 하지 않고 top-k를 구할 수 있다.

NRA(no random access) algorithm

NRA 방식은 TA에 비해 random access를 하지 않지만 memory를 더 필요로 한다. top-k를 저장하기 위한 T와 tok-k가 될 가능성이 있는 ID를 저장하기 위한 C가 필요하다.

1. 각 정렬된 목록에서 순차적으로 읽는다(X).
2. 각 ID마다 F를 통해 최대값(B(X))과 최소값(W(X))을 계산한다.
예를 들어 [표 1]의 경우 ID 17을 읽는다. ID 17의 연비는 1을 넘을 수 없으므로 최대값은 연비가 1일 때의 값이고, 최소값은 연비가 0일 때의 값이다. 마찬가지로 다음에 ID 1581을 읽을 경우 최대값은 가격이 0.9936일 때의 값(ID 17 의 연비가 0.9936이므로 이보다 정렬위치가 낮은 ID 1581의 연비는 이를 넘을 수 없다.) 이고 최소값은 가격이 0일 때의 값이다.
3. T의 개수가 k보다 작으면 각 ID를 추가하고 1부터 반복한다.
그렇지 않으면 W(X)와 W(Tk)를 비교한다(Tk는 T에 속한 ID중 최소값이 가장 작은 ID).
W(X) > W(Tk) 이면 X를 T에 넣고 Tk는 C로 옮긴다.
W(X) ≤ W(Tk) 이면 X를 C에 넣는다.

4. C에 있는 모든 원소들(X1, X2, ... , Xi)의 최대값(B(Y))을 구한다.
B(Y) ≤ W(Tk) 이면 C에서 Y를 지운다.

5. C에 원소가 아무것도 없으면 T를 리턴하고 끝내고 아니면 1부터 반복한다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://tksmddl.egloos.com/tb/939477 [도움말]