O exercício é
Dado um conjunto de pontos e um ponto . Decidir em de tempo, se P é um vértice do polígono convexo formado a partir de pontos de S .
O problema é que estou um pouco confuso com a complexidade do tempo . A solução mais ingênua seria construir polígono convexo em e testar se é um dos vértices.
O problema é encontrar uma linha que atravessap e tem todos os outros pontos em S de um lado. Este é um problema bidimensional de programação linear, para que possa ser resolvido emO(n) tempo usando algoritmos geométricos de livros didáticos . Mas deixe-me descrever uma solução independente.
Para simplificar a notação, traduza todos os pontos para quep é a origem (0,0) , e deixar Q=S∖{p} . Então queremos determinar se existe um número realm de modo que (1) y<mx para todos (x,y)∈Q ou (2) y>mx para todos (x,y)∈Q . No primeiro caso,p é um vértice do casco superior de S ; no segundo caso,p é um vértice do casco inferior de S . Vou descrever um algoritmo para o primeiro caso; o outro caso é simétrico.
Se algum pontoQ encontra-se diretamente acima p (ou seja, se algum ponto Q tem coordenadas (0,y) para alguns y>0 ), então p não pode ficar no casco superior. É fácil verificar esta condição emO(n) Tempo.
Portanto, não assuma pontosQ deite-se diretamente acima p . oy -axis splits Q em dois subconjuntos L (esquerda) e R (direita). Pontos emL tem negativo x -coordenadas e aponta R tem positivo x -coordenadas. (Pontos diretamente abaixop não importa; apenas ignore-os.)
E semL<MR , então todos os pontos Q está estritamente abaixo da linha y=mx , tão p é um vértice do casco superior.
E semL=MR , então a linha y=mx passa por um ponto em L e um ponto em R e nenhum ponto Q está estritamente acima dessa linha. assimp fica em uma borda do casco superior, mas não é um vértice.
E semL>MR , pelo menos um ponto em L e pelo menos um ponto R estão estritamente acima da linha y=mx . assimp encontra-se estritamente abaixo do casco superior.
É fácil calcularmL e MR no O(n) Tempo. Na verdade, não precisamos calcularm .
fonte