Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

Persistent Data Structure

In normal DS when we change or update a particular value the entire DS gets changed. Consider an array arr = [1, 2, 3, 4, 4], now if we want to update arr[2] to 6 it will become [1, 2, 6, 4, 4]. This final array now lost its pervious state. But in case of Persistent DS it will preserve it's previous states as well.

Persistent Datastructure preserves all versions of itself

  • Every update to the data structure creates a new version
  • Update(version, <value>): returns a new version

Types of Persistence

1. Parital Persistence

  • Query any versions of the DS
  • Update only the latest version of DS

Let's say we have a series of versions as follows (in the form of Linked List):

v1 -> v2 -> v3

Now if we want to make some changes we can only do that to the v3, so after this update we will have

v1 -> v2 -> v3 -> v4

Hence, all the versions will always be linearly ordered (due to the additional constraint)

2. Full Persistence

  • Query any versions of the DS (typical of any persistence)
  • Update any version of the DS

Let's say initially you only one version v1, and then you make an update you get

v1 -> v2

Now you apply another update but again to v1 (this was not possible in partial persistence) here it will branch off as show below

        v1
       /  \ 
     v2    v3

Again if we update v3 we will get:-

        v1
       /  \ 
     v2    v3
            \
            v4 

Hence, in full persistence the versions will form a tree.

A DS that supports full persistence will always support partial persistence.