K- साधन एक मानक अनसुनी क्लस्टरिंग एल्गोरिथ्म है, जो "अंक" का एक सेट और क्लस्टर K की संख्या को देखते हुए, K समूहों में से किसी एक को प्रत्येक "बिंदु" प्रदान करेगा।
K- साधनों का छद्म कोड
ध्यान दें कि के-साधन के कई प्रकार हैं। आपको नीचे वर्णित एल्गोरिथ्म को लागू करना होगा। एल्गोरिथ्म पर आपके पास कुछ भिन्नता हो सकती है या जब तक आप एक ही परिणाम प्राप्त नहीं करेंगे, तब तक अंतर्निहित इंसर्ट का उपयोग करेंगे।
इस चुनौती में, सभी इनपुट 2 डी विमान पर बिंदु होंगे (प्रत्येक बिंदु x और y में इसके निर्देशांक द्वारा दर्शाया गया है)।
Inputs: K, the number of clusters
P, the set of points
Choose K points of P uniformly at random
Each chosen point is the initial centroid of its cluster
Loop:
For each point in P:
Assign to the cluster whose centroid is the nearest (Euclidean distance)
In case of a tie, any of the tied cluster can be chosen
Recompute the centroid of each cluster:
Its x coordinate is the average of all x's of the points in the cluster
Its y coordinate is the average of all y's of the points in the cluster
Until the clusters don't change from one iteration to the next
Output: the set of clusters
इनपुट और आउटपुट
- आप के और पी के माध्यम से
STDIN
या एक फ़ंक्शन तर्क के रूप में ले सकते हैं , आदि। - P और P के बिंदुओं को किसी भी संरचना का उपयोग करके दर्शाया जा सकता है जो आपकी पसंद की भाषा में सेट / सूचियों के लिए स्वाभाविक है।
- K एक सख्ती से धनात्मक पूर्णांक है।
- आप मान सकते हैं कि इनपुट मान्य हैं।
- P में हमेशा कम से कम K अंक होंगे।
- आप समूहों को आउटपुट कर सकते हैं
STDOUT
, उन्हें एक फ़ंक्शन से वापस कर सकते हैं, आदि। - समूहों के क्रम और समूहों के अंदर का क्रम महत्वहीन है। -आप या तो समूहों का प्रतिनिधित्व करने के लिए बिंदुओं के समूहों को वापस कर सकते हैं, या क्लस्टर के लिए पहचानकर्ता के साथ लेबल किए गए प्रत्येक बिंदु (जैसे एक पूर्णांक)।
परीक्षण के मामलों
चूंकि परिणामी क्लस्टर इस बात पर निर्भर करते हैं कि प्रारंभ में कौन से बिंदु चुने गए थे, आप सभी को एक ही परिणाम नहीं मिल सकता है (या हर बार जब आप अपना कोड चलाते हैं)।
इसलिए, आउटपुट को केवल उदाहरण आउटपुट के रूप में लें।
Input:
K = 1
P = [[1,2.5]]
Output:
[[[1,2.5]]]
Input:
K = 3
P = [[4,8], [15,16], [23,42], [-13.37,-12.1], [666,-666]]
Output:
[[[666,-666]],[[-13.37,-12.1],[4,8]],[[15,16],[23,42]]]
Input:
K = 2
P = [[1,1], [1,1], [1,1]]
Output:
[[[1,1]],[[1,1],[1,1]]]
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे कम जवाब जीतता है।
1
सभी बिंदुओं में लेबल होता है , दूसरे के सभी बिंदुओं पर लेबल 2
आदि होता है)
K=2, P = [[1,1], [1,1], [1,1]]
।