Chapter 9
Exercise 9.1-1
Available in the latest revision of the IM.
Exercise 9.1-2
Available in the latest revision of the IM.
Exercise 9.1-3
The minimum number of races it takes to determine the fastest three horses out of 25 is 7. Here is the procedure.
Determine the other two horses
Using the result of the previous race we can select candidates for the final race. The forth and fifth placed horse, together with their groups, can be immediately eliminated. They cannot be candidates for the second and third place. Furthermore, the rest of the horses from a group of the third placed horse can be excluded, too. We need to take 2 horses from the winner's group and 1 horse from the group of the second placed horse. Now, we have 5 horses for the 7th race. The first and second horse from this race are the additional two we are looking for.
Exercise 9.1-4
Let represent the set of numbers which are potentially the minimum and let denote the set of numbers which are potentially the maximum. Initially, all numbers are potentially either the minimum or maximum, so . There are two types of comparisons:
Between two numbers that are members of both sets.
Between two numbers from the same set.
The first type of comparison reduces the size of both and by one. The reason is that a smaller of the two numbers cannot anymore be a member of and the larger of the two numbers cannot anymore remain in . The second type of comparison only reduces the matching set by one without having any impact on the other. So, to attain the lower bound we must leverage the first type of comparison as much as possible.
As with proving the upper bound, we process elements in pairs. We can form pairs, so after the first stage . Observe that these sets can have at most one element in common, which happens when is odd. At any rate, the minimum must be searched among members of and the maximum among those from . We already know the lower bound on the amount of comparisons needed, which is for a set of elements. This is where we can only use the second type of comparison (see above).
The total number of comparisons required is
Exercise 9.2-1
Available in the latest revision of the IM.
Exercise 9.2-2
Available in the latest revision of the IM.
Exercise 9.2-3
In each partitioning the maximum of the current subarray should be selected as a pivot. For example, the first iteration should choose 9, the second 8, and so on. The sequence stops when the last subarray becomes [0].
Exercise 9.2-4
Available in the latest revision of the IM.
Exercise 9.3-1
Available in the latest revision of the IM.
Exercise 9.3-2
Let , thus . The subarray may contain at most 4 elements, that should be added to both sides of a partition. The recurrence becomes
The driving function satisfies the polynomial-growth condition, so according to the Akra-Bazzi theorem, replacing with , where for some constant and sufficiently large , leaves the asymptotic solution unaffected. Therefore, we still have running time.
Exercise 9.3-3
Available in the latest revision of the IM.
The solution in the IM is inaccurate, since the ith order statistic of a median is .
Exercise 9.3-4
We apply the decision tree model to prove the statement from the book. In the decision tree model:
Each internal node represents a comparison between two elements.
Each leaf corresponds to a conclusion reached by the algorithm after a sequence of comparisons.
For the algorithm to correctly identify the th smallest element , every input that leads to a leaf where is output must have as the th smallest element.
Assume the algorithm reaches a leaf where it outputs as the th smallest element. Suppose, for the sake of contradiction, that there exists an element such that the relation between and is not determined, either directly or via transitive inference, by the comparisons made along the path to that leaf. Then, there exist two inputs sharing the same path toward :
In one
In the other
But this is a contradiction. If , then the th smallest element is given that is the th smallest element when . Hence, the relation between and every other element must be determined by the comparisons already made. No need for performing any additional comparisons.
Exercise 9.3-5
You can read the solution here.
Exercise 9.3-6
Available in the latest revision of the IM.
Exercise 9.3-7
Available in the latest revision of the IM.
Exercise 9.3-8
Available in the latest revision of the IM.
The solution in the IM contains errors regarding order statistics, that are fixed below. Notice that we using a generic expression for irrespective of it's parity.
Find the th order statistic using the SELECT procedure. Then recursively find the quantiles of the elements less than and the quantiles of the elements greater than the th order statistic.
Exercise 9.3-9
Available in the latest revision of the IM.
Exercise 9.3-10
Available in the latest revision of the IM.
More Generic LeetCode Example
Below is the solution in C++ for the problem associated with this exercise.
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
// The median must be either in nums1 or nums2.
double median = findMedianSortedArrays(nums1, nums2, 0, nums1.size() - 1);
if (isnan(median))
median = findMedianSortedArrays(nums2, nums1, 0, nums2.size() - 1);
return median;
}
private:
double findMedianSortedArrays(vector<int>& a, vector<int>& b, int low, int high) {
const int m = a.size();
const int n = b.size();
const bool isEven = ((m + n) & 1) == 0;
const int half = (m + n) >> 1;
if (n == 0)
return isEven ? (a[half - 1] + a[half]) / 2.0 : a[half];
// Use binary search over A to find the median, if possible.
while (low <= high) {
// a[k] is the so-called lower median.
const int k = (low + high) >> 1;
// Number of elements in A left of the median.
int left = k + int(isEven);
// Index into B immediately left of the median.
const int q = half - left - 1;
if (left == half and a[k] <= b.front() or
q >= 0 and q < n and b[q] <= a[k] and (q == n - 1 or a[k] <= b[q + 1]))
if (isEven) {
const double neighborA = (k < m - 1) ? a[k + 1] : INFINITY;
const double neighborB = (q < n - 1) ? b[q + 1] : INFINITY;
return (a[k] + min(neighborA, neighborB)) / 2.0;
} else
return a[k];
if (q < 0 or q < n - 1 and a[k] > b[q + 1])
high = k - 1;
else
low = k + 1;
}
return NAN;
}
};Problem 9-1
Available in the latest revision of the IM.
Problem 9-2
Available in the latest revision of the IM.
Problem 9-3
Available in the latest revision of the IM.
There are several issues with the solution in the IM, as noted below.
a. The left side of the summation is always less than ½, as it should be according to the definition from the book. If is even, then we have , since the lower median is at . If is odd, then , so we have elements less than the median. Again the sum is less than ½.
b. The reasoning about the stoppage criteria is imprecise. If , then we would not have a proper condition for the left side, as being less than ½. Therefore, we must stop as soon as the accumulated sum is equal or greater than ½, rather than wait until it exceeds ½.
c. Both in the text and pseudocode the thresholds are imprecise. In the pseudocode, we should have: and . The text should be altered accordingly.
Problem 9-4
Available in the latest revision of the IM.
Problem 9-5
Available in the latest revision of the IM.
Problem 9-6
a.
We follow the template from the book for . The number of groups is at most . There are at least elements greater than or equal to the pivot, and at least elements less than or equal to the pivot. That leaves at most
elements in the recursive call. The recurrence becomes
Since is odd, then . We have
We prove that using the substitution method for some constant and .
We should choose to dominate the constant hidden in the . Therefore, .
b.
When the recurrence becomes , which evidently resolves to using the Akra-Bazzi method with and a trivial driving function .
c.
Read the section 3 about the repeated step algorithm in the attached PDF document (download from here on October 2025). It contains both a visual representation of what is going on, explanation how it differs from grouping by 9, and contains an analysis of the running time (important for part (d)).
d.
See part (c).
Last updated