Como o @TsuyoshiIto sugere, existe um algoritmo de tempo para esse problema, devido a Edelsbrunner e Preparata. De fato, seu algoritmo encontra um polígono convexo com o número mínimo possível de arestas que separa os dois conjuntos de pontos. Eles também provam um Ω ( n log n )O(nlogn)Ω(nlogn) limite inferior para o problema mais geral no modelo de árvore de decisão algébrica; no entanto, não está claro se esse limite inferior se aplica à caixa do triângulo.
Uma descrição completa do algoritmo é muito longa para ser postada aqui, mas aqui está a idéia básica. Seja o casco convexo dos pontos positivos. Para cada ponto negativo q , considerar as linhas através q que são tangentes a C . Essas linhas dividem o avião em quatro fatias, uma das quais contém C ; deixar W ( q ) ser a cunha oposta aquela que contém C . Finalmente, seja F (a "região proibida") a união de todas as cunhas W ( q ) . Qualquer triângulo separador deve separar C de FCqqCCW(q)CFW(q)CF. Ambos e F podem ser construídos em O ( N log N ) tempo.CFO(nlogn)
Rotule as bordas de alternadamente no sentido horário e anti-horário. Edelsbrunner e Preparata provam ainda que, se existir um triângulo de separação, existe um triângulo de separação cujas arestas são colineares com as arestas de F no sentido horário . Em O ( n ) tempo adicional, podemos encontrar a borda (necessariamente no sentido horário) de F atingida pela primeira vez por um raio de cada borda no sentido horário e ; chame essa vantagem de "sucessora" de eFFO(n)Fee . Os ponteiros sucessores dividem as arestas no sentido horário em ciclos; se houver um triângulo separador, um desses ciclos sucessores terá comprimento 3 (e nenhum terá comprimento maior que 4).
Consulte o documento original para obter mais detalhes: