Presentation is loading. Please wait.

Presentation is loading. Please wait.

Array-Based Sequences

Similar presentations


Presentation on theme: "Array-Based Sequences"— Presentation transcript:

1 Array-Based Sequences
Vectors 12/2/2018 1:36 PM Array-Based Sequences Hongfei Yan April 1, 2015 Array-Based Sequences

2 Recap: The Three Laws of Recursion
Vectors 12/2/2018 1:36 PM Recap: The Three Laws of Recursion A recursive algorithm must have a base case. A recursive algorithm must change its state and move toward the base case. A recursive algorithm must call itself, recursively. Array-Based Sequences

3 Q: How many recursive calls are made when computing the sum of the list [2,4,6,8,10]?
a)6 b)5 c)4 d)3 c) Correct!! the first recursive call passes the list [4,6,8,10], the second [6,8,10] and so on until [10].

4 fact(n) returns n * n-1 * n-2 * ...
Q: Suppose you are going to write a recursive function to calculate the factorial of a number. fact(n) returns n * n-1 * n-2 * ... Where the factorial of zero is definded to be 1. What would be the most appropriate base case? a)n==0 b)n==1 c)n>=0 d)n<=1 d) Correct!! Good, this is the most efficient, and even keeps your program from crashing if you try to compute the factorial of a negative number.

5 Assignment #3: Recursion
C-4.16 Write a short recursive Python function that takes a character string s and outputs its reverse. For example, the reverse of 'pots&pans' would be 'snap&stop' . C-4.19 Write a short recursive Python function that rearranges a sequence of integer values so that all the even values appear before all the odd values. C-4.21 Suppose you are given an n-element sequence, S, containing distinct integers that are listed in increasing order. Given a number k, describe a recursive algorithm to find two integers in S that sum to k, if such a pair exists. What is the running time of your algorithm? Array-Based Sequences

6 Array-Based Sequences

7 Array-Based Sequences

8 Array-Based Sequences

9 Array-Based Sequences
Caesar: An interesting application of strings and lists is cryptography Dynamic arrays and amortization Sorting high scores for a game Insertion sort Tic tac toe Array-Based Sequences

10 Array-Based Sequences

11 Array-Based Sequences

12 Array-Based Sequences

13 Array-Based Sequences

14 Array-Based Sequences

15 Array-Based Sequences

16 5.5 Using Array-Based Sequences
5.5.1 Storing High Scores for a Game The first application we study is storing a sequence of high score entries for a video game. Array-Based Sequences

17 Array-Based Sequences
Vectors 12/2/2018 1:36 PM Python: How to print a class or objects of class using print()? >>> class Test: ... def __repr__(self): ... return "Test()" ... def __str__(self): ... return "member of Test" ... >>> t = Test() >>> t Test() >>> print t member of TestThe __str__ method is what happens when you print it, and the __repr__ method is what happens when you use the repr() function (or when you look at it with the interactive prompt). If this isn't the most Pythonic method, I apologize, because I'm still learning too - but it works. If no __str__ method is given, Python will print the result of __repr__ instead. If you define __str__ but not __repr__, Python will use what you see above as the __repr__, but still use __str__ for printing. Array-Based Sequences

18 Array-Based Sequences

19 Array-Based Sequences

20 Array-Based Sequences

21 Python Sequence Classes
Python has built-in types, list, tuple, and str. Each of these sequence types supports indexing to access an individual element of a sequence, using a syntax such as A[i] Each of these types uses an array to represent the sequence. An array is a set of memory locations that can be addressed using consecutive indices, which, in Python, start with index 0. A 1 2 i n © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

22 Arrays of Characters or Object References
An array can store primitive elements, such as characters, giving us a compact array. An array can also store references to objects. © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

23 Array-Based Sequences
Vectors 12/2/2018 1:36 PM Compact Arrays Primary support for compact arrays is in a module named array. That module defines a class, also named array, providing compact storage for arrays of primitive data types. The constructor for the array class requires a type code as a first parameter, which is a character that designates the type of data that will be stored in the array. import array Primes = array.array(‘I’, [2,3,5,7,11,13,17,19]) © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

24 Type Codes in the array Class
Python’s array class has the following type codes: © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

25 Array-Based Sequences
Insertion In an operation add(i, o), we need to make room for the new element by shifting forward the n - i elements A[i], …, A[n - 1] In the worst case (i = 0), this takes O(n) time A 1 2 i n A 1 2 i n A o 1 2 i n © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

26 Array-Based Sequences
Element Removal In an operation remove(i), we need to fill the hole left by the removed element by shifting backward the n - i - 1 elements A[i + 1], …, A[n - 1] In the worst case (i = 0), this takes O(n) time A 1 2 n o i A 1 2 n i A 1 2 n i © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

27 Array-Based Sequences
Performance In an array based implementation of a dynamic list: The space used by the data structure is O(n) Indexing the element at I takes O(1) time add and remove run in O(n) time in worst case In an add operation, when the array is full, instead of throwing an exception, we can replace the array with a larger one… © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

28 Growable Array-based Array List
In an add(o) operation (without an index), we could always add at the end When the array is full, we replace the array with a larger one How large should the new array be? Incremental strategy: increase the size by a constant c Doubling strategy: double the size Algorithm add(o) if t = S.length  1 then A  new array of size … for i  0 to n-1 do A[i]  S[i] S  A n  n + 1 S[n-1]  o © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

29 Comparison of the Strategies
compare the incremental strategy and the doubling strategy by analyzing the total time T(n) needed to perform a series of n add(o) operations assume that we start with an empty stack represented by an array of size 1 call amortized time of an add operation the average time taken by an add over the series of operations, i.e., T(n)/n © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

30 Incremental Strategy Analysis
We replace the array k = n/c times The total time T(n) of a series of n add operations is proportional to n + c + 2c + 3c + 4c + … + kc = n + c( … + k) = n + ck(k + 1)/2 Since c is a constant, T(n) is O(n + k2), i.e., O(n2) The amortized time of an add operation is O(n) © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

31 Doubling Strategy Analysis
We replace the array k = log2 n times The total time T(n) of a series of n add operations is proportional to n …+ 2k = n + 2k = 3n - 1 T(n) is O(n) The amortized time of an add operation is O(1) geometric series 1 2 4 8 © 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

32 Python Implementation
© 2013 Goodrich, Tamassia, Goldwasser Array-Based Sequences

33 5.6 Multidimensional Data Sets
For example, the two-dimensional data might be stored in Python as follows. data = [ [22, 18, 709, 5, 33], [45, 32, 830, 120, 750], [4, 880, 45, 66, 61] ] Array-Based Sequences

34 Constructing a Multidimensional List
initialize a one-dimensional list, rely on a syntax such as data = [0] * n to create a list of n zeros. list comprehension syntax for a 2D list of integers data = [ [0] c for j in range(r) ] Array-Based Sequences

35 Array-Based Sequences
Summary Array-Based Sequences


Download ppt "Array-Based Sequences"

Similar presentations


Ads by Google