I'm looking for a solution like this one proposed by Eric Lippert. It is a great implementation, as it is immutable plus the append time is
O(1), but it downside is the
O(i) random access time.
On the other side there is a great implementation of collection with
O(1) on both append and random access. The only problem is that it strongly relies on mutability.
My questions is how to implement a collection which combines the benefits of both solutions? That is:
O(1)random access time
Memory complexity is not that big issue for me.
I do not know of a way to implement a list which has all your requirements -- immutability, persistence, O(1) insertion, O(1) removal, O(1) random access.
My suggestion to you is that (1) if you are interested in this topic, read Chris Okasaki's book. (Or, get a copy of his thesis, which was the basis of the book.) And (2) Chris Okasaki suggests the data structure described here for your purposes:
This list is O(1) insert and O(1) removal to the head and O(lg) for random access.