TD4 : Tri rapide, Diviser pour régner

Énoncé

TD 4

EX 2

1)

Tri rapide en place :

def quick_sort(L, min = 0, max= -1):
  assert L
  if max >= min:
    if max == -1:
      max = len(L)-1
    p = L[min]
    p, L[max] = L[max], p
    i = 0
    for j in range(max):
      if L[j] <= p:
        L[j], L[i] = L[i], L[j]
        i+=1
    L[i+1], p = p, L[i+1]
    quick_sort(L, min, i)
    quick_sort(L, i+2, max)

2) La proba que le premier élément (pivot) soit le k-ième plus petit élément du tableau vaut 1/n T(n)=1kn1n(T(k)+T(nk)+n1)=1n1kn(T(k)+T(nk))+n1=2n1knT(k)+n1nT(n)=21knT(k)+n(n1)nT(n)(n1)T(n1)=2(n1)+2T(n)(n2)T(n)2(n1)=(n1)T(n1)T(n)n12n1=T(n1)n2division par (n2)(n1)T(n)n12n1=T(n1)n2T(n)n1T(n1)n2=2n1T(n)n12log(n1)

Or,

T(n)=𝜎𝕾nP(𝜎)T(𝜎)=1in𝜎iP(𝜎)T(𝜎)où 𝜎i est une permutation de 1er élément i=1in𝜎iP(𝜎)=P(i pivot)P(𝜎|i pivot)T(𝜎)=1in𝜎i1nP(𝜎i|i pivot)T(𝜎i)=1n1in𝜎iP(𝜎i|i pivot)T(𝜎i)=?T(i)+T(ni)+n1

EX 3

1) Algo naïf en O(n2) temporel, O(1) spatial.

2) En dehors de cette bande : un cercle de gauche et un cercle de droite ne peuvent pas s’intersecter.

3) pn

4) On regarde les points par ordre des y croissants : on prend le point p ayant le ymin

Leave a comment