Agora eu fiquei com um problema. Parece ser realmente trivial, mas ainda assim é difícil encontrar uma solução apropriada. O problema é: um tem dois intervalos e deve encontrar a interseção deles.
Por exemplo:
- A interseção de [0, 3] e [2, 4] é [2, 3]
- A interseção de [-1, 34] e [0, 4] é [0, 4]
- A interseção de [0, 3] e [4, 4] está vazia
É bastante claro que o problema pode ser resolvido usando testes de todos os casos possíveis, mas isso levará muito tempo e é muito propenso a erros. Existe alguma maneira mais fácil de resolver o problema? Se você souber que a solução me ajuda, por favor. Ficarei muito grato.
algorithms
interval-arithmetic
ohidano
fonte
fonte
Respostas:
Podemos definir uma solução para esse problema da seguinte maneira. Consideram-se os intervalos de entrada pode ser definido como e I b = [Euuma= [ as, ume] , enquanto o intervalo de saída é definido como I o = [ o s , o e ] . Podemos encontrar a interseção I o = I a ⋂ I b fazendo o seguinte:Eub= [ bs, be] Euo= [ os, oe] Euo= Iuma⋂ eub
se ( ou a s > b e ) { retornar ∅ }bs> ae umas> be ∅
mais {
retornar[ os, oe]
}
fonte
Suponha que temos apenas dois intervalos de entrada.
fonte
De outra maneira simples
Dado:
2 intervalos
Intervalo 1 : (início1, fim1)
Intervalo 2 : (início2, fim2)
Necessário:
Condição booleana para verificar se os dois intervalos estão cruzados ou não
Solução: As
seguintes DUAS condições devem ser verdadeiras para considerar que dois intervalos são cruzados:
1. fim2> = início1
2. início2 <= fim1
fonte