Si insiste en una partición precisa, debe calcular todas las particiones equilibradas de un conjunto de puntos en el plano por una línea (la partición óptima es una partición de Voronoi, por lo que los dos conjuntos de puntos están separados por una línea). Tales particiones se conocen como conjuntos . El algoritmo más rápido actualmente conocido para este trabajo en para calcular estas particiones en el dual [es decir, el nivel de un conjunto de líneas, para ] . Una vez que tenga todas las particiones posibles, solo necesita verificar cada una de ellas. Usando trucos estándar, esto se puede hacer en tiempo constante para cada partición.kO(n4/3logn)knk=n/2
(Actualización: Probar que la partición óptima se realiza mediante un conjunto , para , no es completamente trivial. Lo dejaría como un lindo ejercicio para el lector interesado. Sugerencia: considere la línea que pasa por los dos centros óptimos, y la dirección perpendicular a él.)kk=n/2
Si no le importa la solución exacta, entonces un enfoque más fácil sería usar un núcleo para la agrupación de medios . Esto daría lugar a puntos ponderados en este caso, con un peso total . Luego, solo necesita resolver el problema en el conjunto de puntos ponderados. La solución más fácil sería generar un conjunto de ubicaciones candidatas para los centros y probar todos los pares en los puntos ponderados. La construcción del núcleo y la generación de los centros candidatos se describen en este documento:kO(ϵ−2logn)n
http://sarielhp.org/p/03/kcoreset/