Para pontos, existem caixas vazias, consulte a introdução deste documento http://www.cs.uwm.edu/faculty/ad/maximal.pdf . Pode-se calcular essas caixas aproximadamente dessa vez (consulte a introdução para refs).O ( n 3 )nO(n3)
Para o seu problema, pegue uma amostra aleatória de pontos, onde cada ponto é escolhido com capacidade de . Uma amostra tão aleatória tem tamanho (na expectativa) [e, por uma questão de contradição, assuma que seja]. Existem caixas vazias com pontos de ao lado, acima. Para cada caixa, use um intervalo ortogonal pesquisando a estrutura de dados para calcular quantos pontos exatamente ela contém. Repita este processo vezes. Com alta probabilidade, uma das caixas que você tentou é a caixa desejada.n / k O ( ( n / k ) 3 ) R O ( k 6 log n )1/kn/kO((n/k)3)RO(k6logn)
No geral, o tempo de execução disso é .O((n/k)3∗k6∗polylogn)=O(n3k3logO(1)n)
Para ver por que esse trabalho, considere a caixa ideal. Tem 6 pontos de P no seu limite. A probabilidade de a amostra aleatória escolher esses seis pontos e nenhum dos pontos dentro da caixa ser pelo menos . Assim, se você repetir o processo vezes, com alta probabilidade, uma das amostras aleatórias induzirá a caixa desejada como uma caixa vazia.O((1/p)logn)1k6(1−1/k)k−6≈1/k6=pO((1/p)logn)
Como é restrito para o número de caixas vazias (consulte o artigo acima para obter referências relevantes), parece improvável que seja possível um algoritmo significativamente mais rápido.Θ(n3)
[Na ref que eu dei, eles mencionam que [17] fornece um algoritmo que enumera todas as caixas vazias máximas entre os pontos em 3d no tempo , que é a caixa preta que você precisa para os itens acima. .]O(n3log2n)