expanding stacks queues
play

Expanding Stacks & Queues CS16: Introduction to Data Structures - PowerPoint PPT Presentation

Expanding Stacks & Queues CS16: Introduction to Data Structures & Algorithms Spring 2020 Outline Abstract data types Stacks Capped-capacity Expandable Amortized analysis Queues Expandable queues From Lecture


  1. Expanding Stacks & Queues CS16: Introduction to Data Structures & Algorithms Spring 2020

  2. Outline ‣ Abstract data types ‣ Stacks ‣ Capped-capacity ‣ Expandable ‣ Amortized analysis ‣ Queues ‣ Expandable queues

  3. From Lecture 02 What is Running Time? Asymptotic worst-case running time = Number of elementary operations on worst-case input as a function of input size n when n tends to infinity In CS “running time” usually means asymptotic worst-case running time…but not always! we will learn about other kinds of running times 3

  4. Abstract Data Types ‣ Abstraction of a data structure ‣ Specifies “functionality” ‣ type of data stored ‣ operations it can perform ‣ Like a Java interface ‣ Specifies name & purpose of methods ‣ But not implementations 4

  5. Stacks ‣ Stores arbitrary objects ‣ Operations ‣ Push : adds object ‣ Pop : returns last object ‣ LIFO: last-in first-out ‣ Can be implemented with ‣ Linked lists, arrays, …

  6. Stack ADT ‣ push (object) ‣ inserts object ‣ object pop ( ) ‣ returns and removes last inserted object ‣ int size ( ) ‣ returns number objects in stack ‣ boolean isEmpty ( ) ‣ returns TRUE if empty; FALSE otherwise 6

  7. Capped-Capacity Stack ‣ Array-based Stack ‣ Stores objects in array ‣ keeps pointer to last inserted object ‣ Problem? ‣ Size of the stack is bounded by size of array :-( 7

  8. Capped-Capacity Stack Stack ( ): function isEmpty ( ): data = array of size 20 return count == 0 count = 0 function size ( ): ????? function push (object): function pop ( ): ????? ????? Activity #1

  9. Capped-capacity Stack Stack ( ): function isEmpty ( ): data = array of size 20 return count == 0 count = 0 function size ( ): ????? function push (object): function pop ( ): 2 min ????? ????? Activity #1

  10. Capped-capacity Stack Stack ( ): function isEmpty ( ): data = array of size 20 return count == 0 count = 0 function size ( ): ????? function push (object): function pop ( ): 1 min ????? ????? Activity #1

  11. Capped-capacity Stack Stack ( ): function isEmpty ( ): data = array of size 20 return count == 0 count = 0 function size ( ): ????? function push (object): function pop ( ): 0 min ????? ????? Activity #1

  12. Capped-Capacity Stack O(1) Stack ( ): function size ( ): data = array of size 20 return count O(1) count = 0 function isEmpty ( ): return count == 0 function push (object): function pop ( ): if count < 20: if count == 0: data[count] = object error(“empty stack”) count++ else: else: count-- error(“overfull”) return data[count] O(1) O(1)

  13. Expandable Stack ‣ Capped-capacity stack is fast ‣ but not useful in practice ‣ How can we design an uncapped Stack? ‣ Strategy #1 : Incremental ‣ increase size of array by constant c when full ‣ Strategy #2 : Doubling ‣ double size of array when full Arrays can’t be resized! Can only be copied 13

  14. Expandable Stack Stack ( ): data = array of size 20 What is the runtime? count = 0 capacity = 20 function push (object): data[count] = object count++ if count == capacity new_capacity = capacity + c /* incremental */ = capacity * 2 /* doubling */ new_data = array of size new_capacity for i = 0 to capacity - 1 new_data[i] = data[i] capacity = new_capacity data = new_data

  15. Expandable Stack function push (object): data[count] = object count++ if count == capacity new_capacity = capacity + c /* incremental */ = capacity * 2 /* doubling */ new_data = array of size new_capacity for i = 0 to capacity - 1 new_data[i] = data[i] capacity = new_capacity data = new_data ‣ Runtime when not expanding is O(1) & runtime when expanding is O(n) ‣ When does it expand? ‣ after n pushes, where n is capacity of array 15

  16. Incremental & Doubling Incremental (5) Doubling 50 50 40 40 30 30 Cost Cost 20 20 10 10 0 0 0 10 20 30 40 0 10 20 30 40 Push number Push number O(1) O(1) O(1) O(n) O(n) O(1) 16 O(1)

  17. Incremental & Doubling ‣ What are the worst-case runtimes? ‣ incremental: O(n) ‣ doubling: O(n) ‣ But are they really the same? 17

  18. What’s going on?

  19. Expandable Stack Run time depends on Stack ( ): count which depends on data = array of size 20 count = 0 # of previous pushes capacity = 20 function push (object): data[count] = object count++ if count == capacity new_capacity = capacity + c /* incremental */ = capacity * 2 /* doubling */ new_data = array of size new_capacity for i = 0 to capacity - 1 new_data[i] = data[i] capacity = new_capacity data = new_data

  20. Incremental & Doubling ‣ Worst-case analysis overestimates runtime ‣ for algorithms that are fast most of time… ‣ …and slow some of the time ‣ For these algorithms we need an alternative ‣ Amortized analysis! Measure cost on sequence of calls not a single call! 20

  21. Towards Amortized Analysis ‣ For certain algorithms it’s better to measure ‣ total running time on sequence of calls ‣ instead of measuring on a single call ‣ S(n) : total #calls on sequence of n calls ‣ Not runtime on a single input of size n ‣ For a stack ‣ S(n) : cost push #1 + cost push #2 + … + cost push #n 21

  22. <latexit sha1_base64="fizTbVUNR9Do6t871yGrdwVywI=">AB9HicbVBNS8NAEJ3Ur1q/qh69LBahXkoignorevFY0dhCG8tmu2mXbjZhd6OUkP/hxYOKV3+MN/+NmzYHbX0w8Hhvhpl5fsyZ0rb9bZWldW18rlY3Nre2d6u7evYoSahLIh7Jjo8V5UxQVzPNaSeWFIc+p21/fJX7UcqFYvEnZ7E1AvxULCAEayN9NALJCbpbV0cZ6nI+tWa3bCnQIvEKUgNCrT61a/eICJSIUmHCvVdexYeymWmhFOs0ovUTGZIyHtGuowCFVXjq9OkNHRhmgIJKmhEZT9fdEikOlJqFvOkOsR2rey8X/vG6ig3MvZSJONBVktihIONIRyiNAyYp0XxiCaSmVsRGWEThDZBVUwIzvzLi8Q9aVw0nJvTWvOySKMB3AIdXDgDJpwDS1wgYCEZ3iFN+vJerHerY9Za8kqZvbhD6zPH85qkI=</latexit> <latexit sha1_base64="fizTbVUNR9Do6t871yGrdwVywI=">AB9HicbVBNS8NAEJ3Ur1q/qh69LBahXkoignorevFY0dhCG8tmu2mXbjZhd6OUkP/hxYOKV3+MN/+NmzYHbX0w8Hhvhpl5fsyZ0rb9bZWldW18rlY3Nre2d6u7evYoSahLIh7Jjo8V5UxQVzPNaSeWFIc+p21/fJX7UcqFYvEnZ7E1AvxULCAEayN9NALJCbpbV0cZ6nI+tWa3bCnQIvEKUgNCrT61a/eICJSIUmHCvVdexYeymWmhFOs0ovUTGZIyHtGuowCFVXjq9OkNHRhmgIJKmhEZT9fdEikOlJqFvOkOsR2rey8X/vG6ig3MvZSJONBVktihIONIRyiNAyYp0XxiCaSmVsRGWEThDZBVUwIzvzLi8Q9aVw0nJvTWvOySKMB3AIdXDgDJpwDS1wgYCEZ3iFN+vJerHerY9Za8kqZvbhD6zPH85qkI=</latexit> <latexit sha1_base64="fizTbVUNR9Do6t871yGrdwVywI=">AB9HicbVBNS8NAEJ3Ur1q/qh69LBahXkoignorevFY0dhCG8tmu2mXbjZhd6OUkP/hxYOKV3+MN/+NmzYHbX0w8Hhvhpl5fsyZ0rb9bZWldW18rlY3Nre2d6u7evYoSahLIh7Jjo8V5UxQVzPNaSeWFIc+p21/fJX7UcqFYvEnZ7E1AvxULCAEayN9NALJCbpbV0cZ6nI+tWa3bCnQIvEKUgNCrT61a/eICJSIUmHCvVdexYeymWmhFOs0ovUTGZIyHtGuowCFVXjq9OkNHRhmgIJKmhEZT9fdEikOlJqFvOkOsR2rey8X/vG6ig3MvZSJONBVktihIONIRyiNAyYp0XxiCaSmVsRGWEThDZBVUwIzvzLi8Q9aVw0nJvTWvOySKMB3AIdXDgDJpwDS1wgYCEZ3iFN+vJerHerY9Za8kqZvbhD6zPH85qkI=</latexit> <latexit sha1_base64="fizTbVUNR9Do6t871yGrdwVywI=">AB9HicbVBNS8NAEJ3Ur1q/qh69LBahXkoignorevFY0dhCG8tmu2mXbjZhd6OUkP/hxYOKV3+MN/+NmzYHbX0w8Hhvhpl5fsyZ0rb9bZWldW18rlY3Nre2d6u7evYoSahLIh7Jjo8V5UxQVzPNaSeWFIc+p21/fJX7UcqFYvEnZ7E1AvxULCAEayN9NALJCbpbV0cZ6nI+tWa3bCnQIvEKUgNCrT61a/eICJSIUmHCvVdexYeymWmhFOs0ovUTGZIyHtGuowCFVXjq9OkNHRhmgIJKmhEZT9fdEikOlJqFvOkOsR2rey8X/vG6ig3MvZSJONBVktihIONIRyiNAyYp0XxiCaSmVsRGWEThDZBVUwIzvzLi8Q9aVw0nJvTWvOySKMB3AIdXDgDJpwDS1wgYCEZ3iFN+vJerHerY9Za8kqZvbhD6zPH85qkI=</latexit> Amortized Analysis ‣ Instead of reporting total cost of sequence ‣ report cost of sequence per call S ( n ) n 22

  23. Amortized Analysis of Incremental

  24. Amortized Analysis of Incremental Stack with start capacity c = 5 ‣ Expands by e = 5 ‣ ‣ 5 th push brings to capacity ‣ Objects copied to new array of size c+e = 5+5 = 10 ‣ Cost per push over 5 pushes? 24

  25. Amortized Analysis of Incremental Stack with start capacity c = 5 ‣ Expands by e = 5 ‣ S ( n ) = c + c = 5 + 5 Is each push = 2 O(1) ? 5 n c expansion pushes 25

  26. Amortized Analysis of Incremental ‣ What if we push 10 objects? S ( n ) = c + c + e + ( c + e ) 10 n 1st batch of pushes 1st expansion 2nd batch of pushes pushes 2nd expansion expansions c=5 e=5 26

  27. Amortized Analysis of Incremental ‣ What if we push 10 objects? S ( n ) = c + c + e + ( c + e ) 10 n = c + e + c + ( c + e ) 10 = 10 + 5 + (5 + 5) pushes 10 = 2.5 expansions c=5 e=5 27

  28. Amortized Analysis of Incremental S (10) = c + e + c + ( c + e ) = 10 + 5 + 10 = 25 10 = 2.5 10 10 10 S (15) = c + e + e + c + ( c + e ) + ( c + e + e ) = 15 + 5 + 10 + 15 = 45 15 = 3 15 15 15 S (20) = ? pushes 20 expansions Activity #2 c=5 e=5 28

  29. Amortized Analysis of Incremental S (10) = c + e + c + ( c + e ) = 10 + 5 + 10 = 25 10 = 2.5 10 10 10 S (15) = c + e + e + c + ( c + e ) + ( c + e + e ) = 15 + 5 + 10 + 15 = 45 15 = 3 15 15 15 S (20) = ? 1 min pushes 20 expansions Activity #2 c=5 e=5 29

  30. Amortized Analysis of Incremental S (10) = c + e + c + ( c + e ) = 10 + 5 + 10 = 25 10 = 2.5 10 10 10 S (15) = c + e + e + c + ( c + e ) + ( c + e + e ) = 15 + 5 + 10 + 15 = 45 15 = 3 15 15 15 S (20) = ? 0 min pushes 20 expansions Activity #2 c=5 e=5 30

  31. Amortized Analysis of Incremental S (10) = c + e + c + ( c + e ) = 10 + 5 + 10 = 25 10 = 2.5 10 10 10 S (15) = c + e + e + c + ( c + e ) + ( c + e + e ) = 15 + 5 + 10 + 15 = 45 15 = 3 15 15 15 S (20) = c + e + e + e + c + ( c + e ) + ( c + e + e ) + ( c + e + e + e ) 20 20 = 20 + 5 + 10 + 15 + 20 20 = 70 pushes 20 c=5 expansions = 3.5 e=5 31

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend