View on GitHub

club-lecture

Chapitre 9 - Medians and Order Statistics

probleme : determiner l’ordre i-eme (selection problem)

Approche simple: O(n lg n), en triant l’ensemble, puis en prenant l’element i.

plan:

9.1 - Minimum and maximum

minimum de comparaison nécessaire = n-1

algo:

  min = A[1]
  pour chaque x de A:
    si min > x alors min = x
  return x

preuve: moins de comparaisons -> au moins 1 element n’est pas testé. Si c’est le mac, alors fails

Simultaneous minimum and maximum

ex: points 2D, besoin de trouver les limites

algo:

2 comparaison par element
  si n impaire -> prendre le premier element pour initialiser min et max. 3*|n/2| comparaisons
  si n pair -> faire une premiere comparaison pour determiner min et max. 3*|n-2)/2 comparaisons

9.2 - Selection in expected linear time

temps asymptotique: Theta(n). Par diviser-conquerir, basé sur quicksort

RANDOMIZED-SELECT sur 1 coté de la partition, ce qui fait passer de Theta(n lg n) à Theta(n).

RANDOMIZED-SELECT(A ,p, r, i)
  si p==r
    return A[p]
  q = RANDOMIZED-PARTITION(A ,p, r)
  k = q-p+1
  si i == k: // pivot est le resultat
    A[q]
  sinon si i < k:
    return RANDOMIZED-SELECT(A ,p, q-1, i)
  sinon:
    return RANDOMIZED-SELECT(A ,q+1, r, i-k)

Worst case: Theta(n^2), puisque partioning prend Theta(n)

demonstration via esperance statistique pour montrer que le cas moyen est en O(n)

9.3 Selection in worst-case linear tim

algo:

  partitionner en groups de 5 elements
  trouver la mediane de chaque groupe apres insertion sort
  utiliser SELECT pour trouver la mediane
  partitionner a partir de la mediane trouvée
  si i=k, retourner x. Sinon, utiliser SELECT recursivement