군집화(clustering) 알고리즘은 같은 클러스터에는 최대한 비슷한 데이터가 묶이고, 서로 다른 클러스터 사이에는 다른 데이터들이 위치하도록 하는 알고리즘이다. UCP-Clustering은 군집화 알고리즘 중 하나로, 2차원 평면 위에 n개의 데이터가 주어질 때 다음과 같은 방식으로 데이터를 k개의 클러스터로 나눈다.
각 클러스터는 구심점이 되는 중심 좌표를 하나씩 가진다. n개의 데이터 중 서로 다른 k개를 무작위로 선택하고, 각 데이터의 좌표를 중심 좌표로 갖는 k개의 빈 클러스터를 만든다.
아래의 과정을 반복한다.
예를 들어, 3개의 데이터 (1,2),(3,4),(5,6)를 UCP-Clustering 알고리즘을 이용해 두 개의 클러스터로 나누는 상황을 생각해 보자. (1,2)와 (3,4)를 초기 중심 좌표로 선택하면 (1,2)와 (3,4),(5,6) 두 개의 클러스터로 나뉘고, 두 클러스터의 중심 좌표는 각각 (1,2), (4,5)가 된다. 다른 예시로 (1,2)와 (5,6)을 초기 중심 좌표로 선택하면 (1,2),(3,4)와 (5,6)으로 나뉘고, 두 클러스터의 중심 좌표는 각각 (2,3), (5,6)이 된다. 예시에서 알 수 있듯이, 초기에 클러스터의 중심 좌표를 어떻게 선택하느냐에 따라 알고리즘의 실행 결과가 달라지며, 위의 두 경우에서는 2번 과정이 모두 2번 반복된다.
k=2로 고정한다면 가능한 초기 중심 좌표의 경우의 수는 총 n(n−1)/2 가지이다. 알고리즘을 완료했을 때 두 클러스터의 중심 좌표로 가능한 경우를 모두 찾고, 각 경우에 대해 수렴하는 데까지 걸리는 2번 과정의 반복 횟수의 기댓값을 구하시오.
첫 번째 줄에 데이터의 수 N이 주어진다. (2≤N≤512)
그 후 N개의 줄에 i번째 데이터의 좌표인 (x_i,y_i)가 공백을 사이에 두고 주어진다. 모든 좌표는 정수이며, 모든 데이터의 좌표는 서로 다르다. (−106≤x_i,y_i≤106)
두 클러스터의 최종 중심 좌표 μ_1=(xμ_1,yμ_1), μ_2=(xμ_2,yμ_2)와 클러스터의 중심 좌표가 두 좌표로 수렴하는 데까지 걸리는 2번 과정의 반복 횟수의 기댓값을 공백을 사이에 두고 출력한다. 단, 두 좌표 중 더 작은 쪽을 μ_1으로 둔다. 가능한 좌표 쌍이 여러 개 존재하는 경우 μ_1이 작은 것부터, μ_1이 같은 경우는 μ_2가 작은 것부터 출력한다. 출력하는 값의 절대 오차 또는 상대 오차는 10−6까지 허용한다.
주어지는 모든 데이터에서 처음에 클러스터의 중심 좌표가 되는 데이터를 어떻게 고르더라도 UCP-Clustering이 실패하는 상황, 즉 두 클러스터의 중심 좌표가 같아지거나, 한쪽 클러스터가 비거나, 클러스터의 중심 좌표가 수렴하지 않게 되는 상황이 발생하지 않음이 보장된다.
첫 번째 예제에서, 알고리즘은 다음과 같이 동작한다.
세 가지 경우를 모두 고려했을 때, 중심 좌표가 μ_1=(1,2)와 μ_2=(4,5)로 수렴하는 데에 걸리는 평균 반복 횟수는 2회이다. 마찬가지로, μ_1=(2,3)과 μ_2=(5,6)으로 수렴하는 데에 걸리는 평균 반복 횟수 또한 2회이다. 두 μ_1 중 (1,2)가 (2,3)보다 작으므로 (1,2)와 (4,5)로 수렴하는 경우부터 출력한다.