Якщо ви наполягаєте на точному розділенні, то вам потрібно обчислити всі врівноважені перегородки набору точок у площині лінією (оптимальний розділ - це розділ Вороного, тому два набори точок розділені прямою). Такі розділи відомі як -набори. Найбільш швидкий алгоритм, відомий в даний час для цієї роботи в для обчислення цих розділів у подвійному [тобто, -рівні набору з рядків, при ] . Після того, як у вас є всі можливі розділи, потрібно просто перевірити кожен з них. Використовуючи стандартні трюки, це можна зробити в постійний час для кожного розділу.кO (н4 / 3журналn )кнk = n / 2
(Оновлення: Доведення, що оптимальний розділ реалізований a к-набір, для k = n / 2, не зовсім банально. Я залишив би це як миле вправу для зацікавленого читача. Підказка. Розгляньте лінію, що проходить через два оптимальних центри, і напрямок, перпендикулярний до неї.)
Якщо ви не піклуєтесь про точне рішення, тоді більш простим підходом буде використання корсет для к-групи кластеризації Це призведе доO (ϵ- 2журналn ) зважених балів у цьому випадку із загальною вагою н. Тоді вам просто потрібно вирішити задачу на зваженій точці. Найпростішим рішенням було б генерувати тоді набір кандидатських місць для центрів та спробувати всі пари на зважених точках. Побудова основних ядер та генерація кандидатських центрів описані в цьому документі:
http://sarielhp.org/p/03/kcoreset/