Questa è fondamentalmente una domanda di partizionamento dello spazio. Hai un grande spazio con contenitori e un punto specifico in quello spazio, quali contenitori tocca? Molti giochi devono risolvere questo problema, quindi non sarebbe una cattiva idea iniziare da lì. Cerca articoli sul "rilevamento di collisione in fase ampia".
Il modo più semplice per farlo è dividere lo spazio numerico in un numero costante di pezzi. Ogni pezzo sa quali insiemi si intersecano con esso, qualcosa che calcoli ogni volta che viene aggiunto un nuovo set. Ora, anziché testare ogni singolo set quando si ha un punto, è sufficiente controllare i set contenuti nel pezzo in cui si trova il punto.
Un altro algoritmo generale ed efficiente utilizzato è il parzializzazione dello spazio binario. Questo algoritmo suddivide il tuo spazio in due parti. Ogni lato dovrebbe sapere quali insiemi si intersecano con esso. È possibile ripetere ricorsivamente questo processo alla precisione desiderata (anche se non ha senso creare una suddivisione più piccola dell'intervallo del set più piccolo).
Vincoli di memoria? – ChaosPandion
Nessun vincolo di memoria –
Soluzioni Java: https://stackoverflow.com/questions/13399821/data-structures-that-can-map-a-range-of-keys-to-a-value – Vadzim