• No results found

Analysis of a Search Algorithm

N/A
N/A
Protected

Academic year: 2021

Share "Analysis of a Search Algorithm"

Copied!
16
0
0

Loading.... (view fulltext now)

Full text

(1)

R. Rao, CSE326 1

CSE 326 Lecture 4: Lists and Stacks

)

We will review:

¼ Analysis: Searching a sorted array (from last time)

¼ List ADT: Insert, Delete, Find, First, Kth, etc.

¼ Array versus Linked List implementations

¼ Stacks

)

Focus on running time (big-oh analysis)

)

Covered in Chapter 3 of the text

1. Agfgd 2. Dgsdsfd 3. Hdffdsf 4. Sdfgsfdg 5. Tefsdgass

R. Rao, CSE326 2

Analysis of a Search Algorithm

) Problem: Search for an item X in a sorted arrayA. Return index of item if found, otherwise return –1.

) Brainstorming: What is an efficient way of doing this?

-4 -3 5 7 12 35 56 98 101 124 A

X=101

(2)

R. Rao, CSE326 3

Binary Search

) Problem: Search for an item X in a sorted array A. Return index of item if found, otherwise return –1.

) Idea: Compare X with middle item A[mid], go to left half if X < A[mid] and right half if X > A[mid]. Repeat.

A X=101

-4 -3 5 7 12 35 56 98 101 124

A[Mid]=X Found!

Return Mid = 8 Mid

X > A[Mid] Mid

Binary Search

public static int BinarySearch( int [ ] A, int X, int N ) { int Low = 0, Mid, High = N - 1;

while( Low <= High ) {

Mid = ( Low + High ) / 2; // Find middle of array if ( X > A[ Mid ]) // Search second half of array

Low = Mid + 1;

else if ( X < A[ Mid ] ) // Search first half High = Mid - 1;

else return Mid; // Found X!

}return NOT_FOUND;

}

A -4 -1 5 7 12 35 56 98 101 124

(3)

R. Rao, CSE326 5

Running Time of Binary Search

) Given an array A with N elements, what is the worst case running time of BinarySearch?

) What is the worst case?

A X=100

-4 -3 5 7 12 35 56 98 101 124

Mid Mid

X > A[Mid] Mid

R. Rao, CSE326 6

Running Time of Binary Search

) Worst case is when item X is not found.

) How many iterations are executed before Low > High?

int Low = 0, Mid, High = N - 1;

while( Low <= High ) {

Mid = ( Low + High ) / 2; // Find middle of array if ( X > A[ Mid ]) // Search second half of array

Low = Mid + 1;

else if ( X < A[ Mid ] ) // Search first half High = Mid - 1;

else return Mid; // Found X!

}

(4)

R. Rao, CSE326 7

Running Time of Binary Search

) Worst case is when item X is not found.

) How many iterations are executed before Low > High?

) After first iteration: N/2 items remaining

) 2nditeration: (N/2)/2 = N/4 remaining

) Kth iteration: ?

Running Time of Binary Search

) How many iterations are executed before Low > High?

) After first iteration: N/2 items remaining

) 2nditeration: (N/2)/2 = N/4 remaining

) Kth iteration: N/2Kremaining

) Worst case: Last iteration occurs when N/2K≥ 1 and N/2K+1< 1 item remaining

¼ 2K≤ N and 2K+1> N [take log of both sides]

) Number of iterations is K ≤ log N and K > log N - 1

) Worst case running time = Θ(log N)

(5)

R. Rao, CSE326 9

Lists

) What is a list?

¼ An ordered sequence of elements A1, A2, …, AN

) Elements may be of arbitrary type, but all are the same type

) List ADT: Common operations are:

¼ Insert, Find, Delete, IsEmpty, IsLast, FindPrevious, First, Kth, Last

) Two types of implementation:

¼ Array-Based

¼ Linked List

) We will compare worst case running time of ADT operations

R. Rao, CSE326 10

Lists: Array-Based Implementation

) Basic Idea:

¼ Pre-allocate a big array of size MAX_SIZE

¼ Keep track of first free slot using a variable N

¼ Empty list has N = 0

¼ Shift elementswhen you have to insert or delete

) Example: Insert(List L, ElementType E, Position P)

A _ N

A _ 4 A _ 3 A_2 A_1

MAX_SIZE

N-1

3 2 1 0

(6)

R. Rao, CSE326 11

Lists: Array-Based Implementation

public void insert(List L, ElementType X, Position P) // Example: Insert X after position P = 1

A_N

A_4 A_3 A_2 A_1

MAX_SIZE N-1

3 2 1 0

)Basic Idea: Shift existing elements to the right by one slot and insert new item

)Running time for insert into N element array-based list = ?

A_N

N A_N-1

A_3 X A_2 A_1

MAX_SIZE N-1

3 2 1 0

Lists: Array-Based Insert Operation

)

Basic Idea: Shift existing elements to the right by

one slot and insert new item

)

Running time for N elements = O(N)

¼ Worst caseis when you insert at the beginning of list – must shift all N items

A_N

A_4 A_3 A_2 A_1

MAX_SIZE N-1

3 2 1 0

(7)

R. Rao, CSE326 13

Lists: Linked List Implementation

A_2 NULL node

A_1 Next node

P

Insert the value X after P Next

header node

R. Rao, CSE326 14

Lists: Linked List Implementation

A_2 NULL node

A_1 Next node

P

Insert the value X after P:

1. Create new node containing X 2. Update Next pointers

Next

header

X Next node

(Go through the Java/C++ code in Chap. 3 of your text)

(8)

R. Rao, CSE326 15

Lists: Linked List Implementation of Insert

A_2 NULL node

A_1 Next node

P

Insert the value X after P:

1. Create new node containing X 2. Update Next pointers

Next

header

X Next node

Running Time = ?

Lists: Linked List Implementation of Insert

A_2 NULL node

A_1 Next node

P Next

header

X Next node

Running Time = Θ(1)

)Insert takes constant time Æ does not depend on input size N

)Comparison: Array implementation takes O(N) time

(9)

R. Rao, CSE326 17

Caveats with Linked List Implementation

) Whenever you break a list, your code should fix the list up as soon as possible

¼ Draw pictures of the list to visualize what needs to be done ) Pay special attention to boundary conditions:

¼ Empty list

¼ Single item – same item is both first and last

¼ Two items – first, last, but no middle items

¼ Three or more items – first, last, and middle items

R. Rao, CSE326 18

Header Node in Linked List Implementation

) Why use a header node?

¼ If List points to first item, any change in first item changes List itself

¼ Need special checks if List pointer is NULL (e.g. Next is invalid)

¼ Solution:

Use “header node” at beginning of all lists (see text)

List always points to header node, which points to first item

(10)

R. Rao, CSE326 19

Other List Operations: Run time analysis

Linked List Array-Based List

Operation

?

? Delete

?

? FindPrev

O(1) O(N)

Insert

O(1) O(1)

isEmpty

Other List Operations: Run time analysis

Linked List Array-Based List

Operation

?

? FindNext

?

? Find

O(N) O(N)

Delete

O(N) O(1)

FindPrev

O(1) O(N)

Insert

O(1) O(1)

isEmpty

(11)

R. Rao, CSE326 21

Other List Operations: Run time analysis

Linked List Array-Based List

Operation

?

? Length

?

? Last

?

? Kth

?

? First

O(1) O(1)

FindNext

O(N) O(N)

Find

O(N) O(N)

Delete

O(N) O(1)

FindPrev

O(1) O(N)

Insert

O(1) O(1)

isEmpty

R. Rao, CSE326 22

Other List Operations: Run time analysis

Linked List Array-Based List

Operation

O(N) O(1)

Length

O(N) O(1)

Last

O(N) O(1)

Kth

O(1) O(1)

First

O(1) O(1)

FindNext

O(N) O(N)

Find

O(N) O(N)

Delete

O(N) O(1)

FindPrev

O(1) O(N)

Insert

O(1) O(1)

isEmpty

(12)

R. Rao, CSE326 23

Delete Operation using a Linked List

P

Problem: To delete the node pointed to by P, need a pointer to the previous node (= O(N))

A_13 NULL node

A_12 Next node

A_11 Next

Doubly Linked Lists

) FindPrev (and hence Delete) is O(N) because we cannot go to previous node

) Solution: Keep a back-pointerat each node

¼ Doubly Linked List

) Advantages: Delete and FindPrev become O(1) operations

) Disadvantages:

¼ More space (double the number of pointers at each node)

¼ More book-keeping for updating two pointers at each node

header prev prev prev

(13)

R. Rao, CSE326 25

Circularly Linked Lists

) Set the pointer of the last node to first node instead of NULL

) Useful when you want to iterate through whole list starting from any node

¼ No need to write special code to wrap around at the end

) A circular and doubly linked listspeeds up both the Delete and Last operations (first and last nodes point to each other)

¼ O(1) time for both instead of O(N)

header

R. Rao, CSE326 26

Applications of Lists

) Polynomial ADT: store and manipulate single variable polynomials with non-negative exponents

¼ E.g. 10X3+ 4X2+ 7 = 10X3+ 4X2+ 0X1+ 7X0

¼ Data structure: stores coefficients Ciand exponents i

) Array Implementation: C[i] = Ci

¼ E.g. C[3] = 10, C[2] = 4, C[1] = 0, C[0] = 7

) ADT operations: Input polynomials in arrays A and B

¼ Addition: C[i] = ?

¼ Multiplication: ?

(14)

R. Rao, CSE326 27

Applications of Lists: Polynomials

) Polynomial ADT: store and manipulate single variable polynomials with non-negative exponents

¼ E.g. 10X3+ 4X2+ 7 = 10X3+ 4 X2+ 0 X1+ 7 X0

¼ Array Implementation: C[i] = Ci

¼ E.g. C[3] = 10, C[2] = 4, C[1] = 0, C[0] = 7

) ADT operations: Input polynomials in arrays A and B

¼ Addition: C[i] = A[i] + B[i];

¼ Multiplication: initialize C[i] = 0 for all i for each i, j pair:

C[i+j] = C[i+j] + A[i]*B[j];

Applications of Lists: Polynomials

) Polynomial ADT: store and manipulate single variable polynomials with non-negative exponents

¼ E.g. 10X3+ 4X2+ 7 = 10X3+ 4 X2+ 0 X1+ 7 X0

¼ Array Implementation: C[i] = Ci

¼ E.g. C[3] = 10, C[2] = 4, C[1] = 0, C[0] = 7

) Problem with Array implementation: Sparse polynomials

¼ E.g. 10X3000+ 4 X2+ 7

¼ Waste of space and time (Ciare mostly 0s)

¼ Use singly linked list, sorted in decreasing order of exponents

(15)

R. Rao, CSE326 29

Applications of Lists: Radix Sort

) Bucket sort: Sort N integers A1, …, ANwhich are in the range 0 through B-1

¼ Initialize array Count with B slots (“buckets”) to 0’s

¼ Given an input integer Ai, Count[Ai]++

¼ Time: O(B+N) (= O(N) if B is Θ(N))

) Radix sort = Bucket sort on digitsof integers

¼ Each digit in the range 0 through 9

¼ Bucket-sort from least significant to most significant digit

¼ Use linked list to store numbers that are in same bucket

¼ Takes O(P(B+N)) time where P = number of digits

R. Rao, CSE326 30

Stacks

) In Array implementation of Lists

¼ Insert and Delete took O(N) time (need to shift elements)

) What if we avoid shifting by inserting and deleting only at the beginning of the list?

¼ Both operations take O(1) time!

) Stack: Same as list except that Insert/Delete allowed only at the beginning of the list (the top).

) “LIFO” – Last in, First out

) Push: Insert element at top

) Pop: Delete and Return top element

(16)

R. Rao, CSE326 31

Next class: Queues and Trees

To do this week:

Homework no. 2 on the Web (due next Monday)

Read Chapters 3 and 4

References

Related documents

If a customer wants to use an alternate form of currency for a contract-based payment, refer to the Manual Payment method described in the subsection Editing a

Trumm et al (2013) assessed the impact of the advanced technology of the new ExAblate 2100 system (Insightec Ltd, Haifa, Israel) for MRI-guided focused ultrasound surgery on

For my part, being of course disposed to accept all challenges that come to me from qualified opponents - such is my d uty as a sportsman - I consider the most difficult problem

Controls: “Raw” – age, race, and region of residence; “Abil” –age, race, region of residence, and AFQT adjusted for schooling at time of test; “BG” – mother’s highest

Average internal consistency reliability coefficients for Index scores range between .93 (Visual Working Memory Index) and .96 (Visual Memory Index) for the Adult Battery, and

Including tokyo city as osaka guide looks great side trip to find the local and from.. Clearly demonstrates the time and transfer to set up

Finally, this theory of other hemisphere recruitment also sheds light on the frequent neuroimaging finding after TBI showing greater involvement of the right hemisphere

Dalam hal ini perjanjian internasional yang menjadi objek kajian adalah Mutual Commitments antara Pemerintah Liberia dan United Nations Peacebuilding Commision dalam