Download - Reading data into sorted list
![Page 1: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/1.jpg)
Reading data into sorted list
Want to suck text file in and produce sorted list of the contents:• Option 1 : read directly into array based list, sort afterwards
• Option 2 : read directly into array based list, inserting each item into correct location (sort as we go)
• Option 3 : read into BST, extract list from it
Which option is asymptotically optimal?
![Page 2: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/2.jpg)
Tree List &BST Iterators
![Page 3: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/3.jpg)
Right Tool
• Trees good general purpose structure– Sorted– O(logN)* add/remove/find
*When balanced!
![Page 4: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/4.jpg)
Right Tool
• Trees good general purpose structure– Sorted– O(logN)* add/remove/find
• ArrayList better at random access:
0 1 2 3 4 5
C F G J P Y
![Page 5: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/5.jpg)
Tree->Array
• Trees good general purpose structure– Sorted– O(logN)* add/remove/find
• ArrayList better at random access:
0 1 2 3 4 5
C F G J P Y
![Page 6: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/6.jpg)
Tree->Array
• Print in order : InOrder Traversal– Left– Current– Right
![Page 7: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/7.jpg)
Tree->Array
• Transform to Vector– Make vector– InOrder Traversal, adding
current node to vector
Recursive helper–
![Page 8: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/8.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 9: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/9.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 10: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/10.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 11: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/11.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 12: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/12.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 13: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/13.jpg)
Tree->Array
• Transform to Vector
0 1 2 3 4 5
C F G J P Y
![Page 14: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/14.jpg)
Tree->Array
• Transform to Vector
• BigO:– T(n) = 2T(n/2) + 1…
O(n)– Each node processed once
![Page 15: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/15.jpg)
ArrayTree
• Transform to Tree0 1 2 3 4 5
C F G J P Y
![Page 16: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/16.jpg)
ArrayTree
• Transform to list to tree
• Start with empty tree• For each item in list O(n)– Add to tree O(logn)
If already sorted this won't be O(logn) without extra work
0 1 2 3 4 5
C F G J P Y
O(nlogn)
![Page 17: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/17.jpg)
Treesort
• TreeSort : Sort a list by turning it into a tree then back into a list:– Put data into BST : O(n*logn)– Copy out : O(n)
– Final Big O: O(nlogn + n) = O(nlogn)
![Page 18: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/18.jpg)
Reading data into sorted list
Want to suck text file in and produce sorted list of the contents:• Option 1 : read directly into array based list, sort afterwards
• Option 2 : read directly into array based list, inserting each item into correct location (sort as we go)
• Option 3 : read into BST, extract list from it
![Page 19: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/19.jpg)
Reading data into sorted list
Want to suck text file in and produce sorted list of the contents:• Option 1 : read directly into array based list, sort afterwards
Read: n * O(1) = O(n), Sort: O(nlogn) : Total = O(nlogn)
• Option 2 : read directly into array based list, inserting each item into correct location (sort as we go)Read: n * O(n) : Total = O(n2)
• Option 3 : read into BST, extract list from itRead: n * O(logn), Extract: n*O(1) : Total = O(nlogn)
![Page 20: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/20.jpg)
Iterators
• Why iterators?– Provide protected, efficient access
• How would we traverse fromoutside???
![Page 21: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/21.jpg)
Iteration
• Given root• How do we find the first node?
![Page 22: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/22.jpg)
Iteration
• Given root• How do we find the first node?– Slide left as far as possible
![Page 23: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/23.jpg)
Iteration
• Given a node• Where do I go next?
![Page 24: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/24.jpg)
Iteration
• Given a node• Where do I go next?– Right child, if exists…
![Page 25: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/25.jpg)
Iteration
• Given a node• Where do I go next?– Right child, if exists…– Otherwise depends
![Page 26: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/26.jpg)
Iteration
• Given a node• Where do I go next?– Right child, if exists…– Otherwise depends• I am left child
– Back to parent
• I am right child– Back up chain until find a left child
Stop at their parent
![Page 27: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/27.jpg)
Iteration
• Given a node• Where do I go next?– Right child, if exists…???– Otherwise depends• I am left child
– Back to parent
• I am right child– Back up chain until find a left child
Stop at their parent
![Page 28: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/28.jpg)
Iteration
• Given a node• Where do I go next?– If right child exists• Go right 1• Slide left as far as you can
– Otherwise depends• I am left child
– Back to parent
• I am right child– Back up chain until find a left child
Stop at their parent
![Page 29: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/29.jpg)
Iteration
• Iterator needs state– Maintain idea of where we are– Find our way to next node
![Page 30: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/30.jpg)
Iteration
• Iterator needs– Stack of node pointers• nullptr = end
MyIteratorStack:nullptr
Back of vector== Top of stack
![Page 31: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/31.jpg)
Iteration
• Iterator needs– Stack of node pointers• nullptr = end
– Start by sliding left and addingeach to stack
MyIteratorStack:CGnullptr
![Page 32: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/32.jpg)
Iteration
• Iterator needs– Stack of node pointers• nullptr = end
– Start by sliding left and addingeach to stack
– Top of stack is current location
MyIteratorStack:CGnullptr
![Page 33: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/33.jpg)
Iteration
• Iterator needs– Stack of node pointers• nullptr = end
– Start by sliding left and addingeach to stack
– Top of stack is current location– Iterators == if have same top:
MyIteratorStack:CGnullptr
![Page 34: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/34.jpg)
Iteration
• Stack = list of ancestorswe still need to process– Once processed, pop
MyIteratorStack:CGnullptr
![Page 35: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/35.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise depends• Top of stack has next node!
MyIteratorStack:CGnullptr
![Page 36: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/36.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:CGnullptr
C
![Page 37: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/37.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Gnullptr
C
![Page 38: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/38.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:FGnullptr
C
![Page 39: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/39.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Gnullptr
C F
![Page 40: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/40.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Gnullptr
C F
![Page 41: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/41.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:nullptr
C F G
![Page 42: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/42.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Pnullptr
C F G
![Page 43: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/43.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:JPnullptr
C F G
![Page 44: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/44.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Pnullptr
C F G J
![Page 45: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/45.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Pnullptr
C F G J
![Page 46: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/46.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:nullptr
C F G J P
![Page 47: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/47.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:Ynullptr
C F G J P
![Page 48: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/48.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:nullptr
C F G J P Y
![Page 49: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/49.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:nullptr
C F G J P Y
![Page 50: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/50.jpg)
Iteration
• Where do I go next?– Pop top of stack– If right child exists• Go right 1• Slide left as far as you can
adding each to stack
– Otherwise • Nothing
MyIteratorStack:nullptr
C F G J P Y
Nullptr – must be done!
![Page 51: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/51.jpg)
The BST
• BST provides– begin() : makes an iterator
from the root node…Iterator constructor searches for smallest element, builds stack
– end() : iterator with just null
![Page 52: Reading data into sorted list](https://reader035.vdocuments.net/reader035/viewer/2022062315/56814f53550346895dbcfcd0/html5/thumbnails/52.jpg)
Stacks & Trees
• Any iterative traversal of tree needs storage– Preorder / Inorder / Reverse : Stack– Postorder : Stack• Store current node and
state : rightNext vs done
– Level order : Queue