Exercises

Ex. 3.1

Done.

Ex. 3.2

Skipped; I don’t understand the problem.

Ex. 2

Skipped; I don’t understand the problem.

Problems

Prob. 3.1

psuedo-code changes; compare new complexity with old one

a

Psuedo-code. No Changes at all. Note the sequence $2^9 \rightarrow 2^3 \rightarrow 2^1$, up to the base case of $u = 2$ as before, starting with total data of size $2^9 = 512$.

Complexity. Similarly $\mathcal{O}(\lg \lg u)$. We follow the same reasoning on the master method but on the case of a cluster size $u^{1/3}$. We gain $\lg_b a = \lg_3 1 = 0$, or more accurately $\lg_b a = \lg_{4/3} 1 = 0$, whereby $\lceil m/3 \rceil \leq 3m/4$. Thus, Reaching exactly the same complexity.

b

vEB-TREE-MIN No Changes.

vEB-TREE-MAX No Changes.

vEB-TREE-MEMBER(V, x) No Changes.

vEB-TREE-SUCCESSOR(V, x) No Changes.

vEB-TREE-PREDOCESSOR(V, x) Symmetric, Skipped.

vEB-EMPTY-TREE-INSERT(V, x) No Changes.

Intuitively, We apply the same trick of swapping V.min. Complexity is the same, as we only re-ordered a constant-complexity code block.

vEB-TREE-INSERT(V, x)
  if V.min == NIL
    vEB-EMPTY-TREE-INSERT(V, x)
  else 
    if x < V.min
      exchange x with V.min
    if x > V.max
      exchange x with V.max
    if V.u > 2
      if vEB-TREE-MINIMUM(V.cluster[high(x)] == NIL
        vEB-TREE-INSERT(V.summary, high(x))
        vEB-EMPTY-TREE-INSERT(V.cluster[high(x)], low.x)
    else
	  vEB-TREE-INSERT(V.cluster[high(x)], low.x)

Intuitively, We apply the same trick of updating V.min and assigning x to a new value before the delete operation. In this case, there’s no need to check for summary as V.max will be already set to either V.min or the suitable index value. Complexity is the same for exactly the same reasoning

vEB-TREE-DELETE(V, x)
.
..
else
  if x == V.min
    first-cluster = vEB-TREE-MINIMUM(V.summary)
    x = index(first-cluster, vEB-TREE-MINIMUM(V.cluster[first-cluster]))
    V.min = x
  elseif x == V.max
    last-cluster = vEB-TREE-MAXIMUM(V.summary)
	x = index(high(x), vEB-TREE-MAXIMUM(V.cluster[high(x)]))
    V.max = x
	
  vEB-TREE-DELETE(V.cluster[high(x)], low(x))

  if vEB-TREE-MINIMUM(V.cluster[high(x)]) == NIL
    vEB-TREE-DELETE(V.summary, high.x)

Algorithm’s correctness are not proved. We relied only on our intuition. Not comfortable the new modification is simpler and yet offers the same complexity; Why not illustrated in this way by the author?