Thursday 5 April 2018

Pontos de collinear usando inclinação no forex


Esta é uma questão de concurso de programação. Só estou procurando conselhos, pois isso é apenas para prática e não com a finalidade de trapacear etc. O problema é que eu tenho um conjunto de milhares de pontos. Que têm uma coordenada x e y (entre 10-10 a 1010). Eu tenho que achar que se existem 4 pontos que são collinear, isto é, mentir em linha reta. Até agora, o que eu pensei é o seguinte: cada par de pontos, armazene o y2-y1x2-x1 em um mapa com inclinação como a chave e a lista dos pontos como valor. Depois de armazenar, veja se o mesmo valor já existe no mapa e se o par de pontos são diferentes do que você está processando no momento. Se eles são diferentes, então você tem o conjunto de 4 pontos que são colineares. No entanto, a complexidade do espaço e do tempo para este problema é O (N2). Além disso, isso envolve muitas operações decimais e de divisão que diminuem a precisão. Alguém poderia sugerir uma solução mais elegante para este problema. Basicamente, para cada ponto (x. Y), você considera todas as linhas possíveis que passam por este ponto. Cada linha pode ser descrita por dois parâmetros: uma escolha de parâmetros é m (inclinação da linha) e b (interseção com o eixo y): y mx b outra escolha é (a distância assinada da linha da origem) e (O ângulo da linha): x cos y sin. Estarei usando e no seguinte. Por arredondamento e com uma precisão determinada, você pode garantir que haja um número finito de linhas possíveis em cada ponto. Se você medir em etapas de 10 8. existem apenas 282 valores possíveis para (uma vez que a coordenada x e y máxima é 10 10). Se você medir em graus completos, existem apenas 180 valores possíveis para. Então, você pode representar todas as linhas possíveis em uma matriz bidimensional indexada por (,). Isso é chamado de uma matriz de acumuladores. Permite armazenar o número de pontos que pertencem a uma determinada linha dentro dessa matriz: agora precisamos verificar os baldes onde o acumulador tem valor de quatro ou mais, significaria que existem quatro ou mais pontos em uma das linhas que caem Naquele balde. Claro, desde que arredondamos e, nós precisamos verificar se esses pontos estão realmente na mesma linha (aqui podemos usar o algoritmo da nave O (n 2), ou se o número de pontos encontrados for grande, poderemos repetir este algoritmo Com uma subdivisão mais fina de e). Se escolhemos a resolução e grande o suficiente para que a maioria dos baldes contenha menos que quatro pontos, então devemos ter uma complexidade amortizada de: tempo: O ((número de pontos número de valores de) número de valores de) espaço: O (número De valores de número de valores) Caso contrário, precisamos de uma matriz de acumuladores maior. Ainda assim, acho que isso deve ser muito mais rápido do que testar cada par de pontos. Desculpe, meu comentário anterior de alguma forma foi cortado. Eu quis dizer o looping dos pontos e verificar se eles satisfazem a equação, como você deduziu corretamente. Quanto à sua próxima pergunta, sim, eu assumi que os pontos estão distribuídos uniformemente em toda a gama. Se os pontos não forem distribuídos uniformemente, o arredondamento para 108 provavelmente não funcionará, e você precisa de outra maneira de discretizar o Rho, como fazer o logaritmo antes do arredondamento. Provavelmente é melhor se você adaptar esse parâmetro para a disseminação real de seus pontos antes de cada execução. Ndash HugoRune 17 de dezembro 13 às 13:22 Para cada ponto Pi tem um conjunto de vetores V representando as conexões de Pi para cada outro ponto Qj onde i lt j: Se três vetores colineares existem no conjunto V os pontos são colineares. (O teste colinear é um produto vetor simples). Maior complexidade do espaço de execução: O (n (n1) (n2) 6) O (n3) Complexidade do espaço: O (1) SOLUÇÃO: Mostre que (1,2), (4,6) e (10,14) são Collinear Ao usar a fórmula de distância. E inclinação Pergunta 563408. Mostre que (1,2), (4,6) e (10,14) são colineares Ao usar a fórmula de distância. E inclinação Resposta de mananth (15050) Você pode colocar esta solução em SEU website Distância entre dois pontos (1,2) (4,6) x1 y1 x2 y2 d 1 2 4 6 ddd d5 Distância entre dois pontos (10,14) (4,6) x1 y1 x2 y2 d 10 14 4 6 dddd 10,00 Distância entre dois pontos (10,14) (1,2) x1 y1 x2 y2 d 10 14 1 2 dddd 15,00 510 15 A (4,6), B (10,14) C (1,2) d (BC) 15 d (AB) 10 d (AC) 5 d (AB) d (AC) d (BC) 10515 Isso só é possível se os pontos forem colineares, Senão a soma de duas distâncias não será igual à terceira distância. Então os pontos são colineais. POR inclinações (1,2) (4,6) x1 y1 x2 y2 1 2 4 6 (4,6) (10,14) x1 y1 x2 y2 4 6 10 14 inclinação m (y2-y1) (x2-x1) (14-6) (10-4) (86) m 4 3 as inclinações são iguais

No comments:

Post a Comment