Compendium [G.Marciani] - Ingegneria degli Algoritmi

Embed Size (px)

Citation preview

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    1/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    2/42

    P

    pi

    P

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    3/42

    Tn

    Tn

    g(n) O(f(n)) g(n) f(n)

    O(f(n)) = {g(n) : c >0 n0 0|g(n) cf(n)n n0}

    g(n) (f(n)) g(n) f(n)

    (f(n)) = {g(n) : c > 0 n0 0|g(n) cf(n)n n0}

    g(n) (f(n)) g(n) f(n)

    (f(n)) = {g(n) : c1, c2> 0 n0 0|c1f(n) g(n) c2f(n)n n0}

    A

    O(f(n)) (f(n)) (f(n)) n r r A n r(n) = O(f(n)) r(n) = (f(n)) r(n) = (f(n)) P O(f(n)) (f(n)) (f(n)) r A P O(f(n)) (f(n)) (f(n)) A P (f(n))

    r

    O(f(n))

    g(n) (f(n)) g(n) O(f(n)) g(n) (f(n))

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    4/42

    log2n n

    |I|= O(log n)

    T(n)

    |I|

    c log n |I| c log n

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    5/42

    Tw(n) = max|I|,n{tempo(I)}

    Tb(n) = min|I|,n{tempo(I)}

    I n P{I}

    Tm(n) =

    {P{I} tempo(I)}

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    6/42

    n

    i

    nbi

    i f

    nbi

    logbn

    i ai

    T(n) =

    logb

    ni=0

    ai f

    nbi

    n

    a

    n/b f(n)

    n

    bi = 1

    n = bi

    i= logbn

    a

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    7/42

    T(n) =

    aT

    nb

    +f(n) se n >1

    1 se n= 1

    T(n) = (nlogba) f(n) = O(nlogba) > 0 nlogba

    f(n)

    T(n) = (nlogba log n) f(n) = O(nlogba)

    T(n) = (f(n)) f(n) = (nlogba+) > 0af

    nb

    cf(n)c 0

    n

    (n) Tamm(n) = O(1)

    M(n) = (n)

    Tamm(n) = O(1) O(n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    11/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    12/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    13/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    14/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    15/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    16/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    17/42

    T(N,A ,r) N A NN

    u

    v=r (u, v) A

    v u (u, v) A

    u {v|v= figlio(u)}

    r T(N,A ,r) padre(r)

    u

    u

    v {w|padre(w) =padre(v)}

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    18/42

    d

    P n M(n) = O(n) P[v] = u (u, v) A v = r =P[v] = NULL

    Tw(n) =O(1)

    Tw(n) = O(n)

    P (n+1) P[0] =NULL P[1] =r P[(d (p 1) + i)] =f iglioi(v) v p d

    d n P (n + 1)

    v Tw(n) = O(1) v Tw(n) = O(d) v v Tb(n) = O(1)

    Tw(n) = O(|P| d)

    n

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    19/42

    M(n) = O(n)

    NULL

    Tw(n) = O(1)

    M(n) =O(n) d

    M(n) = O(n) d

    NULL

    S

    S=

    S

    Tw(n) = O(n)

    S

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    20/42

    S

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    21/42

    n

    Cwt(n) = (n log n)

    T nT

    T n n! n

    f log2f

    HT(n) = (log n!) (n log n)

    Cw(n) = (HT) = (n log n)

    Cm(n) = (HT)

    T

    n T

    n!

    2n

    ne

    n n! 2n

    ne

    n

    1 + 112n 1

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    22/42

    Cw(n) = O(n2)

    n

    2

    = n(n1)2

    Cw(n) = (n2)

    Cw(n) =

    ici

    ci

    i

    ci = n i 1 i [0, n 2]

    C(n) =

    n2i=0

    (n i 1) =n1t=1

    t= (n 1)(n 1 + 1)

    2 = (n2)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    23/42

    A n A[0 : n 1]

    i

    A[i : n1]

    A[i] A A[0 :i]

    A[i +1 :] i= n 2

    Cw(n) = (n2)

    Cw(n) =

    iterazioni ci

    ci

    i

    ci = n + 1 i [1, n 1]

    Cw(n) =

    n1i=1

    (i+ 1) = (n 1) +n1t=1

    t= (n 1)(n 1 + 1)

    2 = (n2)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    24/42

    A n A[0 : n 1] i S[0 : i1] A[pos] A[i] A[i] A[pos 1] A[pos] A[pos:] A

    A[0 :i] A[i+ 1 :n 1]

    i= n 1

    Cw(n) = (n2)

    A[0]...[n 1]n O(n)

    A

    i esima A[0 : n i 1] A[ni1] O(ni2)

    i esima A[n i 1 : n 1]

    O(n 1)

    Cw(n) =

    ici

    ci

    i

    ci = n i i [0, n 2]

    C(n) =

    n2i=0

    (n i) = n2 n

    2 = (n2)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    25/42

    S

    L

    L

    v chiave(v)

    P P[1] i sin(i) = P[2i] des(i) = P[2i+ 1]

    n (log n)

    n O(n) O(log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    26/42

    Cw(n) = (n log n)

    (n + 1) A[0]...[n]

    (n 1)

    A[1]

    A[c] A[1] (c 1)

    Cw(n) = O (t1+ nt2) t1 t2

    n

    k

    t2 = O(h) = O(log n)

    h= O(log n)

    t1 = C1(n) = 2C1n

    1

    2

    +t2 2C1 n

    2

    +O(log n) = (n)

    C(n) = O(n+n log n) = (n log n)

    k 1 n

    n = 2k1 1< n

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    27/42

    Cw(n) = (n log n)

    Cw(n) =t1+ 2Cn2

    t1

    t1 = O(n)

    l1 l2 (l1+ l2) = n

    (n 1)

    Cw(n) = O(n) + 2Cwn

    2

    = (n log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    28/42

    (l1 +l2) = n l1 l2 l1 = l2 =

    n2

    li = 1

    l1 l2 (l1 + l2)

    Cw(n) = (n2)

    Ce(n) = O(n log n)

    n l1 = n2 l2 =

    n2

    Cdw(n) = t1 + Cdw(a) + C

    dw(b) t1

    a b

    a = 0 b= n

    1

    t1 = (n 1)

    Cdw(n) = n 1 + Cdw(n 1) ni=0

    in= O(n2)

    a Cre (n) =n1

    a=0 p (t1 + Cre (a) + Cre (na 1)) p [0, n 1] t1

    p= 1

    n

    t1 = (n 1)Cre (a) =C

    re (n a 1)

    Cre (n) =

    n1a=0

    1

    n (n 1 + 2Cre (a)) 2n log n= O(n log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    29/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    30/42

    n l1 l2 x

    i A[i: inf 1] x A[sup+ 1 :f]> x

    n [0, k 1]

    Tw(n) = O(n + k) k n

    A n

    A[0 :n1]

    Y k A

    Tw(n) = t1 + t2 t1

    k

    t2 n

    t1 = O(k)

    t2 = O(n)

    Tw(n) = O(n+k)

    O(n) Tw(n) = O(n2)

    n n

    k = O(n)

    [0, k 1] k = O(nc) = (n)

    n

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    31/42

    i A[i] Y[A[i]] j S[j : Y[A[i]] 1] = i

    n [1, k] Tw(n) = O(n+k)

    A n A[0 : n 1] [1, k] Y k [1, k] A A

    n b =

    (n)

    [1, k]

    k = O(nm

    )

    Tw(n) =O

    n

    1 + log klog n

    n

    Y[i]

    Tw(n) =O(n+k)

    Tw(n) = t1 + ct2 t1 c [1, k] b t2 k= O(nm) m >1 b= (n)

    t1 = O(n)

    n

    c= O(logbk)

    [1, k] b k b

    t2 = O(n)

    O(n+ k) n [1, k] b [0, b 1] O(n+b) b= (n)

    Tw(n) =O(n)+O(lognk)O(n) =O(n(1+lognk)) = O

    n

    1 +

    logck

    logcn

    = O

    n

    1 +

    log k

    log n

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    32/42

    A n A[0 : n 1] [1, k] k= O(nm) A b t t b Y b Y[0 : b 1]

    Y A A[0 : n 1] t

    i (i1)

    i

    i

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    33/42

    n k k [1, n] Z

    n2 n

    O(n log n) k= n2

    Tw(n) =O(n+k log n) k1

    n

    A[0]...[n 1]

    (k1) (k1) k k

    Tw(n) =O(t1+(k1)t2+t3) t1 t2 (k 1) t3

    t1 = O(n)

    O(n)

    t2 = O(log n)

    O(1) +O(1) O(log n) = O(log n)

    t3 = O(1)

    k 1

    k

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    34/42

    Tw(n) = O(n2) Te(n) = O(n)

    k

    5

    Tw(n) = O(t1) + T(n1) t1 n1

    t1 = O(n)

    O(n)

    n1 = (n 1)

    Tw(n) =O(n) + T(n 1) T(n) = O(n2)

    Te(n) = t1+

    i=|partizionamento|PTw(i) t1 P

    i

    t1 = n 1

    (n 1)

    P = 1n2

    = 2

    n

    i n2

    i n 1 n2

    i

    P = 1n2

    Te(n) = n 1 +n1i=n

    2

    2

    n Tw(i)

    Te(n) 4n Te(n) = O(n)

    k

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    35/42

    Tw(n) = O(n)

    5 k

    T(n) = t1+ T(n1) + T(n2) t1 5 n1 n2

    t1 6n

    5=

    6n

    5 + 1 =

    11n

    5

    6

    n5

    n1 = n

    5

    n5

    n2 = 7n

    10 + 3

    12n5= n

    10

    n10

    1 3

    n2 = n 3

    n

    10 1

    =

    7n

    10 + 3

    T(n) = 11n

    5 +T

    n

    5

    +T

    7n

    10 + 3

    T(n) 22n= O(n)

    T(n) (cn 4c)

    T(n) 11n5

    +cn

    5 + 1

    4c+c

    7n

    10 + 3

    4c=

    11

    5 +

    9c

    10

    n 4c

    11

    5 +

    9c

    10

    n 4c (cn 4c) c 22

    T(n) 22n T(n) = O(n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    36/42

    v elem(v)

    chiave(v)

    chiavi(sotto albero sinistro(v)) chiave(v)

    chiavi(sotto albero destro(v)) chiave(v)

    T(h) = O(h) v v Tsin(v) Tdes(v)

    S

    T(h) = O(h)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    37/42

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    38/42

    c S

    S = Tsin(sin(c))

    S = Tdes(des(c))

    S = Tdes(sin(c))

    S= Tsin(des(c))

    S

    S

    n

    h(n) = O(log n)

    T(n) = O(log n)

    T(n) =O(log n)

    v

    (v) 2

    h(n) = O(log n)

    Tfib h

    h(n) = (log n) nh = 1 + nh1+ nh2 T h n Tfib

    h nfib

    h(n) = h(nfib) = (log n)

    nfib n

    h(n) = O(log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    39/42

    T(n) = O(log n)

    v (v)2

    n T(n) = O(log n)

    v

    S[v] = max(Tsin(v))

    M[v] = max(Tcent(v)) grad(v) = 3

    n f h

    2h+1 1 n (3h+1 1)

    2

    2h f3h

    h(n) = (log n)

    T(n) = O(1) grad(v) > 3 w v v v w S M v w

    v

    T(n) = O(1) grad(v) < 2 l v grad(l) = 3 l v grad(l) = 2 v l v S M v l

    T(n) = (log n) k S[v] Tsin(v) S[v] k M[v] Tcent(v) Tdes(v)

    T(n) = (log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    40/42

    T(n) = O(log n) v u k S[u] M[u] v u v S M u u v u u

    T(n) =O(log n) v u v v S M u u

    u

    v

    u

    u

    u

    u

    n

    T(n) = O(log n)

    t 2

    kr 1 kr 2t 1

    kv t 1 kv 2t 1

    kv+ 1

    ci i v chiavej v ci chiavej ci+1 i [1, kv+ 1], j [1, kv]

    (2t 1) (t 1)

    2t t2

    T(n) = O(log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    41/42

    T(n) = (t) kv 2t t 1 t t

    T(n) = (t) kv t 2

    T(n) = O(log n) v kj k k kj v kj1 kj v

    T(n) = O(t logtn)

    v u u v u u

    v

    u

    u

    T(n) = O(t logtn) u v

    v

    u

    u

    u

    T(n) = O(t1

    t2) t1

    t2

    t1 = O(log t)

    (t)

    t2 = O(logtn)

    (t)

    h logtn+ 1

    2 h= O(logtn)

    T(n) = O(logt logtn)

    logab = logcb

    logc

    a

    T(n) = O(log n)

    T(n) = O(log n)

  • 8/12/2019 Compendium [G.Marciani] - Ingegneria degli Algoritmi

    42/42

    u u

    t n T(n) =O(t logtn) T(n) = O(log n) T(n) = O(logtn)