Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to...
Transcript of Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to...
![Page 1: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/1.jpg)
Dynamic Data StructuresJohn Ross Wallrabenstein
![Page 2: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/2.jpg)
Recursion Review
• In the previous lecture, I asked you to find a recursive definition for the following problem:
• Given: A base10 number X
• Assume X has N digits
• Output: X printed vertically
![Page 3: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/3.jpg)
Print Vertically
• Did anyone come up with a solution?
![Page 4: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/4.jpg)
Print Vertically
![Page 5: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/5.jpg)
Print Vertically
• What is our base case?
![Page 6: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/6.jpg)
Print Vertically
• What is our base case?
• When X is a single digit: print X
![Page 7: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/7.jpg)
Print Vertically
• What is our base case?
• When X is a single digit: print X
• What is our recursive call?
![Page 8: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/8.jpg)
Print Vertically
• What is our base case?
• When X is a single digit: print X
• What is our recursive call?
• When X has more than one digit:
![Page 9: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/9.jpg)
Print Vertically
• What is our base case?
• When X is a single digit: print X
• What is our recursive call?
• When X has more than one digit:
• Print the N-1 most significant digits
![Page 10: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/10.jpg)
Print Vertically
• What is our base case?
• When X is a single digit: print X
• What is our recursive call?
• When X has more than one digit:
• Print the N-1 most significant digits
• Print the least significant digit
![Page 11: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/11.jpg)
Print Verticallypublic class PrintVertically {
public static void main(String[] args) { int x = 1234; System.out.println("writeVertical(" + x + "):"); writeVertical(x); } public static void writeVertical(int x){ //If X is a single digit if(x < 10){ System.out.println(x); } //If X has more than a single digit else{ //Print the most significant digits vertically writeVertical(x/10); //Print the least significant digit vertically System.out.println(x%10); } }}
![Page 12: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/12.jpg)
Asymptotic Notation
• When analyzing an algorithm, it is convenient to have a simple way to express the efficiency of the algorithm
• This allows us to compare the efficiency of two different algorithms
![Page 13: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/13.jpg)
“Big-Oh” Notation
• Assumption: Our algorithm is defined in terms of functions whose domains are the set of natural numbers
•N={0,1,2,...}
![Page 14: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/14.jpg)
“Big-Oh” Notation
• We would like to bound the running time of our algorithm by a measure of the number of atomic (constant time) operations it performs
![Page 15: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/15.jpg)
“Big-Oh” Notation
• We say that a function f(n) is O(g(n)) iff:
• there exists some constant c and n0 such that:
Not a typo!
![Page 16: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/16.jpg)
“Big-Oh” Notation
• Formally:
![Page 17: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/17.jpg)
“Big-Oh” Notation
![Page 18: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/18.jpg)
“Big-Oh” Notation
• Example:
• This program runs in O(n) time
for(int i = 0; i < n; ++i){ //Atomic Operations}
![Page 19: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/19.jpg)
“Big-Oh” Notation
• Example:
• This program runs in O(n2) time
for(int i = 0; i < n; ++i){ //Atomic Operations for(int j = 0; j < n; ++j){ //Atomic Operations }}
![Page 20: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/20.jpg)
Asymptotic Analysis
• The smaller the asymptotic bound, the faster the algorithm
• e.g. O(n) is preferable to O(n2)
![Page 21: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/21.jpg)
Data Structures
![Page 22: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/22.jpg)
Data Structures
• What are they?
![Page 23: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/23.jpg)
Data Structures
• What are they?
• A data structure is an abstraction used to model a set of related data
![Page 24: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/24.jpg)
Data Structures
• What are they?
• A data structure is an abstraction used to model a set of related data
• What data structures are you familiar with?
![Page 25: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/25.jpg)
Data Structures
• What are they?
• A data structure is an abstraction used to model a set of related data
• What data structures are you familiar with?
• Most Common Example: Arrays
![Page 26: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/26.jpg)
Data Structures
• What are they?
• A data structure is an abstraction used to model a set of related data
• What data structures are you familiar with?
• Most Common Example: Arrays
• Food for Thought: File Systems
![Page 27: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/27.jpg)
Static Data Structures
• Static Data Structures
• Data Structures that do not change* over the lifetime of their use
*This usually refers to the size of the structure
![Page 28: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/28.jpg)
Static Data Structures• Benefits:
• Fast Access to Individual Elements
• Drawbacks:
• Expensive to “update”
• e.g. Insertion, Deletion
• Finite size known at compile time
• e.g. Arrays
![Page 29: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/29.jpg)
Dynamic Data Structures
• Dynamic Data Structures
• Data Structures that change over their lifetime, allowing for efficient updates
![Page 30: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/30.jpg)
Dynamic Data Structures
• Benefits:
• Fast Updates (Insertion, Deletion)
• Flexible Size
• Drawbacks:
• Slow access to individual elements
![Page 31: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/31.jpg)
Arrays
• Recall that the size of an array must be declared at compile time
• How does this affect insertion/deletion?
![Page 32: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/32.jpg)
Array Deletion
• When we delete an element from an array, we usually waste memory
• If we want to reclaim this memory, we have to create a new array (of size n-1) and copy all n-1 elements
• This is inefficient!
![Page 33: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/33.jpg)
Array Insertion
• Case: Insert an element between existing elements
• We have to copy the entire array to a new location, leaving space for the new element
• This is inefficient!
![Page 34: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/34.jpg)
Array Insertion• Case: Insert (push) an element onto the
end of a full array
• We have to:
• Allocate space for an array of size n+1
• Copy n elements into the new array
• Add new element to the end
• Deallocate memory for old array
• (For C Programmers)
![Page 35: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/35.jpg)
Array Insertion
• Can we do better than O(n) time?
• How?
![Page 36: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/36.jpg)
Array Insertion
• Improving Insertion Efficiency
• Rule: When the array is full and a new element is to be added, proceed by:
• Allocating space for an array of size 2n
• Copy original n elements
• Add new element
![Page 37: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/37.jpg)
Array Insertion• How does this help?
• In the amortized case, we now have that insertion takes O(1)!
• Amortized analysis involves taking the cost of an operation over the number of times the operation is invoked
• In this case:
• A single push is effectively O(1)
![Page 38: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/38.jpg)
ArrayLists
• You have probably seen ArrayLists
• An ArrayList is a hybrid between a static data structure (arrays) and a fully dynamic structure
• ArrayLists use the previous optimization when inserting elements into a full array
![Page 39: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/39.jpg)
Linked Lists
• A linked list is a dynamic data structure composed of nodes
• Each node contains:
• Data
• Pointer to next node in list*
*In the case of a singly linked list
![Page 40: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/40.jpg)
Linked Lists
• How is the order of the elements in an array determined?
• By the index of the element
• How is the order of the elements in a linked list determined?
• By the next pointer in each node
![Page 41: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/41.jpg)
Linked Lists
• What are the benefits of this structure?
• Insertion:
• Point the current node’s next to predecessor’s next
• Point predecessor’s next to the current node
• No resizing!
![Page 42: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/42.jpg)
Linked Lists
• What are the benefits of this structure?
• Deletion:
• Point the previous node’s (predecessor) next to the current node’s next (successor)
• No inefficient use of memory!
![Page 43: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/43.jpg)
Linked Lists
• What are the drawbacks of this structure?
• Representation on disk may be fragmented
• Why?
• Linked Lists do not need contiguous blocks of memory
• Thus, nodes can be stored anywhere
![Page 44: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/44.jpg)
Dynamic Sets
• When building algorithms, sets of data must be able to change over time*
• We must be able to:
• Insert
• Delete
• Test Membership
*Have we seen this phrase before? ...
![Page 45: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/45.jpg)
Dynamic Sets
• What dynamic sets have you seen before?
• Stacks
• Queues
• Linked Lists
• Etc...
• Let’s look at a particular application of sets
![Page 46: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/46.jpg)
Disjoint Sets
• Two sets A and B are said to be disjoint if their intersection is null
• Many times, it is useful to partition a larger set into smaller, disjoint sets
• How can we keep track (Find) of the elements and combine (Union) the smaller sets into larger sets efficiently?
• Dynamic Data Structures to the rescue!
![Page 47: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/47.jpg)
Disjoint Sets
• A disjoint-set data structure maintains a collection S={S1,S2,...,Sk} of disjoint dynamic sets
• Each set is identified by a representative
![Page 48: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/48.jpg)
Disjoint Set Operations• We require the following operations to be
supported:
• Make-Set(x) - create a new set whose only member is x
• Union(x,y) - unites the dynamic sets that contain elements x and y
• Find-Set(x) - return a pointer to the representative of the set containing x
![Page 49: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/49.jpg)
Why We Care
• Before proceeding, why should we worry about how to use dynamic data structures to handle dynamic disjoint sets?
• Common Application:
• Determining the Connected Components of a Graph
• See Board
![Page 50: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/50.jpg)
Union / Find
• We will focus on constructing a dynamic data structure that computes Union and Find efficiently
![Page 51: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/51.jpg)
Union / Find
• To support the operations Union and Find on disjoint sets, we will use a disjoint set forest of trees
• Setup:
• Each member points only to its parent
• The root is the representative of the set
• (and also its own parent)
![Page 52: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/52.jpg)
Union / Find
![Page 53: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/53.jpg)
Find
• To implement Find(x) and return its representative element:
• Follow parent pointers until the root is reached
• Return the root (representative)
![Page 54: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/54.jpg)
Union
• To implement Union(x,y)
• Set the parent of one of the set’s representatives to the root of the other set
![Page 55: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/55.jpg)
Union / Find
• Consider the following scenario:
• We have x1,x2,...,xn objects
• We make each xi a set with Make-Set(x)
• We Union each xi into one large set
• See Board
• Does order matter?
![Page 56: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/56.jpg)
Union / Find• Consider the running time of Find if we
only use the tools we have seen so far:
• To Find element X in a set, if we have a linear chain of n nodes takes O(n) time
• If we have n calls to Find our running time is then:
• Can we do better?
![Page 57: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/57.jpg)
Union / Find• What is the source of inefficiency?
• We are appending a larger set onto a smaller set (xi)
• How can we fix this?
• Maintain the size of each set (easy)
• Always append the smaller set onto the larger set
• Use path compression to reduce tree height
![Page 58: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/58.jpg)
Union By Rank
• To always append the smaller set to the larger set, we maintain a rank for each set
• The rank is an upper bound on the height of the set tree
• The root with the smaller rank points to the root of the larger set
![Page 59: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/59.jpg)
Union By Rank
• See Board for Example
• Performance Analysis:
• Where we perform m operations on n elements
• The proof of this bound is beyond the scope of this course
![Page 60: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/60.jpg)
Path Compression• To lower the number of parent nodes we
have to pass through to reach the root in a Find(x) operation:
• Run Find(x) once to retrieve the root
• Run Find(x) again, pointing each node along the way to root
• See Board
• Running time:
![Page 61: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/61.jpg)
Combining Both
• When both Union By Rank and Path Compression are used:
• Running Time:
• Here, alpha represents the Ackermann Function, which is effectively constant
![Page 62: Dynamic Data Structurescs180/Spring2010Web/... · • A data structure is an abstraction used to model a set of related data. ... • Recall that the size of an array must be declared](https://reader031.fdocuments.net/reader031/viewer/2022011900/5edf43bdad6a402d666a9cb9/html5/thumbnails/62.jpg)
Questions