Disons que [a,b] représente l'intervalle sur la droite réelle de a à b, a < b, inclus (c'est-à-dire [a,b] = ensemble de tous les x tels que a<=x<=b). On dit aussi que [a,b] et [c,d] se chevauchent s'ils partagent tout x tel que x est à la fois dans [a,b] et [c,d].
Étant donné une liste d'intervalles ([x1,y1],[x2,y2],...), quelle est la manière la plus efficace de trouver tous ces intervalles qui se chevauchent avec [x,y] ?
Évidemment, je peux essayer chacun d'eux et l'obtenir en O(n). Mais je me demandais si je pouvais trier la liste des intervalles d'une manière intelligente, je pourrais trouver /un/ élément de chevauchement en O(log N) via une recherche binaire, et ensuite "regarder autour" de cette position dans la liste pour trouver tous les intervalles de chevauchement. Cependant, comment trier les intervalles de manière à ce qu'une telle stratégie fonctionne ?
Notez qu'il peut y avoir des chevauchements entre les éléments de la liste elle-même, ce qui rend la tâche difficile.
J'ai essayé de trier les intervalles par leur extrémité gauche, leur extrémité droite, leur milieu, mais aucun ne semble conduire à une recherche exhaustive.
Aide ?