cs32w11final

cs32w11final - Discussion 2C Notes(Week 10 March 11 TA...

Info iconThis preview shows pages 1–4. Sign up to view the full content.

View Full Document Right Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Discussion 2C Notes (Week 10, March 11) TA: Brian Choi ([email protected]) Section Webpage: http://www.cs.ucla.edu/~schoi/cs32 Final Practice Problems Note: The work space provided for each problem may not be sufficient. Use scratch papers if needed. [Big-O] 1. Suppose there is an array of N (~ 10,000) elements in a random order. You want to run a search and look for a certain item. Using what you have learned in this course, what is the best you can do if: (a) you run a search once? (“Is there 5 in the array?”) (b) you run a search 10,000 times? (“Is there 5? 16? 73? ...”) You may place this data in a secondary data like and/or re-arrange the data to solve the problem. Support your argument using Big-O. 2. Consider two vector<int> ’s x and y , each having N distinct integers. We want to merge x and y to create a third vector z , such that z has all integers that x and y have. Like x and y , z should not have any duplicate numbers. We are not concerned about keeping the elements in x , y , or z in any certain order. Here is one algorithm: void merge(const vector<int>& x, const vector<int>& y, vector<int>& z) { z.clear(); z.reserve(x.size() + y.size()); for (int i = 0; i < x.size(); ++i) z.push_back(x[i]); for (int j = 0; j < y.size(); ++j) { bool duplicate = false; for (int i = 0; i < x.size(); ++i) { if (y[j] == x[i]) { duplicate = true; break; } } if (!duplicate) z.push_back(y[j]); } } (a) What is the complexity of this algorithm? CS32: Introduction to Computer Science II Winter 2011 Copyright 2011 Brian Choi Week 10, Page 1/9 (b) Here is a different implementation of merge . What is its complexity? void merge(const vector<int>& x, const vector<int>& y, vector<int>& z) { z.clear(); z.reserve(x.size() + y.size()); for (int i = 0; i < x.size(); i++) z.push_back(x[i]); for (int j = 0; j < y.size(); j++) z.push_back(y[j]); sort(z.begin(), z.end()); int last = 0; for (int k = 1; k < z.size(); k++) { if (z[last] != z[k]) { last++; z[last] = z[k]; } } z.resize(last + 1); } (c) Which one performs better, (a) or (b)? (d) (Open-ended question) Is there any algorithm for merge that performs better than the version in (b)? CS32: Introduction to Computer Science II Winter 2011 Copyright 2011 Brian Choi Week 10, Page 2/9 [Trees] 3. Write nodeCount , a recursive function that counts the number of nodes in a tree rooted at node . This is a general tree, where a node can have a variable number of children. Use the following Node structure....
View Full Document

Page1 / 9

cs32w11final - Discussion 2C Notes(Week 10 March 11 TA...

This preview shows document pages 1 - 4. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online