An interval is a pair of integers [a,b] such that a < b. The endpoints a and b of each interval [a,b] divide the integer line into partitions called elementary intervals. The interval x=[10, 20] has been added to the integer line.
An interval heap is a complete binary tree in which each node, except possibly the last one (the nodes of the complete binary tree are ordered using a level order traversal), contains two elements.
Interval Tree: The idea is to augment a self-balancing Binary Search Tree (BST) like Red Black Tree, AVL Tree, etc to maintain set of intervals so that all operations can be done in O(Logn) time. Every node of Interval Tree stores following information.
Sort the intervals array according to startTime. Create an array to store the merged intervals. If the current and previous intervals does not overlap each other, append the current interval to the merged array. Else, merge both previous and current intervals and insert it into the merged array.
I am looking for a Java based data structure which manages a collection time/date based intervals (preferably Joda Time) such that for every interval which is added to the collection, the data structure returns the subintervals(s) of the added interval, which are not yet in the data strucuture and consolidates the intervals.
Now in terms of set theory this would be easy, i.e. the return value would be "to be added" \ "existing" and the resulting structure would be "existing" union "to be added". Now of course I could emulate the date/time intervals using sets of discrete points but this seems not really effective.
So I am looking for an existing datastructure which already provides these set operations out of the box using intervals.
Just for clarification, here is an illustration of what I am looking for.
// case 0 // existing ********************************************* // to be added ******** // return value --empty-- // result ********************************************* // // case 1 // existing ***************************************** // to be added ************ // return value **** // result ********************************************* // // case 2 // existing *************************************** // to be added **** // return value **** // result **** *************************************** // // case 3 // existing ***************************************** // to be added ************ // return value **** // result ********************************************* // // case 4 // existing *************************************** // to be added **** // return value **** // result *************************************** **** // // case 5 // existing ***************** *************** // to be added **** // return value **** // result ***************** **** *************** // // case 6 // existing ***************** *************** // to be added ******** // return value ***** // result ********************** *************** // // case 7 // existing ***************** *************** // to be added ******** // return value ***** // result ***************** ******************** // // case 8 // existing ***************** **** *************** // to be added ***************** // return value **** ***** // result ********************************************* // // ...... //
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With