Як підказує @TsuyoshiIto, існує алгоритм -time для цієї проблеми, завдяки Edelsbrunner та Preparata. Насправді їх алгоритм знаходить опуклий багатокутник з мінімально можливою кількістю ребер, що розділяє два набори точок. Вони також доводять нижню межу для більш загальної проблеми в алгебраїчній моделі рішень; однак не ясно, чи стосується ця нижня межа до випадку трикутника.Ω ( n log n )O(nlogn)Ω(nlogn)
Повний опис алгоритму тут занадто довгий, щоб опублікувати тут, але ось основна ідея. Нехай - опуклий корпус позитивних точок. Для кожного негативною точки , розгляне лінію через , які стосуються . Ці лінії розділяють площину на чотири клини, один з яких містить ; Нехай бути клин протилежної тій , яка містить . Нарешті, нехай ("заборонена область") є об'єднанням усіх клинів . Будь-трикутник поділу необхідно відокремити від . І іq q C C W ( q ) C F W ( q ) C F C F O ( n log n )CqqCCW(q)CFW(q)CFCFможе бути побудований за час.O(nlogn)
Позначте краї черзі за годинниковою стрілкою та проти годинникової стрілки. Едельсбруннер та Препарата також доводять, що якщо існує розділюючий трикутник, то існує розділюючий трикутник, ребра якого є колінеарними із стрілками за годинниковою стрілкою . Через додатковий час, ми можемо знайти (обов'язково за годинниковою стрілкою) край вперше потрапив променем, від кожного краю годинникової стрілки ; назвіть цей край "наступником" . Наступні вказівники розділяють краї за годинниковою стрілкою на цикли; якщо є розділюючий трикутник, один з цих наступних циклів має довжину 3 (а жоден не має довжини більше 4).F O ( n )FFO(n)e eFee
Докладнішу інформацію див. У оригінальному папері: