302 votes

Ce qui ' s le moyen le plus efficace pour tester deux gammes entières de chevauchement ?

Étant donné deux gammes entier inclus [x1 : x2] et [y1:y2], où x1 Une implémentation simple est la suivante :

Mais je pense qu’il y a des moyens plus efficaces pour calculer cela.

Quelle méthode serait la plus efficace en termes d’opérations moins.

546voto

Simon Nickerson Points 17147

Que signifie pour les tranches se chevauchent ? Cela signifie il existe un certain nombre C qui se trouve dans les deux gammes, c'est-à-dire

et

Maintenant, si l'on peut supposer que les plages sont bien formés (afin que x1

155voto

KFL Points 1082

Étant donné deux gammes [x1, x2], [y1, y2]

70voto

FloatingRock Points 406

Cela peut facilement s’offenser un cerveau humain normal, donc j’ai trouvé une approche visuelle pour être plus facile à comprendre :

Overlap madness

Je trouve que c’est assez explicite lorsque visualisé de cette manière.

10voto

ruslik Points 8442

Je suppose que la question portait sur le plus rapide, pas le code le plus court. La version la plus rapide faut éviter les branches, donc nous pouvons écrire quelque chose comme ceci :

pour les cas simples :

ou, pour ce cas :

4voto

return x2 >= y1 && x1 <= y2;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X