Triângulos de aprendizagem no avião

13

Eu atribuído meus alunos o problema de encontrar um triângulo consistente com uma coleção de pontos em R 2 , rotulado com ± 1 . (Um triângulo T é consistente com a amostra rotulada se T contém todos os pontos positivos e nenhum dos pontos negativos; por suposição, a amostra admite pelo menos 1 triângulo consistente).mR2±1TT

O melhor que eles (ou I) poderiam fazer é um algoritmo executado no tempo , em que m é o tamanho da amostra. Alguém pode fazer melhor?O(m6)m

Aryeh
fonte
Só para esclarecer: os vértices do triângulo não precisam ser pontos da coleção, certo? E é aceitável ter pontos negativos no limite?
Ex0du5
(1) Eu votei para encerrar a pergunta porque havia entendido errado o problema. O sistema não me permite cancelar meu voto, mas eu praticamente o cancelo. (2) Eu acho que existe um algoritmo de tempo O (m log m), mas não temos tempo para verificá-lo agora. A idéia é calcular o casco convexo dos exemplos positivos e varrer esse casco convexo para encontrar três linhas formando o triângulo desejado.
Tsuyoshi Ito
@ ex0du5 - de fato, os vértices do triângulo não precisam consistir nos pontos de amostra. Quanto a questões de fronteira, elas podem ser ignoradas aqui, pois são desnecessárias. [Se as contagens de fronteira como parte do triângulo, então você não tem pontos negativos sobre a fronteira.]
Aryeh
@TsuyoshiIto: Eu estava pensando da mesma forma, mas há casos em que as bordas do triângulo não podem ser colineares às bordas do casco convexo, mas ainda existe um triângulo. Obviamente, o triângulo ainda contém o casco convexo, mas não é apenas estender as linhas do casco e encontrar o triângulo. Você pode precisar de linhas giradas em torno de alguns dos vértices para evitar os pontos negativos. Foi por isso que perguntei sobre negativos no limite, para permitir que um algoritmo de busca que escolhesse linhas dos vértices do casco aos negativos, para manter uma busca discreta.
Ex0du5
@ ex0du5: Bem, eu não assumi que as arestas do triângulo sejam paralelas a algumas arestas do casco convexo dos exemplos positivos.
Tsuyoshi Ito

Respostas:

14

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)

exemplo de $ C $ e $ F $

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:

Jeffε
fonte
3

Parece-me que é suficiente considerar as linhas tangentes dos pontos '-1' no casco convexo dos pontos '+1' como candidatos aos lados de (digamos que os pontos '+1' serão internos para T ).TT

Pena que não posso publicar imagens aqui. Mas imagine o seguinte: é a linha tangente ao casco convexo que passa por algum ponto '-1'. A é o ponto de tangência. B é o ponto extremo (veja abaixo) em t , e B C é a linha tangente do ponto B ( C é o ponto de tangência).tUMABtBCBC

Portanto, o algoritmo é o seguinte. Para cada linha das linhas tangentes, podemos tentar construir um triângulo com base nela:t

  1. Calcule os pontos de interseção de com todas as outras linhas;t
  2. Encontre um ponto extremo (mais distante de ) B e a linha correspondente t à direita (ou esquerda) de A , de modo que o psdotriangulo A B C (= A B , B C e a parte do casco convexo entre A e C ) não contém pontos '-1' (ou seja, não contém pontos).UMABtUMAUMABCUMABBCUMAC
  3. Faça o mesmo com a linha e veja se podemos' fechar 'o triângulo.t

Parece que esse seria um tempo de execução de . Talvez isso possa ser melhorado usando algumas estruturas de dados?O(m2)

shalabuda
fonte