Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Indexed tree list - List with optimized add(index, obj), remove(index), remove(obj), indexOf(obj) #129

Open
wants to merge 18 commits into
base: master
Choose a base branch
from

Conversation

masyamandev
Copy link

Here is an implementation of List with optimized indexOf method.

Proposed data structure recalculates indexes on the fly when objects are inserted or removed from the middle of the list. There are no O(n) operations on a single element. Add, get, remove and indexOf methods have complexity of O(log(n)) if all elements in the list are different, however performance may degrade up to O(log(n) ^ 2) in cases when all elements in the list are the same.

There are 2 data structures implemented.
IndexedTreeListSet contains unique elements and implements both List and Set. All operations performs as O(log(n)). Slightly faster than IndexedTreeList.
IndexedTreeList is the similar structure, but it does not have restriction for unique objects. Performance may degrade up to O(log(n) ^ 2). This structure is slightly slower than IndexedTreeListSet even if it contains unique objects.

Code is based on TreeList adding internal Map for indexing and improved node management.

More information can be found in my original project's readme: https://github.com/masyamandev/indexable-set .

@masyamandev masyamandev changed the title Indexed tree list Indexed tree list - List with optimized add(index, obj), remove(index), remove(obj), indexOf(obj) Jan 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants