Algorithm Design Exercises

  • Upload
    p6e7p7

  • View
    234

  • Download
    0

Embed Size (px)

Citation preview

  • 7/31/2019 Algorithm Design Exercises

    1/36

    Abstract

    1 Verification Conditions

    Exercise 1 M 9

    M mod 9 M 10

    10 9

    { 0 M }

    q,r := 0 , M+1 ;

    { Invariant: M+1 = 9q+ r }

    do 1 0 < r r,q := (r mod 10) + (r 10) , q+ (r 10)

    od ;

    r := r1

    { 0 r < 9 M = 9q+ r } .

  • 7/31/2019 Algorithm Design Exercises

    2/36

    M = 1367 M = 25679

    q r

    2

    Exercise 2

    M m x X y

    { 0 M }

    m , x , y := M , X , 0 ;

    { Invariant: 0 m mx+y = MX

    Bound function: m }

    do m = 0 if even.m m , x := m2 , 2x

    2 odd.m m , x , y := (m1)2 , 2x , yx

    fi

    od

    { y = MX } .

    2

    2 Saddleback Search

    Exercise 3 f g

    i j i j f.i f.j. g

    m n f.m = g.n

  • 7/31/2019 Algorithm Design Exercises

    3/36

    2

    Exercise 4 f g M N

    i j

    f

    i j f[i] f[j] .

    g

    i,j : 0 i < M 0 j < N : |f[i] g[j]| .

    |x| x

    m n 0 m < M 0 n < N

    f[m] g[n] 0

    i,j : m i < M n j < N : |f[i]g[j]|

    = (f[m] g[n]) i,j : m i < M n+1 j < N : |f[i] g[j]| .

    j = n

    g[n] f[m] 0

    i,j : 0 i < M 0 j < N : |f[i] g[j]| .

    m n d

    i,j : 0 i < M 0 j < N : |f[i] g[j]|

    = d i,j : m i < M n j < N : |f[i] g[j]| .

    M+N MN

    M N

    d

    2

  • 7/31/2019 Algorithm Design Exercises

    4/36

    Exercise 5 M N 0 M 0 N.

    k l

    0 k N 0 l M Mk = Nl .

    M+N

    k l Mk Nl kl

    2

    3 Periodic Functions

    Exercise 6 f

    i j i < j fi.0 = fj.0 fi

    i f f0.0 = 0 fk+1.0 = f.(fk.0) f

    p i fi.0 = fi+p.0

    f

    p:: m :: i,j : i j : fi.0 = fj.0 m i p \ ji .m\n m n n m

    k :: n = km

    m i j

    fm ::

    k :: fk.0 = f2k.0 m k p \ k

    i j k 2k

    f

    f

    2

  • 7/31/2019 Algorithm Design Exercises

    5/36

    Exercise 7 N 0 1N

    d0 , d1 , . . . , dm1dm , dm+1 , . . . , dn1

    14

    = 0.25000 . . . 25 0

    m = 2 n = 3 17

    = 0.142857142857 . . . 142857

    m = 0 n = 6nm

    17

    17

    = 0.142857142857 . . .

    17

    1 3 2 6 . . .

    7

    1N

    1N r 1

    r,d := (10r) mod N , (10r) N .

    r.i r i d.i

    d i r.0 = 1 r.(i+1) =(10 r.i) mod N

    d.0 d.(i+1) =(10 r.i) N

    1N

    r

    r.N

    k : 0 < k : r.N = r.(N+k) .

    1N

    2

    4 Euclids Algorithm

  • 7/31/2019 Algorithm Design Exercises

    6/36

    m n m\n

    m n n m k :: n = km

    0

    m\0 m

    Exercise 8 m n m gcd n

    p

    p \ (m gcd n) p\m p\n .

    gcd

    0

    M N

    { 0 < M 0 < N }

    m,n := M,N ;

    { Invariant: 0 < m 0 < n M gcd N = m gcd n }

    do m < n n := nm

    2 n < m m := mn

    od

    { M gcd N = m } .

    gcd

    gcd

    p q

    { 0 < M 0 < N }

    m,n,p,q := M,N,M,N ;

  • 7/31/2019 Algorithm Design Exercises

    7/36

    { Invariant: 0 < m 0 < n M gcd N = m gcd n }

    do m < n n,q := nm , p+q

    2 n < m m,p := mn , p+q

    od

    { M gcd N = m } .

    m n p q

    mp np mq nq

    M N m lcm n

    (m lcm n) (m gcd n) = mn .

    M N p q

    2

    5 Quantifiers

    Exercise 10 a N i h

    k asc.(i,h,k)

    asc.(i,h,k) 0 i i+h k j : i j < i+h : a[i] a[j]

    asc.(i,h,k) a h ik a len

    len.k = h,i : asc.(i,h,k) : h .

    len.k k

    a

    len.0

    len.(k+1) = len.k h : asc.(k+1h , h , k+1) : h

    2

  • 7/31/2019 Algorithm Design Exercises

    8/36

    6 Miscellaneous

    Exercise 11

    3 6 2 0 1 4 0 9 4 ,

    4 9 0 4 1 0 2 6 3 .

    swap

    swap(i,j) i j i j

    i j

    2

    Exercise 12

    0 0 2 1 0 5 2 ,

    0 2 1 0 5 2

    0 0 2 0 1 0 5

    2

    B N

  • 7/31/2019 Algorithm Design Exercises

    9/36

    R

    R

    N2 N

    2

    Exercise 13 V N count

    k 0 k N x

    count(x,k) = j : 0 j < k V[j] = x : 1 .

    count xV k

    k x e k x

    e

    { 0 N }

    k , x , e := 0 , a n y , 0 { x }

    ; { Invariant:

    0 k N ke e

    count(x,k) e y : y = x : count(y,k) ke

    Bound function: Nk }

    do k < N body ; k := k+1

    od

    { y : y = x : (count(y,N) > N/2) }

    body

    k , x , e := 0, any , 0

  • 7/31/2019 Algorithm Design Exercises

    10/36

    2

    Exercise 14

    5 3 8 1 2 7 0 6 4

    9

    0 3 2 1 0 5 2

    4

    mex.k

    k A 0 i

    A[i]

    mex.0

    a m k s m

    k A a

    A k a

    k A s a

    m ks a m

    A

    0 3 1 1 0 5 2

    k = 2 m s 1 a A

    k =4 m 2 s 3 a

    0 1 1 3 0 5 2

  • 7/31/2019 Algorithm Design Exercises

    11/36

    swap

    a swap(i,j)

    A[i] A[j] swap(i,i)

    a A

    (m, k)m m

    k

    2

    Exercise 15 a

    N N a

    0 1 . . . N1

    5 3 8 1 2 7 0 6 4

    9 0 1 . . . 8

    i j 0 i < j < N a[j] < a[i]

    (2, 7) a[2] 8

    a[7] 6 a[7] < a[2] 19

    a b

    a b[i]

    i

    5 3 6 1 1 3 0 1 0 .

    Ni : r : p

    i r p

    Ni : 0 i < M : a[0] < a[i] = a[0]

  • 7/31/2019 Algorithm Design Exercises

    12/36

    a M

    5

    k k

    k a[0] a[0]

    a0

    j : 0 j < M : Ni : 0 i < M : a0[i] = j = 1 .

    a0a0

    k 0 1

    { 0 M j : 0 j < M : a[j] = a0[j] }CountInversions

    { i : 0 i < M : a[i] = Nj : i j < M :a0[j] < a0[i] }

    Mk

    Mk

    Mka0

    i : k i < M : Nj : i j < M : a[j] < a[i] = Nj : i j < M :a0[j] < a0[i] ,

    k

    a0

    i : 0 i < k : a[i] = Nj : i j < M : a0[j] < a0[i] .

    k 5

    5 3 6 1 1 3 0 2 1

    5

  • 7/31/2019 Algorithm Design Exercises

    13/36

    5 3 6 1 1

    3 0 2 1 ,

    0 1 2 3

    7 0 6 4 ,

    2

    Exercise 18

    x, y:: ay = bx2 ,

    a b

    m, n:: 0 m 0 n .

    a b

    m

    n (bm2)/a

    n m(an)/b m

    1 n 1

    2

  • 7/31/2019 Algorithm Design Exercises

    14/36

    1 M r

    q

    [(1 0 < r) M+1 = 9q + r 0 r1 < 9 M = 9q+ (r1)] .

    (1 0 < r) r1 < 9

    10 r

    0 r1 1 r

    1 r M+1 = 9q+ r .

    r q1368 0

    144 136

    18 150

    9 151

    8 151

    M = 1367

    r q25680 0

    2568 2568

    264 2824

    30 2850

    3 2853

    2 2853

    M = 25679

    r

    r

    q

  • 7/31/2019 Algorithm Design Exercises

    15/36

    q M Mq

    [0 M M

    +1 = 90

    +M

    +1 1 M

    +1]

    .

    [(10 r) 1 r M+1 = 9q+ r 0 r1 < 9 M = 9q+ (r1)] .

    K

    [10 r 1 r M+1 = 9q+ r r = K (r mod 10) + (r 10) < K] .

    [ 10 r 1 r M+1 = 9q+ r

    1 (r mod 10) + (r 10)

    M+1 = 9(q + (r 10))+ (r mod 10)+ (r 10)

    2

    2 m

    M x X z

    [0 M 0 M MX + 0 = MX] .

    [(m = 0) 0 m mx+y = MX y = MX] .

    [ m = 0 m = K 0 m mx+y = MX even.m

    m2 < K

  • 7/31/2019 Algorithm Design Exercises

    16/36

    [ m = 0 m = K 0 m mx+y = MX odd.m

    (m1)2 < K

    [ m = 0 0 m mx +y = MX even.m

    (m2)2x+y = MX

    [ m = 0 0 m mx+y = MX odd.m

    ((m1)2)2x+y x = MX

    [0 m mx+y = MX 0 m] ,

    [even.m odd.m] .

    yx y+x

    2

    3 m n

    i : 0 i < m : j : 0 j : f.i = g.j

    j : 0 j < n : i : 0 i : f.i = g.j

    g f.m

  • 7/31/2019 Algorithm Design Exercises

    17/36

    (Mm) + (Nn) M N

    f.M = g.N

    2

    4

    i,j : m i < M n j < N : |f[i]g[j]|

    = { j = n }

    i : m i < M : |f[i] g[n]| i,j : m i < M n+1 j < N : |f[i]g[j]|

    = { i : m i < M : |f[i] g[n]|

    = { i = m }

    |f[m] g[n]| i : m+1 i < M : |f[i] g[n]|

    = { f[m] g[n] 0

    i m+1 i < M f[m] f[i]

    f[m] g[n] f[i] g[n] }

    f[m] g[n] }

    (f[m] g[n]) i,j : m i < M n+1 j < N : |f[i] g[j]| .

    i,j : m i < M n j < N : |f[i]g[j]|

    = (g[n] f[m]) i,j : m+1 i < M n j < N : |f[i] g[j]| .

    m n

    m n

    d

    |f[0] g[0]|

    M N

    { i : 0 i < M : j : i j < M : f[i] f[j]

    i : 0 i < N : j : i j < N : g[i] g[j] }

    m,n,d := 0,0,|f[0] g[0]| ;{ Invariant:

    d i,j : m i < M n j < N : |f[i] g[j]|

    = i,j : 0 i < M 0 j < N : |f[i] g[j]| }

  • 7/31/2019 Algorithm Design Exercises

    18/36

    do m = M n = N if f.m

  • 7/31/2019 Algorithm Design Exercises

    19/36

    2 Nl < Mk l := l+1

    2 Mk = Nl k , l , count := k+1 , l+1 , count+1

    fi

    od ;

    count := count+1

    { count = S.(0,0) = i,j : 0 i N 0 j M Mi = Nj : 1 } .

    (Ml) + (Nk) 0

    0 k N 0 l M 1 2

    M k N l

    d d = Mk Nl

    { 0 M 0 N }k , l , count , d := 0 , 0 , 0 , 0 ;

    { Invariant: }

    do k = N l = M if d < 0 k , d := k+1 , d+M

    2 d > 0 l , d := l+1 , dN

    2 d = 0 k , l , count , d := k+1 , l+1 , count+1 , d+MN

    fi

    od ;count := count+1

    { count = S.(0,0) = i,j : 0 i N 0 j M Mi = Nj : 1 } .

    2

    6 fk.0 k

    f2k.0

    { f }

    f1,f2,k := 0,0,0 ;{ Invariant: f1 = fk.0 f2 = f2k.0 0 k }

    do f1 = f2 f1,f2,k := f.f1,f.(f.f2) , k+1

    od ;

  • 7/31/2019 Algorithm Design Exercises

    20/36

    p := k

    { p f }

    2

    7 m n

    j :: d.(m+j+1) = d.(m+n+j+1) j :: r.(m+j) = r.(m+n+j) .

    d.(i+1) = d.(i+j+1)

    = { d }

    (10 r.i) N = (10 r.(i+j)) N

    = { 0 < N }

    (10 r.i) N N = (10 r.(i+

    j)) N N= { p = p N N + p mod N }

    10 r.i (10 r.i) mod N = 10 r.(i+j) (10 r.(i+j)) mod N

    = { }

    10(r.i r.(i+j) ) = (10 r.i) mod N (10 r.(i+j)) mod N

    = { }

    10(r.i r.(i+j)) = r.(i+1) r.(i+j+1) .

    j :: d.(m+j+1) = d.(m+n+j+1)

    = { i,j := m+j , n }

    j :: 10(r.(m+j) r.(m+n+j)) = r.(m+j+1) r.(m+n+j+1)

    = {

    c

    j :: 10 c.j = c.(j+1)

    j :: 10j

    c.0 = c.j

    .

    c.j r.(m+j) r.(m+n+j) }j :: 10j(r.m r.(m+n)) = r.(m+j+1) r.(m+n+j+1)

    = { r.(m+j+1) r.(m+n+j+1)

  • 7/31/2019 Algorithm Design Exercises

    21/36

    N N

    10j(r.m r.(m+n))

    r.m r.(m+n) = 0 }

    j :: 0 = r.(m+j) r.(m+n+j)

    = { }

    j :: r.(m+j) = r.(m+n+j) .

    N+1 r.0 r.1 . . . r.N 0

    N

    j,k : 0 j < k N : r.j = r.k .

    r

    j,k : 0 j < k N : i : 0 i : r.(i+j) =r.(i+k) .

    i i Nj

    j,k : 0 j < k N : r.N = r.(Nj+k) .

    m := kj

    m : 0 < m : r.N = r.(N+m) .

    N k

    r.N = r.(N+k)

    i,r := 0,1 ; do i = N i,r := i+1 , (10r) mod N od

    { r = r.N } ;

    k , r := 1 , r mod N ;

    do r = r k,r := k+1 , (10r ) mod N od

    r = r.i

    r = r.N r = r.(N+k) j : 0 < j < k : r.N = r.(N+j) .

    r = r k

    r 1N

    2

  • 7/31/2019 Algorithm Design Exercises

    22/36

    8 m+n

    [m < n 0 < m 0 < n M gcd N = m gcd n

    0 < m 0 < nm M gcd N = m gcd (nm)

    [n < m 0 < m 0 < n M gcd N = m gcd n

    0 < mn 0 < n M gcd N = (mn) gcd n

    [0 < m 0 < n M gcd N = m gcd n (m < n n < m)

    M gcd N = m

    [m gcd n = m gcd (nm)]

    [m gcd m = m] .

    (m < n n < m) m = n

    p

    p \ (m gcd (nm))

    = { }

    p\m p\(nm)

    = { }

    k :: m = kp k :: nm = kp

    = { }

    k :: m = kp j :: nm = jp

    = { }

    k :: m = kp j :: n kp = jp= { j := jk }

    k :: m = kp j :: n = jp

    = { }

  • 7/31/2019 Algorithm Design Exercises

    23/36

    k :: m = kp k :: n = kp

    = { }

    p\m p\n

    = { }

    p \ (m gcd n) .

    m gcd (nm) p m gcd n p

    [m gcd n = m gcd (nm)] .

    p

    p \ (m gcd m)

    = { }

    p\m p\m= { }

    p\m .

    m gcd m p m p

    [m gcd m = m] .

    c , k :: k \ (cM) k \ (cN) k \ (c m) k \ (cn)

    gcd

    k :: k \ M k \ N k \ (M gcd N)

    m n M gcd N

    c , k :: k \ (cM) k \ (cN) k \ (c (M gcd N))

    cM gcd cN x

    k :: k \ (cM) k \ (cN) k \ x

    c (M gcd N) cM gcd cN

    k \ (c m) k \ (cn) k \ (c (mn)) k \ (cn)

    k c m n n < m

  • 7/31/2019 Algorithm Design Exercises

    24/36

    mq +np = 2MN .

    a b c d

    amp +bmq+ cnp + dnq

    amp + bmq+ cnp + dnq

    = a(mn)(p+q) +b(mn)q+ cn(p+q) +dnq

    a d 0 b c 1

    amp + bmq+ cnp + dnq

    = amp +bm(p+q) + c(nm)p +dn(p+q)

    a d 0 b c 1m = n = M gcd N

    true

    = { m = n = M gcd N }

    (M gcd N) (p+q) = 2MN

    = { (m lcm n) (m gcd n) = mn }

    (M gcd N) (p+q) = 2 (M lcm N) (M gcd N)

    { }

    (p+q)2 = M lcm N .

    p q M

    N

    2

    10

    len.0

    = { len } h,i : asc.(i,h,0) : h

    = { asc }

    h,i : 0 i i+h 0 j : i j < i+h : a[i] a[j] : h

  • 7/31/2019 Algorithm Design Exercises

    25/36

    = { 0 i i+h 0 0 = i = h

    }

    h,i : 0 = i = h j : 0 j < 0 : a[i] a[j] : h

    = { }

    h,i : 0 = i = h: h

    = { }

    0 .

    len.(k+1)

    = { len }

    h,i : asc.(i , h , k+1) : h

    = { asc }

    h,i : 0 i i+h k+1 j : i j < i+h : a[i] a[j] : h

    = { i+h= k+1

    len }

    len.k h,i : 0 i i+h= k+1 j : i j < i+h : a[i] a[j] : h

    = { }

    len.k h : 0 k+1h k+1 j : k+1h j < k+1 : a[i] a[j] : h

    = { asc }

    len.k h : asc.(k+1h , h , k+1) : h .

    2

    11 j k

    N

    { 0 N i : 0 i < N : a[i] = a0[i] }

    j,k := 0 , N1{ Invariant:

    0 j < N 0 k < N j = N1k

    i : 0 i < j k i < N : a[i] = a0[N1i]

  • 7/31/2019 Algorithm Design Exercises

    26/36

    i : j i k : a[i] = a0[i]

    Bound function: kj }

    ; do j < k swap(j,k) ; j,k := j+1 , k1

    od

    { i : 0 i < N : a[i] = a0[N1i] }

    j k

    j k j k

    2

    12

    R (c, n) c

    n c

    n

    { 0 < M 0 < N }

    c,n,k := 0,AnyValue,0 ;

    { Invariant: c n B[0..k) }

    do k < N if c = 0 n = B[k] c := c+1

    2 c = 0 n = B[k] c := c1

    2 c = 0 c,n := 1,B[k]

    fi ;

    k := k+1

    od

    { c n B[0..N) }

    N2

    N2

    c

    n c

  • 7/31/2019 Algorithm Design Exercises

    27/36

    n

    2

    13 k

    0 k N V[k] = x count(x,k) 1

    e := e+1 V[k] = xcount(x,k) ke < e ke e

    V[k] = x ke = e ke e

    count(x,k) ke count(x,k) e ke e

    x V[k]

    if V[k] = x e := e+1

    2 V[k] = x ke < e skip

    2 V[k] = x ke = e x , e := V[k] , e+1

    fi

    inv

    count N V k e z

    [0 N 0 0 N 00 0 y : y = any : count(y,0) 00] .

    [(k < N) inv y :y = x : (count(y,k) > k/2)] .

    [ k < N inv V[k] = x

    0 k+1 N (k+1)(e+1) e+1

    y : y = x : count(y,k) (k+1)(e+1)

  • 7/31/2019 Algorithm Design Exercises

    28/36

    [ k < N inv V[k] = x ke < e

    0 k+1 N (k+1)e e

    y : y = x : count(y,k) (k+1)e

    [ k < N inv V[k] = x ke = e

    0 k+1 N (k+1)(e+1) e+1

    y : y = V[k] : count(y,k) (k+1)(e+1)

    k

    [Nk = K N(k+1) < K] .

    count

    [ 0 N

    0 N y : y = any : j : 0 j < 0 V[j] =y : 1 0

    y :y = any : j : 0 j < 0 V[j] =y : 1 0

    = { 0 j < 0 false }

    y :y = any : 0 0

    = { 0 0 true true }true

    [0 N 0 N true]

    true

    (k < N) inv { }

    k = N ke e y : y = x : count(y,k) ke

    = { }

  • 7/31/2019 Algorithm Design Exercises

    29/36

    k = N N/2 e y : y = x : count(y,N) Ne

    { }

    y : y = x : count(y,N) NN/2

    = { N = N/2+N/2 }

    y : y = x : count(y,N) N/2

    = { > }

    y : y = x : (count(y,N) > N/2)

    2

    14

    mex.k = n : i : 0 i < k : n = A[i] : n

    mex.0

    = { }

    n : i : 0 i < 0 : n = A[i] : n

    = { }

    n : false : n

    = { n }

    0 .

    { A }

    m,k,done := 0,0,false ;

    { Invariant: 0 k N m = mex.k (done m = mex.N)

    Bound function: k }

    do done k < N if m = A[k] m := m+1

    2 m < A[k] done := true2 m > A[k] skip

    fi ;

    k := k+1

  • 7/31/2019 Algorithm Design Exercises

    30/36

    od

    { m = mex.N }

    { 0 N }

    m,s,k := 0,0,0 ;

    { Invariant:

    0 m s k N m = mex.k

    i : 0 i < s : a[i] < m

    i : s i < k : a[i] > m

    Bound function: (m, k) }

    do k < N if m = A[k] swap(s,k) ; m,s,k := m+1 , s+1 , s+1

    2 m < A[k] k := k+1

    2 m > A[k] swap(s,k) ; s,k := s+1 , k+1

    fi

    od

    { m = mex.N }

    2

    15

    a[m..n) a

    m n count.i count0.i

    a[i] a0[i]

    count.i = Nj : i j < M : a[i] < a[j] ,

    count0.i = Nj : i j < M :a0[i] < a0[j] ,

    permutation.a[k..M) ,

    i : k i < M : count.i = count0.i ,

    i : 0 i < k : a[i] = count0.i .

  • 7/31/2019 Algorithm Design Exercises

    31/36

    k := 0

    k = M

    a[k] = count.k .

    k 1

    k

    i 0 i k

    k < i < M a[i] < a[k] k < i < M a[i] > a[k] k < i < M

    a[i] = a[k] a[i] 1 i

    k < i < M a[i] > a[k]

    2 1

    2 1

    { 0 M j : 0 j < M : a[j] = a0[j]

    permutation.a[0..M) }

    k := 0

    { Invariant:

    0 k M

    Bound function: Mk }

  • 7/31/2019 Algorithm Design Exercises

    32/36

    ; do k = M k := k+1

    ; innerloop

    od

    { j : 0 j < M : a[j] = count0.j }

    innerloop

    j := k+1

    ; do j < M if a[j] < a[k] skip

    2 a[j] > a[k] a[j] := a[j]1

    fi

    ; j := j+1

    od

    2

    18 g

    g.m =

    bm2

    a

    1

    2

    .

    g.m m 0 1 2

    g.(m+1) > g.m +1 .

    { true }

    m,n := 0,0 ;

    { Invariant: n = g.m }

    do g.(m+1) g.m +1 plot.(m,n) ;

    m,n := m+1 , g .(m+1)od .

    g g.(m+1) g.m

  • 7/31/2019 Algorithm Design Exercises

    33/36

    g.(m+1) g.m

    = { n = g.m

    g.m n

    g }b(

    m+1)

    2

    a 1

    2

    n

    = { }b(m+1)2

    a

    1

    2 n

    = { }

    0 an b(m+1)2 + a

    2

    = { h = an b(m+1)2 + a

    2 }

    0 h .

    g.(m+1) g.m +1

    g.(m+1) g.m + 1

    = { }b(m+1)2

    a

    1

    2 n+1

    = { }

    0 an b(m+1)2 + 3a

    2

    = { h = an b(m+1)2 + a2

    }

    0 h+a .

    h

    { true }

    m , n , h := 0 , 0 , a

    2 b ;

    { Invariant:

    n = g.m

    h = an b(m+1)2 + a

    2

    (a h < 0 g.(m+1) g.m = 1) }

    do 0 h+a plot.(m,n) ;

  • 7/31/2019 Algorithm Design Exercises

    34/36

    if 0 h { g.(m+1) = g.m }

    skip

    2 (0 h) { g.(m+1) = g.m +1 }

    n,h := n+1 , p

    fi ;

    m,h := m+1 , q

    od .

    p q p q

    h = an b(m+1)2 + a

    2 .

    k

    { h = k b(m+1)2 }

    m,h := m+1 , h b(2m+ 3)

    { h = k b(m+1)2 } .

    k

    { h = an + k }

    n,h := n+1 , h+a

    { h = an + k } .

    p q

    { true }

    m , n , h := 0 , 0 , a

    2 b ;

    { Invariant:

    n = g.m

    h = an b(m+1)2 + a

    2

    ((2a) h < 0 g.(m+1) g.m = 1) }do 0 h+a plot.(m,n) ;

    if 0 h { g.(m+1) = g.m }

    skip

  • 7/31/2019 Algorithm Design Exercises

    35/36

    2 (0 h) { g.(m+1) = g.m +1 }

    n,h := n+1 , h+a

    fi ;

    m,h := m+1 , h b(2m +3)

    od .

    n

    m

    f

    f.n =

    an

    b

    1

    2

    .

    { n = g.m }

    m := f.n ;

    { Invariant: m = f.n }

    do true plot.(m,n) ;

    m,n := f.(n+1) , n+1

    od .

    f.(n+1) f.n

    f.(n+1) f.n

    = { m = f.n

    m

    g }a(n+1)

    b

    1

    2

    m

    = { }a(n+1)

    b

    1

    2 m

    = { }a(n+1) b (m2+ m+

    1

    4)

    = { }

    0 b (m2+ m) a(n+1) b

    4 .

  • 7/31/2019 Algorithm Design Exercises

    36/36

    h

    m

    { n = g.m }

    m := f.n ;

    h := b (m2+ m) a(n+1) b

    4 ;

    { Invariant:

    m = f.n

    h = b (m2+ m) a(n+1) b

    4

    (f.(n+1) f.n 0 h) }

    do true plot.(m,n) ;

    if 0 h { f.(n+1) = f.n }

    skip

    2 (0 h) { f.(n+1) = f.n +1 }

    m,h := m+1 , h+ 2b(m+1)

    fi ;

    n,h := n+1 , h a

    od .

    bm b m

    h

    2