我有一個有序的一維數組數組。數組的長度和數組的值都是任意的。我想根據數值將數組分成k個分區,例如,假設我想要4個分區,分配爲30%/ 30%/ 20%/ 20%,即前30%的值先後,後面的30%等。我選擇k和分配的百分比。另外,如果相同的數字在數組中出現多次,則不應將其包含在兩個不同的分區中。這意味着上述分配百分比並不嚴格,但如果您願意的話,可以是「目標」或「起點」。例如,假設我的數組是ar = [1, 5, 5, 6, 7, 8, 8, 8, 8, 8]
。數字聚類/分區算法
我選擇k = 4
,數字應分配到分區A,B,C和D,百分比爲pA = pB = pC = pD = 25%
。
鑑於我上面給了限制,導致分區應該是:
A = [1] B = [5, 5] C = [6, 7] D = [8, 8, 8, 8, 8]
,導致(實現/修正)百分率值pcA = 10%, pcB = 20%, pcC = 20%, pcD = 50%
在我看來,我需要改進的K-意味着算法,因爲標準算法不能保證尊重我的百分比和/或要求相同的值不能超過一個集羣/分區。
那麼,有沒有這種聚類算法?
如果指定了4個分區並且有一個數組「'1,1,1,1,1,1,1,8」',那麼會發生什麼? – Femaref
首先,您應該創建更多示例來明確要求。例如,當ar = [1,2,3,4,5,6,7,8,9,10]'時,你對k = 4,25%分佈有什麼期望? –
您需要定義某種度量來量化特定分區與目標的距離。沒有這樣的措施,你就不知道哪個解決方案是「最好的」。天真的方法(根據原始百分比進行分區,然後移動分區邊界以適應約束條件)將始終爲您提供解決方案,您只是不知道它有多好。 – fmr