This document contains questions about data structures and algorithms analysis including:
1) Memory requirements for different C structs
2) Steps for selection sort on sample arrays
3) Definitions of Big-O and Big-Omega notation
4) Proofs analyzing time complexities of algorithms
5) Operations of stacks and queues and examples of applications
6) Breadth-first search and depth-first search on a sample graph
7) Definitions of graphs and trees
8) Pseudocode for breadth-first search and depth-first search algorithms
9) Bonus questions including steps for mergesort and implementing a queue with stacks
1. Data Structures and Algorithm Analysis
1. How much memory will the following structures take up?
Hint: int takes 4 bytes, float takes 4 bytes, char takes 1 byte. – 9
points
a. struct Structure1 {int a,b,c,d,e[10]; float f;};
b. struct Structure2 {int a[12]; float b[5];};
c. struct Structure3 {char a[10][12][4], b[5][5], c[10];};
2. Show the steps when sorting (smallest to largest) the
following arrays of numbers using
selection sort
i.e. every time a swap occurs, show what the current state of
the array looks like, including the final sorted array. – 12 points
a. [10, 2, 5, 8, 9, 1, 4, 7]
b. [7, 1, 3, 2, 5, 4, 8, 12, 9]
c. [8, 7, 6, 5, 4, 3, 2, 1]
d. [5, 3, 8, 1, 9, 4, 2, 6]
3. Big-O: What is meant by f(n) = O(g(n))? Give the definition
and then explain what it means in your own terms. – 5 points
4. Big-Omega: What is meant by f(n) = Ω(g(n))? Give the
definition and then explain what it means in your own terms. –
5 points
2. 5. Show that
, make sure you use the definition and justify the inequalities
and constants used. - 4 points
6. Show that
, make sure you use the definition and justify the inequalities
and constants used. - 4 points
7. Show that
, make sure you use the definition and justify the inequalities
and constants used. - 4 points
8. Show that
, make sure you use the definition and justify the inequalities
and constants used. - 4 points
9. Show that
, make sure you use the definition and justify the inequalities
and constants used. - 4 points
10. What principle governs how you add/remove elements in a
stack? Spell it out and briefly explain. - 4 points
11. Briefly describe an application of a stack. - 4 points
12. What principle governs how you add/remove elements in a
queue? Spell it out and briefly explain. - 4 points
13. Briefly describe an application of a queue. - 4 points
Consider the following graph (pseudocode for BFS and DFS
given on page 9):
14. Write the order in which the nodes would be visited in when
3. doing a
breadth first search (BFS)
traversal starting at
node 4
. Also, write the distances from 4 to every other node. - 6 points
15. Write the order in which the nodes would be visited in when
doing a
breadth first search (BFS)
traversal starting at
node 5
. Also, write the distances from 5 to every other node. - 6 points
Same graph (for your convenience):
16. Write the order in which the nodes would be visited in when
doing a
depth first search (DFS)
traversal starting at
node 4 (order discovered or order off the stack)
. - 6 points
17. Write the order in which the nodes would be visited in when
doing a
depth first search (DFS)
traversal starting at
node 5 (order discovered or order off the stack)
. - 6 points
18. Give the definition of a graph. - 5 points
19. Give the definition of a tree (from graph theory). - 4 points
4. BFS Pseudocode (for graph with n vertices):
Input: grapharray[n][n], source
queue Q
int distance[n] (array to keep track of nodes distances (from
source), all values set to -1 except source which is set to 0
i.e. -1 = not visited)
Q.push(source)
while(Q is not empty)
v = Q.front
Q.pop()
for each neighbor w of v
if distance[w] = -1
print w
distance[w] = distance[v]+1
Q.push(w)
end if
end for
end while
5. DFS Pseudocode (for graph with n vertices):
Input: grapharray[n][n], source
stack S
int visited[n] (array to keep track of nodes visited, all values
set to 0 except source which is set to 1 i.e. 0 = not visited, 1
= visited)
S.push(source)
while(S is not empty)
v = S.top
S.pop()
for each neighbor w of v
if visited[w] = 0
print w
visited[w] = 1
S.push(w)
end if
end for
end while
Bonus (4 points): Show
all
6. of the steps (splitting and merging) when using mergesort to
sort (smallest to largest) the following array (they are the
numbers 1 through 16):
[16, 1, 15, 2, 14, 3, 13, 4, 12, 5, 11, 6, 10, 7, 9, 8]
Bonus (2 points): describe how you could implement a queue
using 2 stacks.
Bonus (4 points) Draw the binary search tree that would be
constructed by inserting the following values in the exact order
given (starting with an empty tree i.e. first value will be the
first node in the tree): -
a. Binary Search Tree A: 8, 9, 2, 7, 1, 10, 3, 5, 6, 4
b. Binary Search Tree B: 10, 7, 9, 12, 4, 2, 5, 3, 1, 14, 11, 19,
13, 18, 20