Tris

Exemple d’implantation de ces algorithmes ici

Complexité quadratique (Θ(n2)\Theta(n^{2}))

Tri à bulle

f(n)=Θ(n2)f(n) = \Theta(n^{2}) si fnn2f\frac{n}{n^{2}} est bornée

Taille nn :
k=1nk=n(n+1)2=(n1)+(n2)++1\sum\limits_{k=1}^{n}k=\frac{n(n+1)}{2}=(n-1)+(n-2)+\dots+1

Tri par insertion

Complexité Θ(nlog(n))\Theta(nlog(n))

1+2++(n1)=n(n+1)21+2+\dots+(n-1)=\frac{n(n+1)}{2}

Tri rapide et tri fusion

nn base10 => binaire
_ _ _ _ _ _ n2\frac{n}{2}
_ _ _ _ _ 0 n4\frac{n}{4} (ou 1 à la place de 0)

nn sur kk bits
2k1n2k2^{k-1} \leq n \leq 2^{k}
ab=eln(a)b e(h1)ln(2)neln(2)k (k1)ln(2)ln(n)ln(2)k (k1)<ln(n)ln(2)k\begin{aligned}a^{b} =& e^{ln(a)b} \\\ &e^{(h-1)ln(2)} \leq n \leq e^{ln(2)k} \\\ &(k-1)ln(2) \leq ln(n) \leq ln(2)k \\\ &(k-1) < \frac{ln(n)}{ln(2)} \leq k \end{aligned}

Suite de Fibonacci

Méthode de récursivité lourde Θ(2n)\approx \Theta(2^{n})

Soit CnC_{n} kk nombre d’opérations pour calculer F(n)F(n)
Cn=(1+)Cn1+Cn2C_{n} = (1 +) C_{n-1} + C_{n-2}, la complexité c’est grosso-modo Fibonacci + 1, donc
CnF(n)C_{n} \simeq F(n)
Donc, F(n)=15((1+52)n+(152)n)F(n) = \frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^{n} + (\frac{1-\sqrt{5}}{2})^{n}) : ça fonctionne jusqu’à une certaines valeurs et après ça ne fonctionne plus.

Calcul matricielle

(11 11)\begin{pmatrix} 1 & 1 \\\ 1 & 1 \end{pmatrix} avec (12 34)\begin{pmatrix} 1 & 2 \\\ 3 & 4 \end{pmatrix} donne : (33 77)\begin{pmatrix} 3 & 3 \\\ 7 & 7 \end{pmatrix}

La matrice est cachée dans ce système :
[F(n)=F(n1)+F(n2) F(n1)=F(n1)\left[\begin{array}{ll} F(n) = F(n-1) + F(n-2) \\\ F(n-1) = F(n-1) \end{array}\right.

Donnant :
F(n)= F(n1)=(11 10) avec (F(n1) F(n2)) donne (F(n1)F(n2) F(n1)) \begin{array}{ll} \quad\quad F(n) = \\\ F(n-1) = \end{array} \begin{pmatrix} 1 & 1 \\\ 1 & 0 \end{pmatrix} \text{ avec } \begin{pmatrix} F(n-1) \\\ F(n-2) \end{pmatrix} \text{ donne } \begin{pmatrix} F(n-1) & F(n-2) \\\ F(n-1) \end{pmatrix}

Exponentiation rapide

ana^{n} puissance rapide

si (n == 1)
retourne a
sinon
si n % 2 == 0
x = puissance_rapide(a, n / 2)
retourne x * x
sinon
x = puissance_rapide(a, n / 2)
retourne a * x * x

ana^{n} AnA^{n} puissance rapide

si (n == 1)
retourne A
sinon
si n % 2 == 0
x = puissance_rapide(A, n / 2)
retourne multiplication(x, x)
sinon
x = puissance_rapide(a, n / 2)
retourne a * x * x

Triangle de Pascal (avec coefficient binomiaux) :
(n k)=(n1 k1)+(n1 k) \begin{pmatrix} n \\\ k \end{pmatrix} = \begin{pmatrix} n - 1 \\\ k - 1 \end{pmatrix} + \begin{pmatrix} n - 1 \\\ k \end{pmatrix}

nkn^{k} 1 2 3 4 5
1 1
2 1 1
3 1 2 1
4 1 3 3 1
5 1 4 6 4 1