Sunteți pe pagina 1din 12

CS 333 Design and Analysis of Computer Algorithms

Professor Michal Cutler


Introduction

Topic 1:Intro

General Information
Prerequisites

Topics Text Grades Goals

Goals of the course:

Prepare students for:


Job interviews Future technical challenges Using critical thinking for problem solving Implementing algorithms efficiently and correctly Arguing correctness Analyzing time complexity Using common algorithms (building blocks) Learning to design using well known methods

Job Interviews Course Importance

Job interviews contain many data structures and algorithm related questions
Describe binary search Describe an efficient algorithm that reads a file containing in random order all the numbers between 100 and 2035 excluding one, and determines the missing number.
The algorithm should be linear in time and use only constant space

Programming

Often you will be asked to program your solutions


Write an efficient program to find the first character of a string that occurs only once [A] Write an efficient program to decide whether a linked list contains a cycle

Using critical thinking for problem solving

Considering different approaches for solving a problem (for example dynamic vectors)
Analyzing the merits of each

Considering different implementations for a chosen approach (for example Prims algorithm)
Analyzing the merit of the different implementation

Efficiency

The efficiency of an algorithm depends on the quantity of resources it requires Usually we compare algorithms based on their time
Sometimes also based on the space resources they need.

The time required by an algorithm depends on the instance size, and its data

Instance Size

Formally: Size = number of (binary) bits needed to represent the instance on a computer. We will usually be much less formal For sort we assume that the size of a record is c or bound by c number of bits Formally the size of an input to sort with n records of c bits is nc, informally we use just n
Why do we need the formal definition?

Number problems

Problems where input numbers can become increasingly large. Examples:


Factorial of 10, 106, 1015 Fibonacci numbers Multiplying, adding, dividing big numbers

For these problems we should use the formal definition Size for a single number with value n is O(lg n) bits

Fibonacci
int fib(int n) { if (n <=1) return n; prev=0; cur=1; for (i=2; i<=n; i++) { next = cur + prev; prev = cur; cur= next; } return next }

Analysis. Number of operations c*n (?) Number bits for value n,


s=floor(lgn) +1

floor(lgn)=s-1 n >= 2s -1

Time Analysis

Best Case: The smallest amount of time needed to run any instance of a given size Worst Case: The largest amount of time needed to run any instance of a given size Average Case: the expected time required by an instance of a given size

Next Topic

Counts

S-ar putea să vă placă și