Nota: movi esta pergunta de stackoverflow.com
Eu tenho um problema algorítmico no qual gostaria de ver se ele pode ser resolvido melhor do que :
Eu dei uma mesa do elementos em que cada elemento é uma tupla com e , ou seja, cada tupla é uma espécie de intervalo. Eu tenho que encontrar todos os intervalos que se sobrepõem a um determinado intervalo com e . Além disso, tenho duas disponíveis classificados listas e , que contém as valores, ou valores, respectivamente, em conjunto com o índice apontando para a respectiva entrada em . As listas são classificadas pelos valores de ou valores de respectivamente. (Vamos assumir que, e valores, são únicos.)
Problema:
Temos que encontrar cada intervalo / tupla onde e .
Meus pensamentos até agora:
Podemos excluir alguns elementos por qualquer aplicação de um dos limites do intervalo, ou seja, busca em ou em . Isso nos dá uma lista de elementos restantes: No entanto , não há limite inferior para o número de elementos em , independentemente da pesquisa que realizamos. Além disso, temos que verificar todos os elementos em se ou respectivamente, dependendo da pesquisa que fizemos anteriormente.
A complexidade desta solução é .
No entanto, digamos que é o número máximo de elementos que se sobrepõem ao intervalo . Se assumirmos , em seguida, a complexidade é , uma vez que pode excluir, pelo menos elementos, escolhendo a busca apropriado para . Ainda está em .
Você consegue pensar em uma abordagem melhor para resolver esse problema?
Para gravar:
A complexidade para encontrar todos os intervalos sobrepostos a um determinado intervalo usando uma árvore de intervalos é que é o número de intervalos sobrepostos. No entanto, no meu caso prático, estou usando um banco de dados MySQL que fornece árvores de índice para cada valor, ou seja, e , separadamente. Dessa forma, não consigo encontrar intervalos sobrepostos em menos de . Eu precisaria criar uma árvore de intervalo, que é uma árvore de pesquisa que armazena os dois limites de intervalo, ou seja, e , em uma única estrutura de dados. A complexidade para construir a árvore do intervalo é . [http://www.dgp.utoronto.ca/people/JamesStewart/378notes/22intervals/]
Respostas:
Acredito que as árvores de intervalo oferecem uma solução para o seu problema. Basicamente, você armazena seus intervalos na estrutura de dados da árvore de intervalos; então, para encontrar todos os intervalos que se sobrepõem[t0 0,t1 1] , você faz uma consulta na árvore do intervalo. Isso deve resolver seu problema e executar mais rapidamente do queO ( n ) Tempo.
fonte