1 / 58

Data Structure and Algorithm Analysis 01: Programming: A General Overview

Data Structure and Algorithm Analysis 01: Programming: A General Overview. http://net.pku.edu.cn/~ course/cs202/2014 Hongfei Yan School of EECS, Peking University 2 / 26 /201 4. Contents. 01 Programming: A General Overview (20-65) 02 Algorithm Analysis (70-89)

wellsa
Download Presentation

Data Structure and Algorithm Analysis 01: Programming: A General Overview

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Data Structure and Algorithm Analysis01: Programming: A General Overview http://net.pku.edu.cn/~course/cs202/2014 Hongfei Yan School of EECS, Peking University 2/26/2014

  2. Contents 01 Programming: A General Overview (20-65) 02 Algorithm Analysis (70-89) 03 Lists, Stacks, and Queues (96-135) 04 Trees (140-200) 05 Hashing (212-255) 06 Priority Queues (Heaps) (264-302) 07 Sorting (310-360) 08 The Disjoint Sets Class (370-393) 09 Graph Algorithms (398-456) 10 Algorithm Design Techniques (468-537)

  3. 01: Programming: A General Overview 1.1 What’s this book about? -> goals 1.2 Mathematics review -> discrete math 1.3 A brief introduction to recursion 1.4 C++ classes 1.5 C++ details 1.6 Templates 1.7 Using matrices Programming concept

  4. Selection problem • Suppose you have a group of N numbers and would like to determine the kth largest. • Bubble sort (Select1) • Read the first k elements into an array and sort them. Next, read one by one and compare with the kth element in the array. (Select2) • An alternative method, discussed in Chapter 7, gives a solution in about a second

  5. Selection of integers with k = N/2 (1/2)

  6. Selection of integers with k = N/2 (2/2)

  7. Solve a popular word puzzle • The input consists of a two dimensional array of letters and a list of words. The object is to find the words in the puzzle. • For each word in the word list, we check each ordered triple (row, column, orientation) for the presence of the word. • Alternatively, for each ordered quadruple (row, column, orientation, number of characters) • However, it is possible, even with a large word list, to solve the problem very quickly

  8. What’s This Book About? • If the program is to be run on a large data set, then the running time becomes an issue. • Throughout this book • we will see how to estimate the running time of a program for large inputs and, • more important, how to compare the running times of two programs without actually coding them.

  9. 01: Programming: A General Overview • 1.1 What’s this book about? • 1.2 Mathematics review • 1.3 A brief introduction to recursion • 1.4 C++ classes • 1.5 C++ details • 1.6 Templates • 1.7 Using matrices

  10. Exponents

  11. Logarithms Definition 1.1 XA = Bif and only if logX B= A Theorem 1.1 Theorem 1.2

  12. Series • Geometric series • a series with a constant ratio between successive terms. • Arithmetic series • a sequence of numbers such that the difference between the consecutive terms is constant. • Algebraic manipulations

  13. Geometric Series If 0<A<1, then = = 2

  14. Arithmetic Series

  15. Harmonic number and Algebraic manipulation Harmonic number Algebraic manipulation

  16. Modular Arithmetic (1/2) • We say that Ais congruent to Bmodulo N, written A ≡ B (mod N), if N divides A − B. • E.g., 81 ≡ 61 ≡ 1(mod 10) • if A ≡ B (mod N), then • A + C ≡ B + C (mod N) • and AD ≡ BD (mod N).

  17. Modular Arithmetic (2/2) • Often, Nis a prime number. In that case, there are three important theorems: • if N is prime, then ab ≡ 0 (mod N) is true if and only if a ≡ 0 (mod N) or b ≡ 0 (mod N). • if N is prime, then the equation ax ≡ 1 (mod N) has a unique solution (mod N) for all 0 < a < N. This solution, 0 < x < N, is the multiplicative inverse. • if N is prime, then the equation x2 ≡ a (mod N) has either two solutions (mod N) for all 0 < a < N, or it has no solutions.

  18. The P Word (1/2) • The two most common ways of proving statements in data-structure analysis are • Proof by induction and proof by contradiction • Proof by induction has two standard parts • The first step is proving a base case • Next, an inductive hypothesis is assumed. • E.g., Fibonacci numbers, F0 = 1, F1 = 1, F2 = 2, F3 = 3, F4 = 5, . . . , Fi = Fi−1+Fi−2, satisfy Fi < (5/3)i, for i ≥ 1. • A second example,

  19. The P Word (2/2) • Proof by contradiction proceeds by • assuming that the theorem is false and • showing that this assumption implies that some known property is false, and • hence the original assumption was erroneous. • A classic example is the proof that • there is an infinite number of primes.

  20. 01: Programming: A General Overview • 1.1 What’s this book about? • 1.2 Mathematics review • 1.3 A brief introduction to recursion • 1.4 C++ classes • 1.5 C++ details • 1.6 Templates • 1.7 Using matrices

  21. Recursion base case Recursive call Isn't this just circular logic? • A function that is defined in terms of itself is called recursive. • E.g., we can define a function f , valid on nonnegative integers, that satisfies • f(0) = 0 and f (x) = 2f (x − 1) + x2.

  22. The first two fundamental rules of recursion 1.Base cases. You must always have some base cases, which can be solved without recursion. 2.Making progress. For the cases that are to be solved recursively, the recursive call must always be to a case that makes progress toward a base case.

  23. E.g., Printing Out Numbers

  24. Four basic rules of recursion 1. Base cases. You must always have some base cases, which can be solved without recursion. 2. Making progress. For the cases that are to be solved recursively, the recursive call must always be to a case that makes progress toward a base case. 3. Design rule. Assume that all the recursive calls work. 4. Compound interest rule. Never duplicate work by solving the same instance of a problem in separate recursive calls.

  25. 01: Programming: A General Overview • 1.1 What’s this book about? • 1.2 Mathematics review • 1.3 A brief introduction to recursion • 1.4 C++ classes • 1.5 C++ details • 1.6 Templates • 1.7 Using matrices

  26. Basic C++ Syntax • A class in C++ consists of its members. • These members can be either data or functions. • The functions are called member functions. • Each instance of a class is an object. • Each object contains the data components specified in the class. • A member function is used to act on an object. • Often member functions are called methods.

  27. A class for simulating an integer memory cell. twoconstructors 1) A constructor is a method that describes how an instance of the class is constructed. 2) In a class, all members are private by default, so the initial public is not optional.

  28. Extra Constructor Syntax Default Parameters Initialization List explicit Constructor You should make all one-parameter constructors explicit to avoid behind-the-scenes type conversions.

  29. Constant member function accessor mutator

  30. Objects Are Declared Like Primitive Types IntCell obj1; // Zero parameter constructor, same as before IntCell obj2{ 12 }; // One parameter constructor, same as before IntCell obj4{ }; // Zero parameter constructor The declaration of obj4 is nicer because initialization with a zero-parameter constructor is no longer a special syntax case; the initialization style is uniform.

  31. 1.4.4 vector and string • The class vector is intended to replace the built-in C++ array, which causes no end of trouble. • built-in C++ array is that it does not behave like a first-class object. • built-in arrays cannot be copied with =, • a built-in array does not remember how many items it can store, • and its indexing operator does not check that the index is valid. • The built-in string is simply an array of characters, • and thus has the liabilities of arrays plus a few more. • For instance, == does not correctly compare two built-in strings.

  32. C++ has allowed initialization of • built-in C++ arrays: • int daysInMonth[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; • C++11 also allows (and some prefer): • vector<int> daysInMonth { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

  33. C++11 adds a range for syntax (1/2) • The pattern of accessing every element sequentially in a collection • such as an array or a vector is fundamental int sum = 0; for( auto x : squares ) sum += x; • the reserved word auto to signify that the compiler will automatically infer the appropriate type

  34. C++11 adds a range for syntax (2/2) to increment by 1 all values in a vector

  35. 01: Programming: A General Overview • 1.1 What’s this book about? • 1.2 Mathematics review • 1.3 A brief introduction to recursion • 1.4 C++ classes • 1.5 C++ details • 1.6 Templates • 1.7 Using matrices

  36. 1.5.1 Pointers • A pointer variable is a variable that stores the address where another object resides. • It is the fundamental mechanism used in many data structures. • For instance, to store a list of items, we could use a contiguous array, but insertion into the middle of the contiguous array requires relocation of many items. • Rather than store the collection in an array, it is common to store each item in a separate, noncontiguous piece of memory, • which is allocated as the program runs. • Along with each object is a link to the next object. • This link is a pointer variable, because it stores a memory location of another object.

  37. Program that uses pointers to IntCell Line 3 illustrates the declaration of m. The * indicates that m is a pointer variable; it is allowed to point at an IntCell object. The value of m is the address of the object that it points at.

  38. 1.5.2 Lvalues, Rvalues, and References An lvalue is an expression that identifies a non-temporary object. An rvalue is an expression that identifies a temporary object or is a value (such as a literal constant) not associated with any object. A referencetype allows us to define a new name for an existing value.

  39. Lvalues and Rvalues arr, str, arr[x], &x, y, z, ptr, *ptr, (*ptr)[x] are all lvalues. 2, "foo", x+y, str.substr(0,1) are all rvalues.

  40. lvalue reference and rvalue reference In C++11, an lvalue reference is declared by placing an & after some type. an rvalue reference is declared by placing an && after some type.

  41. 1.5.6 The Big-Five In C++11, classes come with five special functions that are already written for you. These are the destructor, copy constructor, move constructor, copy assignment operator, andmove assignment operator. Collectively these are the big-five. In many cases, you can accept the default behavior provided by the compiler for the big-five. Sometimes you cannot.

  42. For IntCell, the signatures of these operations are As a general rule, either you accept the default for all five operations, or you should declare all five, and explicitly define, default (use the keyword default), or disallow each (use the keyword delete). Generally we will define all five.

  43. 01: Programming: A General Overview • 1.1 What’s this book about? • 1.2 Mathematics review • 1.3 A brief introduction to recursion • 1.4 C++ classes • 1.5 C++ details • 1.6 Templates • 1.7 Using matrices

  44. Templates • sequential scan algorithm, as is typical of many algorithms, is type independent. • When we write C++ code for a type-independent algorithm (also know as generic algorithms)or data structure, • we would prefer to write the code once rather than recode it for each different type

  45. Function templates (1/2)

  46. Function templates (2/2) It is customary to include, prior to any template, comments that explain what assumptions are made about the template argument(s). It should be assumed that template arguments are not primitive types. That is why we have returned by constant reference. Note that if there is a nontemplate and a template and both match, then the nontemplate gets priority.

  47. Class templates

  48. Object, Comparable, and an Example In this text, we repeatedly use Object and Comparable as generic types. Object is assumed to have a zero-parameter constructor, an operator=, and a copy constructor. Comparable, as suggested in the findMax example, has additional functionality in the form of operator< that can be used to provide a total order.

  49. Operator overloading

  50. Provide an output for a new class type

More Related