14
Computer Science 2 Computer Science 2 Data Structures and Data Structures and Algorithms Algorithms V22.0102 V22.0102 Intro to “big o” Intro to “big o” Lists Lists Professor: Evan Korth Professor: Evan Korth New York University New York University 1

Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

Embed Size (px)

Citation preview

Page 1: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

Computer Science 2Computer Science 2Data Structures and AlgorithmsData Structures and Algorithms

V22.0102 V22.0102

Intro to “big o” Intro to “big o”Lists Lists

Professor: Evan KorthProfessor: Evan KorthNew York UniversityNew York University

1

Page 2: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

Road Map for TodayRoad Map for TodayA cursory introduction to Big OhAbstract Data TypesLists

– Array implementation– Linked Lists

Reading: – Chapter 2: only the parts concerning Big O

and even then not in quite as much detail – Chapter 3: 3.1- 3.2

2

Page 3: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

Abstract Data TypeAbstract Data Type

An abstract data type (ADT) is a set of objects together with a set of operations. For example:

– Stacks– Queues– Dictionary– Trees– Priority queue

3

Page 4: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

4

Analyzing Data StructuresAnalyzing Data Structures

In order to discuss what makes a good data structure, we need a way to analyze the execution behavior of a data structure.

Two of the most important considerations we need to keep in mind are:– Time complexity– Space complexity

There are other important considerations such as code complexity but we will concentrate on time and space for now.

Page 5: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

5

Time ComplexityTime Complexity

How long will the program take:– For each of the data structure's operations we want to

know how many instructions must be executed. We don't need to know the exact number of instructions

because that depends on the compiler and instruction set of our environment.

In other words, we want this system to be machine and compiler independent.

– For small sets of data, it does not matter much.– We need a theoretical system to quantify how the

execution time grows as our data size grows.

Page 6: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

6

Time ComplexityTime Complexity

For each of the data structure's operations we want to know how many instructions must be executed.

Perhaps we can determine a program will execute a maximum of 4n3 + 4n2 + 87n + 15 instructions on a pc for a dataset of size n.

Do we need to be so precise if we are only concerned with the growth rate of our program’s execution time?

Page 7: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

7

Asymptotic analysisAsymptotic analysis Asymptotic analysis is based on the idea that as

the problem size grows, the complexity can be described as a simple proportionality to some known function. This idea is incorporated in the "Big Oh" notation for asymptotic performance.

Definition: T(n) = O(f(n)) if and only if there are constants c0 and n0 such that T(n) <= c0 f(n) for all n >= n0.

The expression "T(n) = O(f(n))" is read as "T of n is in Big Oh of f of n." Big Oh is sometimes said to describe an "upper-bound" on the complexity. Other forms of asymptotic analysis ("Big Omega", "Little Oh", "Theta") are similar in spirit to Big Oh, but will not be discussed in this class.

Thomas A. Anastasio, Richard Chang

Page 8: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

8

Big O: What does it mean in Big O: What does it mean in English?English?

Big O defines the upper bound of the running time of an operation or algorithm without regard to constants or machine / compiler factors.

We just throw away leading constants and low order terms.

Page 9: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

9

Some common functions which Some common functions which describe growth rates (in order)describe growth rates (in order)

O(1): constantO(log n) logarithmicO(n) linearO(n log n) linearithmicO(n2) quadraticO(n3) cubicO(2n) exponential

Page 10: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

10

One quick exampleOne quick example

Linear search versus binary search:See this applet:

– http://www.cosc.canterbury.ac.nz/people/mukundan/dsal/appldsal.html

What is the big oh for linear search?What is the big oh for binary search?We will discuss the time complexity for

the operations of every ADT and algorithm we look at in this class.

Page 11: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

11

ListList

List (data structure) Definition: A collection of items

accessible one after another beginning at the head and ending at the tail.

Head: The first item in a listTail: The last item in a list

Source: http://www.nist.gov/dads/HTML/list.html

Page 12: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

12

List operations (example in book)List operations (example in book) printList makeEmpty find findKth insert remove isEmpty zeroth first findPrevious

Page 13: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

13

First idea: Use an arrayFirst idea: Use an array

Need to estimate size for the array from the beginning. If we need to expand the array it is expensive (in Java) or impossible (in some other languages). This wastes considerable space.

Also insertions and deletions are expensive because we may need to move elements in order to execute the operation (on average half are moved – worse case all must be moved).

Page 14: Computer Science 2 Data Structures and Algorithms V22.0102 Intro to “big o” Lists Professor: Evan Korth New York University 1

14

Better idea: linked listBetter idea: linked list

Basic idea is to create a node for each element. The node will contain the element as well as a pointer to the next node.– We need to keep track of the head and the tail

somehow. This change means when we insert and delete

nodes, all we need to do is move the pointers around.