1 Gentle Introduction to Programming Session 5: Sorting, Searching, Time- Complexity Analysis, Memory Model, Object Oriented Programming.

Slides:



Advertisements
Similar presentations
College of Information Technology & Design
Advertisements

MATH 224 – Discrete Mathematics
Programmer-defined classes Part 2. Topics Returning objects from methods The this keyword Overloading methods Class methods Packaging classes Javadoc.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Chapter 9: Searching, Sorting, and Algorithm Analysis
Searching Kruse and Ryba Ch and 9.6. Problem: Search We are given a list of records. Each record has an associated key. Give efficient algorithm.
Insertion sort, Merge sort COMP171 Fall Sorting I / Slide 2 Insertion sort 1) Initially p = 1 2) Let the first p elements be sorted. 3) Insert the.
1 Programming for Engineers in Python Autumn Lecture 5: Object Oriented Programming.
1 Gentle Introduction to Programming Session 4: Arrays, Sorting, Efficiency.
1 Gentle Introduction to Programming Session 6: Lists, Course Summary.
Encapsulation by Subprograms and Type Definitions
1 Gentle Introduction to Programming Session 6: Lists, Course Summary.
מבוא מורחב 1 Lecture 3 Material in the textbook Sections to
Lecture 4 Sept 4 Goals: chapter 1 (completion) 1-d array examples Selection sorting Insertion sorting Max subsequence sum Algorithm analysis (Chapter 2)
Algorithm Efficiency and Sorting
1 Gentle Introduction to Programming Session 5: Memory Model, Object Oriented Programming.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Chapter 23 Algorithm Efficiency.
Copyright © Cengage Learning. All rights reserved. CHAPTER 11 ANALYSIS OF ALGORITHM EFFICIENCY ANALYSIS OF ALGORITHM EFFICIENCY.
1 Gentle Introduction to Programming Tirgul 2: Scala “hands on” in the lab.
Searching1 Searching The truth is out there.... searching2 Serial Search Brute force algorithm: examine each array item sequentially until either: –the.
© 2006 Pearson Addison-Wesley. All rights reserved10 A-1 Chapter 10 Algorithm Efficiency and Sorting.
CS 106 Introduction to Computer Science I 03 / 17 / 2008 Instructor: Michael Eckmann.
1 Gentle Introduction to Programming Session 4: Arrays.
1 CISC181 Introduction to Computer Science Dr. McCoy Lecture 19 Clicker Questions November 3, 2009.
Liang, Introduction to Java Programming, Seventh Edition, (c) 2009 Pearson Education, Inc. All rights reserved Chapter 23 Algorithm Efficiency.
Pointer Data Type and Pointer Variables
1 Chapter 24 Developing Efficient Algorithms. 2 Executing Time Suppose two algorithms perform the same task such as search (linear search vs. binary search)
Chapter 12 Recursion, Complexity, and Searching and Sorting
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 19: Searching and Sorting Algorithms.
Analysis of Algorithms
Chapter 3 Sec 3.3 With Question/Answer Animations 1.
Chapter 13 Recursion. Learning Objectives Recursive void Functions – Tracing recursive calls – Infinite recursion, overflows Recursive Functions that.
 Pearson Education, Inc. All rights reserved Searching and Sorting.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 19: Searching and Sorting.
CSC 211 Data Structures Lecture 13
Object-Oriented Program Development Using Java: A Class-Centered Approach, Enhanced Edition.
CSC 221: Recursion. Recursion: Definition Function that solves a problem by relying on itself to compute the correct solution for a smaller version of.
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Modified for use by MSU Dept. of Computer Science.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Session 7 Methods Strings Constructors this Inheritance.
Chapter 18: Searching and Sorting Algorithms. Objectives In this chapter, you will: Learn the various search algorithms Implement sequential and binary.
Java Methods Big-O Analysis of Algorithms Object-Oriented Programming
1 Programming for Engineers in Python Autumn Lecture 6: More Object Oriented Programming.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. Selection Sort Sorts an array by repeatedly finding the smallest.
Algorithms Java Methods A & AB Object-Oriented Programming and Data Structures Maria Litvin ● Gary Litvin Copyright © 2006 by Maria Litvin, Gary Litvin,
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
ALGORITHMS.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 23 Algorithm Efficiency.
Searching and Sorting Searching: Sequential, Binary Sorting: Selection, Insertion, Shell.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
Searching CSE 103 Lecture 20 Wednesday, October 16, 2002 prepared by Doug Hogan.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
BITS Pilani Pilani Campus Data Structure and Algorithms Design Dr. Maheswari Karthikeyan Lecture1.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
CS 116 Object Oriented Programming II Lecture 13 Acknowledgement: Contains materials provided by George Koutsogiannakis and Matt Bauer.
CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis Linda Shapiro Winter 2015.
Discrete Mathematics Chapter 2 The Fundamentals : Algorithms, the Integers, and Matrices. 大葉大學 資訊工程系 黃鈴玲.
Introduction to Algorithms
COP 3503 FALL 2012 Shayan Javed Lecture 15
Introduction to Search Algorithms
Chapter 9: Searching, Sorting, and Algorithm Analysis
About the Presentations
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
User-Defined Functions
Subroutines Idea: useful code can be saved and re-used, with different data values Example: Our function to find the largest element of an array might.
Algorithm design and Analysis
Introduction to Algorithms
Presentation transcript:

1 Gentle Introduction to Programming Session 5: Sorting, Searching, Time- Complexity Analysis, Memory Model, Object Oriented Programming

2 Admin. Please come on time after the first break Who goes to the Mathematics' summer introduction course?

3 Review Recursive vs. Iterative Guest lecture: Prof. Benny Chor Arrays Arrays in memory Initialization and usage foreach, filter Arrays as functions arguments Multi-dimensional arrays References to array Sorting, searching Binary search

4 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

Decimal  Binary We want to print the binary representation of a decimal number Examples: 0 -> 0 8 -> > > 11111

Decimal  Binary Recursively The conversion of a number d from decimal to binary: If d is 0 or 1 – write d to the left and stop, else: If d is even, write ‘0’ to the left If d is odd, write ‘1’ to the left Repeat recursively with floor(d/2)

Example: d = 14 d Output at the end of stage Action at the end of stage 140 Insert 0 to left of output; divide d by Insert 1 to left of output; divide d by 2 and round down 3110 Insert 1 to left of output; divide d by 2 and round down Insert 1 to left of output; return.

Solution Dec2Bin.scala

9 Exercise 1 Write a program that gets 10 numbers from the user. It then accepts another number and checks to see if that number was one of the previous ones. Example 1: Please enter 10 numbers: Please enter a number to search for: 8 Found it! Example 2: Please enter 10 numbers: Please enter a number to search for: 30 Sorry, it’s not there

10 Solution FindNumber.scala

11 Exercise 2 Implement a function that accepts two integer arrays and returns true if they are equal, false otherwise. The arrays are of the same size Write a program that accepts two arrays of integers from the user and checks for equality

12 Solution CompareArrays.scala

13 Solution (main) CompareArrays.scala

14 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

15 Sort We would like to sort the elements in an array in an ascending order sort

16 What is Sorting Good For? Finding a number in an array Consider a large array (of length n) and multiple queries on whether a given number exists in the array (and what is its position in it) Naive solution: given a number, traverse the array and search for it Not efficient ~ n/2 steps for each search operation Can we do better? Sort the array as a preliminary step. Now search can be performed much faster!

17 Binary Search Input: A sorted array of integers A An integer query q Output: -1 if q is not a member of A The index of q in A otherwise Algorithm: Check the middle element of A If it is equal to q, return its index If it is >= q, search for q in A[0,…,middle-1] If it is < q, search for q in A[middle+1,...,end]

18 Example index value

19 Code – Binary Search

20 Code – Usage

21 So, How Fast is it? Worst case analysis Size of the inspected array: n  n/2  n/4  …..  1 Each step is very fast (a small constant number of operations) There are log 2 (n) such steps So it takes ~ log 2 (n) steps per search Much faster then ~ n

22 Bubble Sort

23 Bubble Sort Example (done)

24 Another Example

25 Bubble Sort

26 Orders of Growth Suppose n is a parameter that measures the size of a problem (the size of its input) R(n) measures the amount of resources needed to compute a solution procedure of size n Two common resources are space, measured by the number of deferred operations, and time, measured by the number of primitive steps The worst-case over all inputs of size n!

27 Orders of Growth Want to estimate the “order of growth” of R(n): R 1 (n)=100n 2 R 2 (n)=2n 2 +10n+2 R 3 (n) = n 2 Are all the same in the sense that if we multiply the input by a factor of 2, the resource consumption increases by a factor of 4 Order of growth is proportional to n 2

28 Summary Trying to capture the nature of processes Quantify various properties of processes: Number of steps a process takes (Time Complexity) Amount of Space a process uses (Space Complexity) You will encounter these issues in many courses throughout your studies We shall focus on the (intuitive) time complexity analysis of various sorting algorithms

29 Examples Find a maximum in a general array Find the maximum in a sorted array Find the 5 th largest element in a sorted array Answer n Fibonacci quarries, each limited by MAX Find an element in a general array Find an element in a sorted array

30 Bubble Sort Time Complexity Array of size n n iterations i iterations constant (n-1 + n-2 + n-3 + …. + 1) * const ~ ½ * n 2

31 The Idea Behind Marge Sort A small list will take fewer steps to sort than a large list Fewer steps are required to construct a sorted list from two sorted lists than two unsorted lists

32 Marge Sort Algorithm If the array is of length 0 or 1, then it is already sorted. Otherwise: Divide the unsorted array into two sub- arrays of about half the size Sort each sub-array recursively by re- applying merge sortrecursively Merge the two sub-arrays back into one sorted arrayMerge

33 Merge Sort Example

34 Marge Sort Time Complexity If the array is of length 0 or 1, then it is already sorted. Otherwise: Divide the unsorted array into two sub-arrays of about half the size Sort each sub-array recursively by re-applying merge sortrecursively Merge the two sub-arrays back into one sorted arrayMerge n + 2 * (n/2) * n/ * n/2 3 + … + 2log(n) * n/2 log(n) = n + n + … + n = n * log(n) log(n)

35 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

36 Passing Arguments to Functions When a function is called, arguments’ values are attached to function’s formal parameters by order, and an assignment occurs before execution Values are copied to formal parameters “Call by value” Function’s parameters are defined as vals

37 Passing Arguments to Functions A reference is also passed by value Example: arrays Objects (?) This explains why we can change an array’s content within a function a

38 Local Names Arguments names do not matter! Local variable name hides in-scope variables with the same name Different x!

39 Everything is an Object (in Scala) In Java: primitives vs. objects In Scala everything is an Object But: special treatment for primitives Why do we care? val x = 5 var y = x y = 6 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4 ?

40 ? val x = 5 var y = x y = 6 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4

41 Memory Image 1 val x = 5 var y = x y = 6 x5 y5 y 6

42 Memory Image 2 val ar1 = Array(1,2,3) val ar2 = ar1 ar2(0) = 4 ar1123 ar2 4

43 Scala Memory Model Based on Java… Stack: local variables and arguments, every function uses a certain part of the stack Stack variables “disappear” when scope ends Heap: global variables and object, scope independent Garbage Collector Partial description

44 How to Change a Variable via Functions? The arguments are passed as vals thus can not be changed So how can a method change an outer variable? By its return value By accessing heap-based memory (e.g., arrays)

45 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

46 Programming in Scala Chapter 4: Classes and Objects Chapter 6: Functional Objects

47 Singletone Objects All programs written so far in this course are Signletone objects File start with the reserved word object Contain functions that can be used elsewhere Application: singeltone object with a main function (Actually singeltone objects are more then that) (Java programmers: think of it as a holder of static methods)

48 A Car How would you represent a car? Parts / features: 4 wheels, steering wheel, horn, color,… Functionality: drive, turn left, honk, repaint,… In Scala???

49 Object-Oriented Programming (OOP) Represent problem-domain entities using a computer language When building a software in a specific domain, describe the different components of the domain as types and variables Thus we can take another step up in abstraction

50 Class as a Blueprint A class is a blueprint of objects

51 Class as a Blueprint A class is a blueprint of objects

52 Classes as Data Types Classes define types that are a composition of other types and have unique functionality An instance of a class is named an object Every instance may contain: Data members / fields Methods Constructors Instances are accessed only through reference

53 Examples String Members: all private Methods: length, replace, startsWith, substring,… Constructors: String(), String(String),… Array Members: all private Methods: length, filter, update,… Constructors: initiate with 1-9 dimensions

54 Car Example Members: 4 wheels, steering wheel, horn, color,… Every car instance has its own Methods: drive, turn left, honk, repaint,… Constructors: Car(String color), Car(Array[Wheels], Engine,…), …

55 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

56 Rational Numbers A rational number is a number that can be expressed as a ration n/d (n,d integers, d not 0) Examples: 1/2, 2/3, 112/239, 2/1 Not an approximation

57 Specification Add, subtract, multiply, divide println should work smoothly Immutable (result of an operation is a new rational number) It should feel like native language support

58 Constructing a Rational How client programmer will create a new Rational object? Class parameters

59 Constructing a Rational The Scala compiler will compile any code placed in the class body, which isn’t part of a field or a method definition, into the primary constructor ?

60 Reimplementing toString toString method A more useful implementation of toString would print out the values of the Rational’s numerator and denominator override the default implementation

61 Usage Now we can remove the debug println…

62 Checking Preconditions Ensure the data is valid when the object is constructed Use require

63 Define “add” Method Immutable Define add:

64 Add Fields n, d are in scope in the add method Access then only on the object on which add was invoked 

65 Test Add, Access Fields

66 Self Reference (this) Define method lessThan: Define method max:

67 Auxiliary Constructors Constructors other then the primary Example: a rational number with a denominator of 1 (e.g., 5/1  5) We would like to do: new Rational(5) Auxiliary constructor first action: invoke another constructor of the same class The primary constructor is thus the single point of entry of a class

68 Revised Rational

69 Private Fields and Methods 66/42 = 11/7 To normalize divide the numerator and denominator by their greatest common divisor (gcd) gcd(66,42) = 6  (66/6)/(42/6) = 11/7 No need for Rational clients to be aware of this Encapsulation

70 Off Topic: Calculate gcd gcd(a,b) = g a = n * g b = m * g gcd(n,m)=1(otherwise g is not the gcd) a = t * b + r = t * m * g + r  g is a divisor of r gcd(a,b) = gcd(b,a%b) The Euclidean algorithm: repeat iteratively: if (b == 0) return a else repeat using a  b, b  a%b

71 Correctness Example: gcd(40,24)  gcd(24,16)  gcd(16,8)  gcd(8,0)  8 Prove: g = gcd(a,b) = gcd(b,a%b)= g1 g1 is a divisor of a (  g1 ≤ g ) There is no larger divisor of a (  g1 ≥ g ) ≤ : a = t * b + r  a = t * h * g1 + v * g1  g1 is a divisor of a ≥ : assume g > g1  a = t * b + r  g is a divisor of b and r  contradiction

72 Implementation

73 Revised Rational

74 Defining Operators Why not use natural arithmetic operators? Replace add by the usual mathematical symbol Operator precedence will be kept All operations are method calls

75 Revised Rational

76 Usage

77 Method Overloading Now we can add and multiply rational numbers! What about mixed arithmetic? r * 2 won’t work  r * new Rational(2) is not nice  Add new methods for mixed addition and multiplication Method overloading The compiler picks the correct overloaded method

78 Usage The * method invoked is determined in each case by the type of the right operand

79 Revised Rational

80 Implicit Conversions 2 * r  2.*(r)  method call on 2 (Int)  Int class contains no multiplication method that takes a Rational argument  Create an implicit conversion that automatically converts integers to rational numbers when needed

81 Companion Object

82 Revised Rational Define implicit conversion in Rational.scala, after defining object Rational

83 In Eclipse In Rational.scala: Companion object (object Rational) Rational class (class Rational) Place the main method in another file

84 Summary Customize classes so that they are natural to use fields, methods, primary constructor Method overriding Self reference (this) Define several constructors Encapsulation Define operators as method Method overloading Implicit conversions, companion object

85 Today Home work review Sorting, searching and time-complexity analysis Binary search Bubble sort, Merge sort Scala memory model Object-oriented programming (OOP) Classes and Objects Functional Objects (Rational Numbers example) Home work

86 Exercise 1 Read, understand and implement selection/insertion sort algorithm

87 Exercise 2 Implement class Complex so it is natural to use complex numbers Examples:

88 Want More Exercises ?

89 Exercise (tough!) Read, understand and implement quick sort algorithm