K-Means Clustered Golf


8

Phân cụm K-Means ( Wikipedia )

Nhiệm vụ ở đây khá đơn giản, thực hiện một lần lặp duy nhất của thuật toán phân cụm k-mean trên ma trận nhị phân. Đây thực chất là nhiệm vụ thiết lập cho thuật toán k-mean chính, tôi cảm thấy việc thiết lập có thể dễ dàng hơn và lôi kéo các ngôn ngữ chơi gôn để cung cấp cho nó một cú đánh tốt. Ma trận được chuyển cho bạn sẽ có định dạng sau:

 0 0 0 0 0 0 0 0 1
 0 1 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 1
 0 0 1 0 0 0 0 0 0
 0 0 0 0 0 1 0 0 1
 0 0 0 0 0 0 0 0 0
 0 1 0 0 0 0 0 0 0
 0 1 0 0 0 1 0 0 0
 0 1 0 0 0 0 0 0 1
 0 0 0 0 0 0 0 0 0

1 đại diện cho một điểm, trong khi 0 đại diện cho việc thiếu điểm. Công việc của bạn sẽ là tạo ngẫu nhiên các k-1centroid và thực hiện phân cụm dữ liệu ban đầu xung quanh các centroid mà bạn đã tạo. kđược định nghĩa là min(grid#Width, grid#Height)-1. Việc ghi nhãn của mỗi centroid nên đi từ 2cho đến khi k. Chẳng hạn, trong trường hợp này, bạn có thể tạo các trọng tâm sau:

Centroid 2 was generated at: (1.0, 4.0)
Centroid 3 was generated at: (1.0, 5.0)
Centroid 4 was generated at: (5.0, 1.0)
Centroid 5 was generated at: (3.0, 3.0)
Centroid 6 was generated at: (0.0, 2.0)
Centroid 7 was generated at: (6.0, 6.0)
Centroid 8 was generated at: (2.0, 6.0)

Sau khi tạo các tâm, bạn phải lặp qua từng điểm được đánh dấu bằng a 1, vì chúng ta có thể coi các điểm được đánh dấu 0là khoảng trống. Đối với mỗi centroid, bạn phải quyết định centroid nào gần điểm nhất trong câu hỏi. Đây là khoảng cách cho ví dụ:

(0,8) distance from centroid 2 is 4.123105625617661
(0,8) distance from centroid 3 is 3.1622776601683795
(0,8) distance from centroid 4 is 8.602325267042627
(0,8) distance from centroid 5 is 5.830951894845301
(0,8) distance from centroid 6 is 6.0
(0,8) distance from centroid 7 is 6.324555320336759
(0,8) distance from centroid 8 is 2.8284271247461903
(1,1) distance from centroid 2 is 3.0
(1,1) distance from centroid 3 is 4.0
(1,1) distance from centroid 4 is 4.0
(1,1) distance from centroid 5 is 2.8284271247461903
(1,1) distance from centroid 6 is 1.4142135623730951
(1,1) distance from centroid 7 is 7.0710678118654755
(1,1) distance from centroid 8 is 5.0990195135927845
(2,8) distance from centroid 2 is 4.123105625617661
(2,8) distance from centroid 3 is 3.1622776601683795
(2,8) distance from centroid 4 is 7.615773105863909
(2,8) distance from centroid 5 is 5.0990195135927845
(2,8) distance from centroid 6 is 6.324555320336759
(2,8) distance from centroid 7 is 4.47213595499958
(2,8) distance from centroid 8 is 2.0
(3,2) distance from centroid 2 is 2.8284271247461903
(3,2) distance from centroid 3 is 3.605551275463989
(3,2) distance from centroid 4 is 2.23606797749979
(3,2) distance from centroid 5 is 1.0
(3,2) distance from centroid 6 is 3.0
(3,2) distance from centroid 7 is 5.0
(3,2) distance from centroid 8 is 4.123105625617661
(4,5) distance from centroid 2 is 3.1622776601683795
(4,5) distance from centroid 3 is 3.0
(4,5) distance from centroid 4 is 4.123105625617661
(4,5) distance from centroid 5 is 2.23606797749979
(4,5) distance from centroid 6 is 5.0
(4,5) distance from centroid 7 is 2.23606797749979
(4,5) distance from centroid 8 is 2.23606797749979
(4,8) distance from centroid 2 is 5.0
(4,8) distance from centroid 3 is 4.242640687119285
(4,8) distance from centroid 4 is 7.0710678118654755
(4,8) distance from centroid 5 is 5.0990195135927845
(4,8) distance from centroid 6 is 7.211102550927978
(4,8) distance from centroid 7 is 2.8284271247461903
(4,8) distance from centroid 8 is 2.8284271247461903
(6,1) distance from centroid 2 is 5.830951894845301
(6,1) distance from centroid 3 is 6.4031242374328485
(6,1) distance from centroid 4 is 1.0
(6,1) distance from centroid 5 is 3.605551275463989
(6,1) distance from centroid 6 is 6.082762530298219
(6,1) distance from centroid 7 is 5.0
(6,1) distance from centroid 8 is 6.4031242374328485
(7,1) distance from centroid 2 is 6.708203932499369
(7,1) distance from centroid 3 is 7.211102550927978
(7,1) distance from centroid 4 is 2.0
(7,1) distance from centroid 5 is 4.47213595499958
(7,1) distance from centroid 6 is 7.0710678118654755
(7,1) distance from centroid 7 is 5.0990195135927845
(7,1) distance from centroid 8 is 7.0710678118654755
(7,5) distance from centroid 2 is 6.082762530298219
(7,5) distance from centroid 3 is 6.0
(7,5) distance from centroid 4 is 4.47213595499958
(7,5) distance from centroid 5 is 4.47213595499958
(7,5) distance from centroid 6 is 7.615773105863909
(7,5) distance from centroid 7 is 1.4142135623730951
(7,5) distance from centroid 8 is 5.0990195135927845
(8,1) distance from centroid 2 is 7.615773105863909
(8,1) distance from centroid 3 is 8.06225774829855
(8,1) distance from centroid 4 is 3.0
(8,1) distance from centroid 5 is 5.385164807134504
(8,1) distance from centroid 6 is 8.06225774829855
(8,1) distance from centroid 7 is 5.385164807134504
(8,1) distance from centroid 8 is 7.810249675906654
(8,8) distance from centroid 2 is 8.06225774829855
(8,8) distance from centroid 3 is 7.615773105863909
(8,8) distance from centroid 4 is 7.615773105863909
(8,8) distance from centroid 5 is 7.0710678118654755
(8,8) distance from centroid 6 is 10.0
(8,8) distance from centroid 7 is 2.8284271247461903
(8,8) distance from centroid 8 is 6.324555320336759

Kết quả cuối cùng của thuật toán phân cụm là sẽ không còn 1 số nào trong ma trận, chỉ có các số centroid. Đây là lý do tại sao điều quan trọng là phải dán nhãn từ tâm 2-k+1, cho phép chúng tôi thay thế chúng, như sau:

 0 0 0 0 0 0 0 0 8
 0 6 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 8
 0 0 5 0 0 0 0 0 0
 0 0 0 0 0 5 0 0 7
 0 0 0 0 0 0 0 0 0
 0 4 0 0 0 0 0 0 0
 0 4 0 0 0 7 0 0 0
 0 4 0 0 0 0 0 0 7
 0 0 0 0 0 0 0 0 0

Đây là cách bố trí phân cụm ban đầu cho 7 centroid trên lưới được cung cấp, với các centroid được tạo ngẫu nhiên. Công việc của bạn là xuất phiên bản cụm của lưới đầu vào nhị phân.

Quy tắc

  • Các trọng k-1tâm phải được tạo ngẫu nhiên và nên ở bất cứ đâu từ (0,0)đến (grid#Width, grid#Height).
    • Giá trị của kmin(grid#Width, grid#Height)-1.
    • Các trọng tâm được tạo ra PHẢI được đánh số từ 2đến k.
  • Định dạng đầu vào PHẢI là một lưới 0 và 1, trong đó 0 biểu thị không gian trống và 1s đại diện cho các điểm.
    • Một lưới là một chuỗi sử dụng 1 char trên mỗi ô và \nlà các dấu phân cách hàng hoặc một mảng 2D.
    • Lưới truyền qua không được đảm bảo là hình vuông, nhưng nó được đảm bảo không trống.
  • Đầu ra cuối cùng có thể sử dụng mảng hoặc chuỗi phân cách.
  • Mã ngắn nhất thắng, đây là .

Câu trả lời:


1

Toán học 109 byte

Nếu tôi hiểu chính xác câu hỏi, một cái gì đó như thế này nên hoạt động. "KMeans" là một trong những phương thức được tích hợp sẵn trong FindCl cluster và ClusteringComponents.

SparseArray[Thread[(p=Position[#,1])->1+ClusteringComponents[p,Min[d=Dimensions@#]-1,1,Method->"KMeans"]],d]&

Cách sử dụng: %@in//MatrixFormđể có được trực quan hóa, inlà một mảng số nguyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.