Este problema es una instancia unidimensional del k-medians problem, que se puede establecer de la siguiente manera. Dado un conjunto de puntos x_1 ... x_n, divida estos puntos en k conjuntos S_1 ... S_k y elija k ubicaciones y_1 ... y_k de una manera que minimice la suma sobre todo x_i de | x_i - y_f (i) | , donde y_f (i) es la ubicación correspondiente al conjunto al que se asigna x_i.
Debido al hecho de que la mediana es el population minimizer for absolute distance (i.e. L_1 norm), se sigue que cada y_j ubicación será la mediana de los elementos x en el correspondiente conjunto S_j (de ahí el nombre k-medianas). Dado que usted está buscando valores enteros, existe el tecnicismo de que si S_j contiene un número par de elementos, la mediana podría no ser un número entero, pero en tales casos elegir el siguiente número entero arriba o abajo de la mediana dará la misma suma de distancias absolutas
La heurística estándar para resolver k-medianas (y el problema relacionado y más común k-means) es iterativa, pero no se garantiza que esto produzca una solución óptima o incluso buena. La solución del problema de k-medians para espacios métricos generales es NP-hard, y encontrar aproximaciones eficientes para k-medianas es un problema de investigación abierto. La "aproximación de k-medians" en Google, por ejemplo, dará lugar a un grupo de documentos con esquemas de aproximación. http://www.cis.upenn.edu/~sudipto/mypapers/kmedian_jcss.pdf http://graphics.stanford.edu/courses/cs468-06-winter/Papers/arr-clustering.pdf
En una dimensión cosas se vuelven más fáciles, y se puede utilizar un enfoque de programación dinámica. En this paper se describe una solución DP para el problema unidimensional de k-medias relacionado, y el código fuente en R está disponible here. Vea el documento para más detalles, pero la idea es esencialmente la misma que la propuesta por @SajalJain, y puede adaptarse fácilmente para resolver el problema de k-medians en lugar de k-means. Para j < = k y m < = n, deje que D (j, m) denote el costo de una solución de j-medians óptima para x_1 ... x_m, donde se supone que los x_i están ordenados. Tenemos la recurrencia
D(j,m) = min (D(j-1,q) + Cost(x_{q+1},...,x_m)
donde q varía desde j-1 a M-1 y Cost
es igual a la suma de las distancias absolutas a partir de la mediana. Con una implementación ingenua de O (n) de Cost
, esto daría una solución DP de O (n^3k) a todo el problema. Sin embargo, esto puede ser mejorado a O (n^2k) debido al hecho de que el coste se puede actualizar en tiempo constante en lugar de calcular a partir de cero cada vez, usando el hecho de que, para una secuencia ordenada:
Cost(x_1,...,x_h) = Cost(x_2,...,x_h) + median(x_1...x_h)-x_1 if h is odd
Cost(x_1,...,x_h) = Cost(x_2,...,x_h) + median(x_2...x_h)-x_1 if h is even
Consulte la descripción para obtener más detalles. Excepto por el hecho de que la actualización de la función de Costo es diferente, la implementación será la misma para k-medianas que para k-medias. http://journal.r-project.org/archive/2011-2/RJournal_2011-2_Wang+Song.pdf
No lo es: Set :: [1,2,5,9] ---> Partición en 2 grupos ::: Min Moves = 1 + 3 = 4? –
No realmente, habrá 2 elementos en la posición 2 ..... entonces Moves = 1 + 3 * 2 = 7 – Leopard
¿por qué no puedes mover el 5 y el 1 a 2? –