Skip to content

Latest commit

 

History

History
77 lines (57 loc) · 2.06 KB

chapitre_09.md

File metadata and controls

77 lines (57 loc) · 2.06 KB

Chapitre 9 - Medians and Order Statistics

  • def: statique d'ordre (statistic order) est le i-ème plus petit élément
  • def: minimum i=1, max i=n
  • def: mediane est le point central, lower median si pair

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

  • input: ensemble A d'elements distincts, 1 <= i <= n
  • output: element x de A, plus large que exactement i-1 autres elements de A

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

plan:

  • 9.1: selection de min et max
  • 9.2: algo en O(n) en temp attendu
  • 9.3: algo en O(n) dans le pire des cas

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