UP | HOME

Chapter 2.3

Table of Contents

ch2.3

2.3-1

                      +--------------------------------+
                      |  3  9  26  38  41  49  52  57  |
                      +----x----------------------x----+
                          /                        \
                         /          merge           \
        +---------------o---+                   +----o--------------+
        |   3  26  41  52   |                   |   9  38  49  57   |
        +--x-------------x--+                   +--x-------------x--+
          /               \                       /               \
         /      merge      \                     /      merge      \
   +----o----+         +----o----+         +----o----+         +----o----+
   |  3  41  |         |  26  52 |         |  38  57 |         |  9  49  |
   +--x---x--+         +--x---x--+         +--x---x--+         +--x---x--+
     /     \             /     \             /     \             /     \
    / merge \           / merge \           / merge \           / merge \
+--o--+   +--o--+   +--o--+   +--o--+   +--o--+   +--o--+   +--o--+   +--o--+
|  3  |   | 41  |   | 52  |   | 26  |   | 38  |   | 57  |   |  9  |   | 49  |
+-----+   +-----+   +-----+   +-----+   +-----+   +-----+   +-----+   +-----+

2.3-2

MERGE(A, p, q, r)
    n1 = q - p + 1
    n2 = r - q
    let L[1..n1] and R[1..n2] be new arrays
    for i = 1 to n1
        L[i] = A[p + i - 1]
    for j = 1 to n2
        R[j] = A[q + j]
    i = 1
    j = 1
    k = 1
    while i <= n1 and j <= n2
        if L[i] <= R[j]
            A[k] = L[i]
            i = i + 1
        else A[k] = R[j]
             j = j + 1
    if i > n1
        while j <= n2
            A[k] = R[j]
            k = k + 1
            j = j + 1
    else while i <= n1
             A[k] = L[i]
             k = k + 1
             i = i + 1

2.3-3

Base Case: \(T(2) = 2\lg{2}\)

Inductive Step: Assume \(T(n) = n\lg{n}\), Then

\begin{align*} T(2n)&=2T(n)+2n\\ &=2n\lg{n}+2n\\ &=2n\lg(2n) \end{align*}

Finally: By induction, we prove that \(T(n) = n\lg{n}\) when n is an exact power of 2.

2.3-4

\begin{equation*} T(n)= \begin{cases} 0 & \text{if n = 1}\\ T(n-1)+t(n) & \text{if n > 1, $t(n)=\Omega(1)$, $t(n)=O(n)$} \end{cases} \end{equation*}

2.3-5

BINARY-SEARCH(A, v)
    low = 1
    high = A.length
    while high >= low
        med = (high + low) // 2
        if A[med] == v
            return med
        else if A[med] > v
            high = med - 1
        else low = med + 1
    return NIL

The worst case running time is

\begin{equation*} T(n)= \begin{cases} \Theta(1) & \text{if n = 1}\\ T(\lceil n/2 \rceil)+\Theta(1) & \text{if n > 1} \end{cases} \end{equation*}

Thus,

\begin{align*} T(n)& \leq T(2^{\lceil \lg{n} \rceil})\\ & \leq (\lg{n}+1)\Theta(1)\\ &=\Theta(\lg{n}) \end{align*}

2.3-6

No, even we use binary search to find the proper position of the element, the bigger elements still need to be move forward, the worst-case running time is \(\Theta(n^2)\).

2.3-7

EXIST-TWO-OF-SUM(S, x)
    A = MERGE-SORT(S)
    for i = 1 to A.length
        k = BINARY-SEARCH(A, x - A[i])
        if i != k
            return True
    return False

Author: pedh

Created: 2023-08-17 Thu 10:36

Validate