Formulação de polígono convexo

7

Temos uma lista ordenada de comprimentos laterais que podem ser usados ​​para formar um polígono. Existem tais valores ( ).nn1000

Agora precisamos descobrir se podemos usar 10 desses valores para formar um polígono convexo não degenerado.

Como abordamos isso? Qualquer coisa na ordem de é aceitável. Melhor se possível. Preciso da idéia geral de como proceder, das propriedades dos polígonos convexos que podem ser explorados aqui, etc.O(n2registron)

Alice
fonte
Posso perguntar o que você precisa disso? Seus limites específicos de entrada e tempo são interessantes ... De qualquer maneira, parece uma pergunta difícil.
Jmite
11
Duas observações: a convexidade não é importante. Veja isto: cs.mcgill.ca/~cs507/projects/1998/mas/main2.html É fácil determinar se é possível criar um polígono a partir de conjuntos de comprimentos: mathoverflow.net/questions/96617/…
Chao Xu
Isso é para o problema TKCONVEX no Codechef ? O objetivo dessas competições é encontrar os algoritmos relevantes ou pelo menos a literatura relevante por conta própria. (Observe que em Ciência da Computação , não temos política contra concursos em andamento , diferentemente da Matemática .)
Gilles 'pára de ser mau'
@Gilles até o algoritmo abaixo dará uma WA. Isso não é suficiente para corrigir o problema. E nós somos estudantes de graduação que não são tão bons em programação, mas queremos aprender. E concursos motivam a todos. E se aprendermos até 10 novos algoritmos por concurso, o ganho é enorme. Se alguém nos indicar a direção certa (observe que apenas apontar, sem códigos, nada), há mais chances de aprendermos o algoritmo real do problema. Então, apenas tentando aprender ... se eu resolver mais um problema, isso não afetará a tabela de classificação. Então eu acho que isso não importa, se ele nos ajuda a aprender
Alice
Acho que Codechef tem um fórum de discussão onde as pessoas postam soluções após o término do concurso.
precisa

Respostas:

6

Teorema 1. Para cada polígono com seqüência de comprimento de aresta , existe um polígono convexo com a mesma seqüência de comprimento de aresta.uma1 1,,umam

Prova. Aqui .

Definição. são reais não negativos. Satisfaz a desigualdade (estrita) de se para todos .uma1 1,,umannn2umaj<Eu=1 1numaEuj

Teorema 2. A sequência é uma sequência de comprimento da aresta para um polígono se satisfizer a desigualdade de -gon.uma1 1,,umann

Prova. Aqui . (observe que a prova aqui requer matemática avançada e também prova o teorema 1)

O problema é reduzido para:

Dada uma sequência de reais não negativos, encontre uma subsequência do elemento que satisfaça a desigualdade de -gon.nkk

Um algoritmo simples: verifique se é uma solução para cada . Se nenhum deles funcionar, não haverá solução.umaEu,,umaEu+k-1 11 1Eun-k+1 1

Prova. Se tivermos qualquer solução , encontre o maior , de modo que (ex .: existe uma lacuna). Se não existe essa lacuna, estamos prontos. Se houver, também é uma solução. (intuitivamente, usamos o elemento maior na lacuna e removemos o menor elemento). Podemos repetir essa etapa (no máximo vezes) e preencher todas as lacunas. Eventualmente, produzimos uma solução do formato para alguns .umaEu1 1,,umaEukjumaEuj+1 1-umaEuj>1 1umaEu2,,umaEuj,umaEuj+1 1-1 1,umaEuj+1 1,,umaEukk-1 1umaEuk-k+1 1,umaEuk-k,,umaEuk-1 1,umaEukEu

O algoritmo pode ser feito ingenuamente no tempo . Talvez haja uma maneira mais inteligente de fazer isso.O(kn)

Uma questão interessante de acompanhamento:

Dada uma sequência de reais não negativos, encontre a subsequência mais longa , de modo que todo elemento subsequente de satisfaça a desigualdade de -gon .nSkSk

Chao Xu
fonte
esse teorema 2 é uma extensão da desigualdade do triângulo? E por que a classificação é necessária? Podemos escolher qualquer subconjunto k dos pontos dados que satisfaça o segundo teorema.
Alice
Você não precisa classificar, a classificação apenas reduz a complexidade do tempo: verifique apenas subsequências em vez de . O(n)2n
Chao Xu
parece não funcionar. tem certeza de que precisamos verificar apenas polígonos nk?
Alice
Forneça um exemplo quando isso não funcionar.
precisa
3
Existe uma maneira um pouco melhor de fazer isso. Mantenha um total de execução das últimas arestas (adicionando e subtraindo o desse total de execução) e use esse total de execução para verificar a desigualdade de -gon. Isso reduz o tempo de a . kumaEu+kumaEukO(kn)O(n)
Peter Shor