Ik ben op zoek naar een goede maar vooral efficiënte manier om te bepalen of een bepaald interval in een bepaalde lijst terecht kan zonder hiermee andere intervallen te overlappen. Als het nieuwe interval een andere interval zou overlappen; dan moet deze in een nieuwe lijst terechtkomen.
Om het maar even met een voorbeeld duidelijk te maken; ik heb deze lijst van intervallen:
Aangezien er meerdere lijsten mogelijk zijn, wil ik zo efficiënt mogelijk kunnen bepalen in welke lijst er nog ruimte beschikbaar is voor het nieuwe interval. Ook wil ik dit binnen de lijst zo goed mogelijk kunnen bepalen.
Ik dacht de implementatie hiervan op te lossen door gebruik te maken van een HashMap<Integer, TreeSet>. De Integer stelt dan het nummer van de lijst voor; en de TreeSet wil ik gebruiken om een B-Tree voorstelling van de elementen te verkrijgen.
Voor deze heb ik dan ook een comparator geïmplementeerd voor de sortering van de intervallen (maar hier klopt nog iets niet aan imo):
Ik geraak er even niet uit op welke manier ik dit nu het best kan implementeren
Hopelijk is het een beetje duidelijk zo; alle hulp is welkom!
Om het maar even met een voorbeeld duidelijk te maken; ik heb deze lijst van intervallen:
code:
Ik wil het volgend interval in de lijst inbrengen: [45 - 90[. Dit is dus niet mogelijk omdat er overlap is met het element [60,90[. Ik denk dat het wel duidelijk is waar ik naartoe wil. 1
| [15, 30[ - [60, 90[ |
Aangezien er meerdere lijsten mogelijk zijn, wil ik zo efficiënt mogelijk kunnen bepalen in welke lijst er nog ruimte beschikbaar is voor het nieuwe interval. Ook wil ik dit binnen de lijst zo goed mogelijk kunnen bepalen.
Ik dacht de implementatie hiervan op te lossen door gebruik te maken van een HashMap<Integer, TreeSet>. De Integer stelt dan het nummer van de lijst voor; en de TreeSet wil ik gebruiken om een B-Tree voorstelling van de elementen te verkrijgen.
Voor deze heb ik dan ook een comparator geïmplementeerd voor de sortering van de intervallen (maar hier klopt nog iets niet aan imo):
Java:
Ik zou dus een subSet van deze TreeSet kunnen nemen om te bepalen of er een overlap inzit. Maar weet niet goed hoe ik deze dan moet bepalen.1
2
3
4
5
6
7
8
9
10
11
12
13
| private class IntervalComparator implements Comparator { public int compare(Object obj1, Object obj2) { Interval interval1 = (Interval ) obj1; Interval interval2 = (Interval ) obj2; int fromCompare = interval1.getFrom().compareTo(interval2.getFrom()); if(fromCompare != 0) { return fromCompare; } return interval1.getTo().compareTo(interval2.getTo()); } } |
Ik geraak er even niet uit op welke manier ik dit nu het best kan implementeren
Hopelijk is het een beetje duidelijk zo; alle hulp is welkom!