Submit | All submissions | Best solutions | Back to list |
CLUSTER - Phân cụm |
Phân cụm là một bài toán có ý nghĩa ứng dụng quan trọng trong các lĩnh vực như học máy, khai phá dữ liệu, thu thập dữ liệu và đòi hỏi phân hoạch tập các điểm dữ liệu ra thành các nhóm sao cho các điểm trong cùng một nhóm là “gần nhau” và “cách xa” các nhóm khác. Trong bài này chúng ta xét một dạng đơn giản của bài toán phân cụm.
Cho tập gồm n đối tượng X = {x1, x2, ..., xn}, khoảng cách d(xi, xj) giữa mọi cặp xi, xj và một số nguyên dương k (k ≤ n). Giả thiết là d(xi, xj) là các số nguyên dương, d(xi, xj) = d(xj, xi) và d(xi, xi) = 0, với mọi i = 1, 2, ..., n.
Ta gọi một cách phân cụm là một cách phân hoạch tập X ra thành k tập con khác rỗng (mỗi tập con như vậy được gọi là một cụm). Cho C = {C1, C2, ..., Ck} là một cách phân cụm, ta gọi độ phân tách của cách phân cụm C (ký hiệu là r(C )) là giá trị nhỏ nhất trong số các khoảng cách giữa hai phần tử bất kỳ thuộc hai cụm khác nhau, nghĩa là
r(C ) = min {d(u,v): u thuộc Cp, v thuộc Cq , p # q }.
Yêu cầu: Tìm cách phân cụm với độ phân tách là lớn nhất.
Input
- Dòng đầu tiên chứa hai số nguyên n và k. (2 ≤ K ≤ N ≤ 200)
- Dòng thứ i trong số n dòng tiếp theo ghi các số d(xi, x1), d(xi, x2), ..., d(xi, xn), i = 1, 2, ..., n. (d(xi, x1) ≤ 32767)
Output
Độ tách phân cụm tìm được
Example
Input
4 3
0 1 2 3
1 0 2 3
2 2 0 3
3 3 3 0
Output:
2
Added by: | special_one |
Date: | 2010-11-08 |
Time limit: | 0.200s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | C C++ 4.3.2 CPP C99 JAVA PAS-FPC |
Resource: | Olympic 2006 |