我有一个列表,其中每个值的区间为0..100。
前:
[0,1,2,20,21,29,30,31,31,32,89,90,91,92,92,92,92]
是否有算法可以确定此列表中有多少组?对于上面的列表,应该说有3组(0..2), (20..32), (89..92)
。
据我所知,k-means算法会将列表拆分成一定数量的组,但在我的情况下,我需要确定首先有多少组,所以k-means不会这真的有帮助。
如果语言有任何相关性,我将需要在PHP中执行此操作。
答案 0 :(得分:0)
如果您知道您的群组可以按某个最小距离d
分隔,则可以通过计算不在同一群组中的所有连续元素来计算群组:
Input: A, d
Output: num_groups
sort(A)
for i = 0 ... size(A) - 2
if A[i + 1] - A[i] >= d
num_groups++
如果您尚未确定最多k
组的最佳最小距离,则可以通过计算相邻差异并选择{{1}来确定此值最大元素:
k