DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna...

107
DATA STRUCTURES AND ALGORITHMS LECTURE 2 Lect. PhD. Onet ¸-Marian Zsuzsanna Babe¸ s - Bolyai University Computer Science and Mathematics Faculty 2019 - 2020 Lect. PhD. Onet ¸-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Transcript of DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna...

Page 1: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

DATA STRUCTURES AND ALGORITHMSLECTURE 2

Lect. PhD. Onet-Marian Zsuzsanna

Babes - Bolyai UniversityComputer Science and Mathematics Faculty

2019 - 2020

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 2: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

In Lecture 1...

Course Organization

Abstract Data Types and Data Structures

Pseudocode

Algorithm Analysis

O - notationΩ - notationΘ - notationBest Case, Worst Case, Average Case

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 3: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Today

Algorithm analysis

Dynamic Array

Iterators

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 4: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Quiz 1

The function T (n) = 2n2 + 32n + 1000 belongs to:

a) O(1) f) Ω(1) k) Θ(1)b) O(n) g) Ω(n) l) Θ(n)c) O(n2) h) Ω(n2) m) Θ(n2)d) O(n3) i) Ω(n3) n) Θ(n3)e) O(2n) j) Ω(2n) o) Θ(2n)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 5: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Quiz 2

Assume that the inputs of size n of a certain algorithm are ofthe following types:

Type 1: for each input of this type, the algorithm takes timeΘ(n4). The probability that the input is of this type is 1

n3 .

Type 2: for each input of this type, the algorithm takes timeΘ(n3). The probability that the input is of this type is 1

n .

Type 3: for each input of this type, the algorithm takes timeΘ(n). The probability that the input is of this type is1− 1

n3 − 1n .

What is the best case, worst case and average case of thisalgorithm?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 6: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Empirical analysis

In order to see empirically how much the number of stepstaken by an algorithm can influence its running time, we willconsider 4 different implementations for the same problem:

Given an array of positive and negative values, find themaximum sum that can be computed for a subsequence. If asequence contains only negative elements its maximumsubsequence sum is considered to be 0.

For the sequence [-2, 11, -4, 13, -5, -2] the answer is 20 (11 -4 + 13)

For the sequence [4, -3, 5, -2, -1, 2, 6, -2] the answer is 11 (4- 3 + 5 - 2 - 1 + 2 + 6)

For the sequence [9, -3, -7, 9, -8, 3, 7, 4, -2, 1] the answer is15 (9 - 8 + 3 + 7 + 4 )

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 7: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Empirical analysis

In order to see empirically how much the number of stepstaken by an algorithm can influence its running time, we willconsider 4 different implementations for the same problem:

Given an array of positive and negative values, find themaximum sum that can be computed for a subsequence. If asequence contains only negative elements its maximumsubsequence sum is considered to be 0.

For the sequence [-2, 11, -4, 13, -5, -2] the answer is 20 (11 -4 + 13)

For the sequence [4, -3, 5, -2, -1, 2, 6, -2] the answer is 11 (4- 3 + 5 - 2 - 1 + 2 + 6)

For the sequence [9, -3, -7, 9, -8, 3, 7, 4, -2, 1] the answer is15 (9 - 8 + 3 + 7 + 4 )

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 8: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

First version

The first algorithm will simply compute the sum of elementsbetween any pair of valid positions in the array.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 9: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

First version

The first algorithm will simply compute the sum of elementsbetween any pair of valid positions in the array.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 10: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function first (x, n) is://x is an array of integer numbers, n is the length of x

maxSum ← 0for i ← 1, n execute

for j ← i, n execute//compute the sum of elements between i and j

currentSum ← 0for k ← i, j execute

currentSum ← currentSum + x[k]end-forif currentSum > maxSum then

maxSum ← currentSumend-if

end-forend-forfirst ← maxSum

end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 11: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Complexity of the algorithm:

T (x , n) =n∑

i=1

n∑j=i

j∑k=i

1 = ... = Θ(n3)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 12: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Second version

If, at a given step, we have computed the sum of elementsbetween positions i and j , the next sum will be between i andj + 1 (except for the case when j was the last element of thesequence).

If we have the sum of numbers between indexes i and j wecan compute the sum of numbers between indexes i and j + 1by simply adding the element x [j + 1]. We do not need torecompute the whole sum.

So we can eliminate the third (innermost) loop.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 13: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Second version

If, at a given step, we have computed the sum of elementsbetween positions i and j , the next sum will be between i andj + 1 (except for the case when j was the last element of thesequence).

If we have the sum of numbers between indexes i and j wecan compute the sum of numbers between indexes i and j + 1by simply adding the element x [j + 1]. We do not need torecompute the whole sum.

So we can eliminate the third (innermost) loop.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 14: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function second (x, n) is://x is an array of integer numbers, n is the length of x

maxSum ← 0for i ← 1, n execute

currentSum ← 0for j ← i, n execute

currentSum ← currentSum + x[j]if currentSum > maxSum then

maxSum ← currentSumend-if

end-forend-forsecond ← maxSum

end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 15: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Complexity of the algorithm:

T (x , n) =n∑

i=1

n∑j=i

1 = ... = Θ(n2)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 16: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version I

The third algorithm uses the Divide-and-Conquer strategy.We can use this strategy if we notice that for an array oflength n the subsequence with the maximum sum can be inthree places:

Entirely in the left half

Entirely in the right half

Part of it in the left half and part of it in the right half (in thiscase it must include the last element of the left half and thefirst element of the right half)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 17: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version II

The maximum subsequence sum for the two halves can becomputed recursively.

How do we compute the maximum subsequence sum thatcrosses the middle?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 18: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version III

We will compute the maximum sum on the left (for asubsequence that ends with the middle element)

For the example above the possible subsequence sums are:

-8 (indexes 9 to 9)

4 (indexes 8 to 9)

-3 (indexes 7 to 9)

-6 (indexes 6 to 9)

-17 (indexes 5 to 9)

-5 (indexes 4 to 9)

-7 (indexes 3 to 9)

-13 (indexes 2 to 9)

-2 (indexes 1 to 9)

We will take the maximum (which is 4)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 19: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version IV

We will compute the maximum sum on the right (for asubsequence that starts immediately after the middle element)

For the example above the possible subsequence sums are:

12 (indexes 10 to 10)17 (indexes 10 to 11)9 (indexes 10 to 12)5 (indexes 10 to 13)4 (indexes 10 to 14)-3 (indexes 10 to 15)7 (indexes 10 to 16)10 (indexes 10 to 17)7 (indexes 10 to 18)

We will take the maximum (which is 17)

We will add the two maximums (21)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 20: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version V

When we have the three values (maximum subsequence sumfor the left half, maximum subsequence sum for the right half,maximum subsequence sum crossing the middle) we simplypick the maximum.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 21: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Third version VI

We divide the implementation of the third version in threeseparate algorithms:

One that computes the maximum subsequence sum crossingthe middle - crossMiddle

One that computes the maximum subsequence sum betweenpositions [left, right] - fromInterval

The main one, that calls fromInterval for the whole sequence -third

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 22: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function crossMiddle(x, left, right) is://x is an array of integer numbers//left and right are the boundaries of the subsequence

middle ← (left + right) / 2leftSum ← 0maxLeftSum ← 0for i ← middle, left, -1 execute

leftSum ← leftSum + x[i]if leftSum > maxLeftSum then

maxLeftSum ← leftSumend-if

end-for//continued on the next slide...

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 23: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

//we do similarly for the right siderightSum ← 0maxRightSum ← 0for i ← middle+1, right execute

rightSum ← rightSum + x[i]if rightSum > maxRightSum then

maxRightSum ← rightSumend-if

end-forcrossMiddle ← maxLeftSum + maxRightSum

end-function

Complexity:

Θ(n) - where n is right − left

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 24: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

//we do similarly for the right siderightSum ← 0maxRightSum ← 0for i ← middle+1, right execute

rightSum ← rightSum + x[i]if rightSum > maxRightSum then

maxRightSum ← rightSumend-if

end-forcrossMiddle ← maxLeftSum + maxRightSum

end-function

Complexity: Θ(n) - where n is right − left

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 25: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function fromInterval(x, left, right) is://x is an array of integer numbers//left and right are the boundaries of the subsequence

if left = right thenfromInterval ← x[left]

end-ifmiddle ← (left + right) / 2justLeft ← fromInterval(x, left, middle)justRight ← fromInterval(x, middle+1, right)across ← crossMiddle(x, left, right)fromInterval ← @maximum of justLeft, justRight, across

end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 26: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function third (x, n) is://x is an array of integer numbers, n is the length of x

third ← fromInterval(x, 1, n)end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 27: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Complexity of the solution (fromInterval is the main function):

T (x , n) =

1, if n = 1

2 · T (x , n2 ) + n, otherwise

In case of a recursive algorithm, complexity computationstarts from the recursive formula of the algorithm.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 28: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Let n = 2k

Ignoring the parameter x we rewrite the recursive branch:T (2k) = 2 · T (2k−1) + 2k

2 · T (2k−1) = 22 · T (2k−2) + 2k

22 · T (2k−2) = 23 · T (2k−3) + 2k

...2k−1 · T (2) = 2k · T (1) + 2k

——————————————– +T (2k) = 2k · T (1) + k · 2k

T (1) = 1 (base case from the recursive formula)T (2k) = 2k + k · 2k

Let’s go back to the notation with n.If n = 2k ⇒ k = log2n

T (n) = n + n · log2n ∈ Θ(nlog2n)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 29: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Fourth version

Actually, it is enough to go through the sequence only once, ifwe observe the following:

The subsequence with the maximum sum will never begin witha negative number (if the first element is negative, by droppingit, the sum will be bigger)

The subsequence with the maximum sum will never start witha subsequence with total negative sum (if the first k elementshave a negative sum, by dropping all of them, the sum will bebigger)

We can just start adding the numbers, but when the sum getsnegative, drop it, and start over from 0.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 30: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Fourth version

Actually, it is enough to go through the sequence only once, ifwe observe the following:

The subsequence with the maximum sum will never begin witha negative number (if the first element is negative, by droppingit, the sum will be bigger)

The subsequence with the maximum sum will never start witha subsequence with total negative sum (if the first k elementshave a negative sum, by dropping all of them, the sum will bebigger)

We can just start adding the numbers, but when the sum getsnegative, drop it, and start over from 0.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 31: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

function fourth (x, n) is://x is an array of integer numbers, n is the length of x

maxSum ← 0currentSum ← 0for i ← 1, n execute

currentSum ← currentSum + x[i]if currentSum > maxSum then

maxSum ← currentSumend-ifif currentSum < 0 then

currentSum ← 0end-if

end-forfourth ← maxSum

end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 32: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Complexity of the algorithm:

T (x , n) =n∑

i=1

1 = ... = Θ(n)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 33: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Comparison of actual running times

Input size First Second Third FourthΘ(n3) Θ(n2) Θ(nlogn) Θ(n)

10 0.00005 0.00001 0.00002 0.00000

100 0.01700 0.00054 0.00023 0.00002

1,000 16.09249 0.05921 0.00259 0.00013

10,000 - 6.23230 0.03582 0.00137

100,000 - 743.66702 0.37982 0.01511

1,000,000 - - 4.51991 0.16043

10,000,000 - - 48.91452 1.66028

Table: Comparison of running times measured with Python’s default timer()

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 34: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Comparison of actual running times

From the previous table we can see that complexity andrunning time are indeed related:

When the input is 10 times bigger:

The first algorithm needs ≈ 1000 times more timeThe second algorithm needs ≈ 100 times more timeThe third algorithm needs ≈ 11-13 times more timeThe fourth algorithm needs ≈ 10 times more time

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 35: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Example 2

Consider the following algorithm (written in Python):

def testContainer(container, l):”’

container is a container with integer numbersl is a list with integer numbers”’

count = 0for elem in l:

if elem in container:count += 1

return count

The above function counts how many elements from the list lcan be found in the container

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 36: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Example 2

Consider the following scenario for a given integer numbersize:

Generate a random list with size with unique elements fromthe interval [0, size * 2)Add these elements in a container (list or dictionary - value isequal to key for dictionary)Generate another random list with size unique elements fromthe interval [0, size * 2)Call the testContainer function for the container and thesecond list and measure the execution time for it.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 37: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Example 2

Execution times (for executing size times the in operation):

Size Time for list Time for dictionary

10 0.0000057 0.0000049

100 0.000124 0.0000069

1000 0.0141 0.000266

10000 1.652 0.00151

100000 183.102 0.0157

1000000 - 0.253

10000000 - 3.759

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 38: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Algorithm Analysis for Recursive Functions

How can we compute the time complexity of a recursivealgorithm?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 39: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Recursive Binary Search

function BinarySearchR (array, elem, start, end) is://array - an ordered array of integer numbers//elem - the element we are searching for//start - the beginning of the interval in which we search (inclusive)//end - the end of the interval in which we search (inclusive)

if start > end thenBinarySearchR ← False

end-ifmiddle ← (start + end) / 2if array[middle] = elem then

BinarySeachR ← Trueelse if elem < array[middle] then

BinarySearchR ← BinarySearchR(array, elem, start, middle-1)else

BinarySearchR ← BinarySearchR(array, elem, middle+1, end)end-if

end-function

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 40: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Recursive Binary Search

The first call to the BinarySearchR algorithm for an orderedarray of nr elements is:

BinarySearchR(array, elem, 1, nr)

How do we compute the complexity of the BinarySearchRalgorithm?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 41: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Recursive Binary Search

We will denote the length of the sequence that we arechecking at every iteration by n (so n = end − start)

We need to write the recursive formula of the solution

T (n) =

1, if n ≤ 1

T (n2 ) + 1, otherwise

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 42: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Master method

The master method can be used to compute the timecomplexity of algorithms having the following generalrecursive formula:

T (n) = a · T (nb ) + f (n)

where a ≥ 1, b > 1 are constants and f (n) is anasymptotically positive function.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 43: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Master method

Advantage of the master method: we can determine the timecomplexity of a recursive algorithm without furthercomputations.

Disadvantage of the master method: we need to memorizethe three cases of the method and there are some situationswhen none of these cases can be applied.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 44: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Computing the time complexity without the master method

If we do not want to memorize the cases for the mastermethod we can compute the time complexity in the followingway:

Recall, the recursive formula for BinarySearchR was:

T (n) =

1, if n ≤ 1

T (n2 ) + 1, otherwise

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 45: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Time complexity for BinarySearchR

We suppose that n = 2k and rewrite the second branch of therecursive formula:

T (2k) = T (2k−1) + 1

Now, we write what the value of T (2k−1) is (based on therecursive formula)

T (2k−1) = T (2k−2) + 1

Next, we add what the value of T (2k−2) is (based on therecursive formula)

T (2k−2) = T (2k−3) + 1

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 46: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Time complexity for BinarySearchR

The last value that can be written is the value of T (21)

T (21) = T (20) + 1

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 47: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Time complexity for BinarySearchR

Now, we write all these equations together and add them (andwe will see that many terms can be simplified, because theyappear on the left hand side of an equation and the right handside of another equation):

T (2k) = T (2k−1) + 1T (2k−1) = T (2k−2) + 1T (2k−2) = T (2k−3) + 1...T (21) = T (20) + 1—————————— +T (2k) = T (20) + 1 + 1 + 1 + ... + 1 = 1 + k

Obs: For non-recursive functions adding a +1 or not, doesnot influence the result. In case of recursive functions it isimportant to have another term besides the recursive one.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 48: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Time complexity for BinarySearchR

We started from the notation n = 2k .

We want to go back to the notation that uses n. Ifn = 2k ⇒ k = log2n

T (2k) = 1 + kT (n) = 1 + log2n ∈ Θ(log2n)

Actually, if we look at the code from BinarySearchR, we canobserve that it has a best case (element can be found at thefirst iteration), so final complexity is O(log2n)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 49: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Time complexity for BinarySearchR

We started from the notation n = 2k .

We want to go back to the notation that uses n. Ifn = 2k ⇒ k = log2n

T (2k) = 1 + kT (n) = 1 + log2n ∈ Θ(log2n)

Actually, if we look at the code from BinarySearchR, we canobserve that it has a best case (element can be found at thefirst iteration), so final complexity is O(log2n)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 50: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Another example

Let’s consider the following pseudocode and compute the timecomplexity of the algorithm:

subalgorithm operation(n, i) is://n and i are integer numbers, n is positive

if n > 1 theni ← 2 * im ← n/2operation(m, i-2)operation(m, i-1)operation(m, i+2)operation(m, i+1)

elsewrite i

end-ifend-subalgorithm

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 51: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

The first step is to write the recursive formula:

T (n) =

1, if n ≤ 1

4 · T (n2 ) + 1, otherwise

We suppose that n = 2k .

T (2k) = 4 · T (2k−1) + 1

This time we need the value of 4 · T (2k−1)

T (2k−1) = 4 · T (2k−2) + 1⇒4 · T (2k−1) = 42 · T (2k−2) + 4

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 52: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

And the value of 42 · T (2k−2)

42 · T (2k−2) = 43 · T (2k−3) + 42

The last value we can compute is 4k−1 · T (21)

4k−1 · T (21) = 4k · T (20) + 4k−1

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 53: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

We write all the equations and add them:

T (2k) = 4 · T (2k−1) + 14 · T (2k−1) = 42 · T (2k−2) + 442 · T (2k−2) = 43 · T (2k−3) + 42

...4k−1 · T (21) = 4k · T (20) + 4k−1

——————————————— +T (2k) = 4k · T (1) + 40 + 41 + 42 + ... + 4k−1

T (1) is 1 (first case from recursive formula)

T (2k) = 40 + 41 + 42 + ... + 4k−1 + 4k

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 54: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

n∑i=0

pi =pn+1 − 1

p − 1

T (2k) =4k+1 − 1

4− 1=

4k · 4− 1

3=

(2k)2 · 4− 1

3

We started from n = 2k . Let’s change back to n

T (n) =4n2 − 1

3∈ Θ(n2)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 55: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Records

A record (or struct) is a static data structure.

It represents the reunion of a fixed number of components(which can have different types) that form a logical unittogether.

We call the components of a record fields.

For example, we can have a record to denote a Person formedof fields for name, date of birth, address, etc.

Person:name: Stringdob: Stringaddress: Stringetc.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 56: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays

An array is one of the simplest and most basic datastructures.

An array can hold a fixed number of elements of the sametype and these elements occupy a contiguous memory block.

Arrays are often used as a basis for other (more complex) datastructures.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 57: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays

When a new array is created we have to specify two things:

The type of the elements in the array

The maximum number of elements that can be stored in thearray (capacity of the array)

The memory occupied by the array will be the capacity timesthe size of one element.

The array itself is memorized by the address of the firstelement.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 58: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays - Example 1

An array of boolean values (addresses of the elements aredisplayed in base 16 and base 10)

Can you guess the address of the element from position 8?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 59: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays - Example 2

An array of integer values (integer values occupy 4 bytes)

Can you guess the address of the element from position 8?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 60: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays - Example 3

An array of fraction record values (the fraction record iscomposed of two integers)

Can you guess the address of the element from position 8?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 61: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays

The main advantage of arrays is that any element of thearray can be accessed in constant time (Θ(1)), because theaddress of the element can simply be computed (consideringthat the first element is at position 0):

Address of i th element = address of array + i * size of an element

The above formula works even if we consider that the firstelement is at position 1, but then we need to use i − 1 insteadof i .

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 62: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Arrays

An array is a static structure: once the capacity of the array isspecified, you cannot add or delete slots from it (you can addand delete elements from the slots, but the number of slots,the capacity, remains the same)

This leads to an important disadvantage: we need toknow/estimate from the beginning the number of elements:

if the capacity is too small: we cannot store every element wewant to

if the capacity is too big: we waste memory

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 63: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array

There are arrays whose size can grow or shrink, depending onthe number of elements that need to be stored in the array:they are called dynamic arrays (or dynamic vectors).

Dynamic arrays are still arrays, the elements are still kept atcontiguous memory locations and we still have the advantageof being able to compute the address of every element in Θ(1)time.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 64: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Representation

In general, for a Dynamic Array we need the following fields:

cap - denotes the number of slots allocated for the array (itscapacity)

nrElem - denotes the actual number of elements stored in thearray

elems - denotes the actual array with capacity slots forTElems allocated

DynamicArray:cap: IntegernrElem: Integerelems: TElem[]

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 65: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Resize

When the value of nrElem equals the value of capacity, we saythat the array is full. If more elements need to be added, thecapacity of the array is increased (usually doubled) and thearray is resized.

During the resize operation a new, bigger array is allocatedand the existing elements are copied from the old array to thenew one.

Optionally, resize can be performed after delete operations aswell: if the dynamic array becomes ”too empty”, a resizeoperation can be performed to shrink its size (to avoidoccupying unused memory).

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 66: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - DS vs. ADT

Dynamic Array is a data structure:

It describes how data is actually stored in the computer (in asingle contiguous memory block) and how it can be accessedand processedIt can be used as representation to implement differentabstract data types

However, Dynamic Array is so frequently used that in mostprogramming languages it exists as a separate container aswell.

The Dynamic Array is not really an ADT, since it has onesingle possible implementation, but we still can treat it as anADT, and discuss its interface.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 67: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface I

Domain of ADT DynamicArray

DA = da|da = (cap, nrElem, e1e2e3...enrElem), cap, nrElem ∈N, nrElem ≤ cap, ei is of type TElem

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 68: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface II

What operations should we have for a DynamicArray?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 69: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface III

init(da, cp)

description: creates a new, empty DynamicArray with initialcapacity cp (constructor)

pre: cp ∈ N∗

post: da ∈ DA, da.cap = cp, da.nrElem = 0

throws: an exception if cp is zero or negative

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 70: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface IV

destroy(da)

description: destroys a DynamicArray (destructor)

pre: da ∈ DApost: da was destroyed (the memory occupied by the dynamicarray was freed)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 71: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface V

size(da)

description: returns the size (number of elements) of theDynamicArray

pre: da ∈ DApost: size ← the size of da (the number of elements)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 72: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface VI

getElement(da, i)

description: returns the element from a position from theDynamicArray

pre: da ∈ DA, 1 ≤ i ≤ da.nrElem

post: getElement ← e, e ∈ TElem, e = da.ei (the elementfrom position i)

throws: an exception if i is not a valid position

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 73: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface VII

setElement(da, i, e)

description: changes the element from a position to anothervalue

pre: da ∈ DA, 1 ≤ i ≤ da.nrElem, e ∈ TElem

post: da′ ∈ DA, da′.ei = e (the i th element from da’ becomese), setElement ← eold , eold ∈ TElem, eold ← da.ei (returns theold value from position i)

throws: an exception if i is not a valid position

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 74: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface VIII

addToEnd(da, e)

description: adds an element to the end of a DynamicArray.If the array is full, its capacity will be increased

pre: da ∈ DA, e ∈ TElem

post: da′ ∈ DA, da′.nrElem = da.nrElem + 1; da′.eda′.nrElem =e (da.cap = da.nrElem⇒ da′.cap ← da.cap ∗ 2)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 75: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface IX

addToPosition(da, i, e)

description: adds an element to a given position in theDynamicArray. If the array is full, its capacity will be increased

pre: da ∈ DA, 1 ≤ i ≤ da.nrElem + 1, e ∈ TElem

post: da′ ∈ DA, da′.nrElem = da.nrElem + 1, da′.ej =da.ej−1∀j = da′.nrElem, da′.nrElem − 1, ..., i + 1, da′.ei =e , da′.ej = da.ej ∀j = i − 1, ..., 1 (da.cap = da.nrElem⇒da′.cap ← da.cap ∗ 2)

throws: an exception if i is not a valid position (da.nrElem+1is a valid position when adding a new element)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 76: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface X

deleteFromPosition(da, i)

description: deletes an element from a given position fromthe DynamicArray. Returns the deleted element

pre: da ∈ DA, 1 ≤ i ≤ da.nrElem

post: deleteFromPosition ← e,e ∈ TElem, e = da.ei , da

′ ∈ DA, da′.nrElem =da.nrElem − 1, da′.ej = da.ej+1∀i ≤ j ≤ da′.nrElem,da′.ej = da.ej ∀1 ≤ j < i

throws: an exception if i is not a valid position

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 77: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface XI

iterator(da, it)

description: returns an iterator for the DynamicArray

pre: da ∈ DApost: it ∈ I, it is an iterator over da, the current elementfrom it refers to the first element from da, or, if da is empty, itis invalid

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 78: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Interface XII

Other possible operations:

Delete all elements from the Dynamic Array (make it empty)

Verify if the Dynamic Array is empty

Delete an element (given as element, not as position)

Check if an element appears in the Dynamic Array

Remove the element from the end of the Dynamic Array

etc.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 79: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Implementation

Most operations from the interface of the Dynamic Array arevery simple to implement.

In the following we will discuss the implementation of twooperations: addToEnd, addToPosition.

For the implementation we are going to use the representationdiscussed earlier:

DynamicArray:cap: IntegernrElem: Integerelems: TElem[]

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 80: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToEnd - Case 1

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 81: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToEnd - Case 1

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 82: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToEnd - Case 2

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 83: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToEnd - Case 2

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 84: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToEnd

subalgorithm addToEnd (da, e) is:if da.nrElem = da.cap then//the dynamic array is full. We need to resize it

da.cap ← da.cap * 2newElems ← @ an array with da.cap empty slots//we need to copy existing elements into newElemsfor index ← 1, da.nrElem execute

newElems[index] ← da.elems[index]end-for//we need to replace the old element array with the new one//depending on the prog. lang., we may need to free the old elems arrayda.elems ← newElems

end-if//now we certainly have space for the element eda.nrElem ← da.nrElem + 1da.elems[da.nrElem] ← e

end-subalgorithm

What is the complexity of addToEnd?

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 85: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToPosition

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 86: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - addToPosition

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 87: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

subalgorithm addToPosition (da, i, e) is:if i > 0 and i ≤ da.nrElem+1 then

if da.nrElem = da.cap then //the dynamic array is full. We need toresize it

da.cap ← da.cap * 2newElems ← @ an array with da.cap empty slotsfor index ← 1, da.nrElem execute

newElems[index] ← da.elems[index]end-forda.elems ← newElems

end-if //now we certainly have space for the element eda.nrElem ← da.nrElem + 1for index ← da.nrElem, i+1, -1 execute //move the elements to the

rightda.elems[index] ← da.elems[index-1]

end-forda.elems[i] ← e

else@throw exception

end-ifend-subalgorithm

What is the complexity of addToPosition?Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 88: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array

Observations:

While it is not mandatory to double the capacity, it isimportant to define the new capacity as a product of the oldone with a constant number greater than 1 (just adding onenew slot, or a constant number of new slots is not OK - youwill see later why).

How do dynamic arrays in other programming languages growat resize?

C++ - multiply by 1.5 (initially 1, then 2, 3, 4, 6, 9, 13, etc.)

Java - multiply by 1.5 (initially 10, then 15, 22, 33, etc.)

Python - multiply by ≈ 1.125 (0, 4, 8, 16, 25, 35, 46, 58, etc.)

C# - multiply by 2 (initially 0, 4, 8, 16, 32, etc.)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 89: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array

Observations:

While it is not mandatory to double the capacity, it isimportant to define the new capacity as a product of the oldone with a constant number greater than 1 (just adding onenew slot, or a constant number of new slots is not OK - youwill see later why).

How do dynamic arrays in other programming languages growat resize?

C++ - multiply by 1.5 (initially 1, then 2, 3, 4, 6, 9, 13, etc.)

Java - multiply by 1.5 (initially 10, then 15, 22, 33, etc.)

Python - multiply by ≈ 1.125 (0, 4, 8, 16, 25, 35, 46, 58, etc.)

C# - multiply by 2 (initially 0, 4, 8, 16, 32, etc.)

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 90: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array

After a resize operation the elements of the Dynamic Arraywill still occupy a contiguous memory zone, but it will be adifferent one than before.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 91: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 92: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - delete operation

To delete an element from a given position i, the elementsafter position i need to be moved one position to the left(element from position j is moved to position j-1).

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 93: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size -

Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 94: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement -

Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 95: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement -

Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 96: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator -

Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 97: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition -

O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 98: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd -

Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 99: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition -

O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 100: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd -

Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 101: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Dynamic Array - Complexity of operations

Usually, we can discuss the complexity of an operation for anADT only after we have chosen the representation. Since theADT Dynamic Array can be represented in a single way, wecan discuss the complexity of its operations:

size - Θ(1)getElement - Θ(1)setElement - Θ(1)iterator - Θ(1)addToPosition - O(n)deleteFromEnd - Θ(1)deleteFromPosition - O(n)addToEnd - Θ(1) amortized

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 102: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

In asymptotic time complexity analysis we consider one singlerun of an algorithm.

addToEnd should have complexity O(n) - when we have toresize the array, we need to move every existing element, sothe number of instructions is proportional to the length of thearray.Consequently, a sequence of n calls to the addToEnd operationwould have complexity O(n2).

In amortized time complexity analysis we consider a sequenceof operations and compute the average time for theseoperations.

In amortized time complexity analysis we will consider the totalcomplexity of n calls to the addToEnd operation and dividethis by n, to get the amortized complexity of the algorithm.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 103: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

In asymptotic time complexity analysis we consider one singlerun of an algorithm.

addToEnd should have complexity O(n) - when we have toresize the array, we need to move every existing element, sothe number of instructions is proportional to the length of thearray.Consequently, a sequence of n calls to the addToEnd operationwould have complexity O(n2).

In amortized time complexity analysis we consider a sequenceof operations and compute the average time for theseoperations.

In amortized time complexity analysis we will consider the totalcomplexity of n calls to the addToEnd operation and dividethis by n, to get the amortized complexity of the algorithm.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 104: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

We can observe that if we consider a sequence of noperations, we rarely have to resize the array

Consider ci the cost (≈ number of instructions) for the i th callto addToEnd

Considering that we double the capacity at each resizeoperation, at the ith operation we perform a resize if i-1 is apover of 2. So, the cost of operation i, ci , is:

ci =

i , if i-1 is an exact power of 2

1 otherwise

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 105: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

Cost of n operations is:

n∑i=1

ci ≤ n +

[log2n]∑j=0

2j < n + 2n = 3n

The sum contains at most n values of 1 (this is where the nterm comes from) and at most (integer part of) log2n termsof the form 2j .

Since the total cost of n operations is 3n, we can say that thecost of one operation is 3, which is constant.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 106: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

While the worst case time complexity of addToEnd is stillO(n), the amortized complexity is Θ(1).

The amortized complexity is no longer valid, if the resizeoperation just adds a constant number of new slots.

In case of the addToPosition operation, both the worst caseand the amortized complexity of the operation is O(n) - evenif resize is performed rarely, we need to move elements toempty the position where we put the new element.

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS

Page 107: DATA STRUCTURES AND ALGORITHMSmarianzsu/DSA/Lecture/Lecture02.pdfLect. PhD. Onet˘-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS. function crossMiddle(x, left, right) is: //x is

Amortized analysis

In order to avoid having a Dynamic Array with too manyempty slots, we can resize the array after deletion as well, ifthe array becomes ”too empty”.

How empty should the array become before resize? Which ofthe following two strategies do you think is better? Why?

Wait until the table is only half full (da.nrElem ≈ da.cap/2)and resize it to the half of its capacityWait until the table is only a quarter full (da.nrElem ≈da.cap/4) and resize it to the half of its capacity

Lect. PhD. Onet-Marian Zsuzsanna DATA STRUCTURES AND ALGORITHMS