• Aucun résultat trouvé

Déclarations complexes Règle d'or : les opérateurs [] et () ont priorité sur l'opérateur *. Exemples

N/A
N/A
Protected

Academic year: 2022

Partager "Déclarations complexes Règle d'or : les opérateurs [] et () ont priorité sur l'opérateur *. Exemples"

Copied!
14
0
0

Texte intégral

(1)

Déclarations complexes

Règle d'or : les opérateurs [] et () ont priorité sur l'opérateur *.

Exemples

int *t[]; Tableau de pointeurs sur entier.

int *t(); Fonction retournant un pointeur sur entier.

int *t(int *s[]); Fonction t prenant comme argument un tableau s de pointeurs sur entier et retournant un pointeur sur entier.

int (*t)[5]; Pointeur sur tableau de 5 entiers.

void (*f)(); Pointeur sur fonction retournant void.

(2)

Exercices

char (*(*a())[])();

char (*(*b[3])())[5];

double *(*(*c[4])(int))[2];

(3)

Solutions

char (*(*a())[])();

Fonction retournant un pointeur sur un tableau de pointeurs sur des fonctions retournant le type char.

char (*(*b[3])())[5];

Tableau de 3 pointeurs sur des fonctions retournant un pointeur sur un tableau de 5 char.

double *(*(*c[4])(int))[2];

Tableau de 4 pointeurs sur des fonctions ayant un argument de type int et retournant un pointeur sur un tableau de 2 pointeurs sur le type double.

(4)

/* Version 1 : tableaux */

void copie(char *s, char *t);

{ int i = 0;

while ((s[i] = t[i]) != '\0') } i++;

Recopie d'une chaîne

/* Version 2 : pointeurs */

void copie(char *s, char *t);

{ while ((*s = *t) != '\0') s++;t++;

}

Affectation!

(5)

Recopie d'une chaîne

/* Version 3 : pointeurs */

void copie(char *s, char *t);

{ while (*s++ = *t++);

}

(6)

Algorithme glouton

Location d'une voiture de façon à satisfaire le maximum de clients.

Soit E l'ensemble des clients. Pour chaque client c, on note d(c) le début de la location et f(c) la fin.

Problème. Trouver un sous- ensemble F de E, de cardinal maximal, tel que, pour c1, c2 ∈ F,

d(c1) ≤ d(c2) ⇒ f(c1) ≤ d(c2) c1 c2 c3 c4 c5 c6

d 2 5 3 7 1 6

f 8 7 4 8 5 7

(7)

c1 c2 c3 c4 c5 c6

d 2 5 3 7 1 6

f 8 7 4 8 5 7

Algorithme glouton (suite)

(2) Initialiser : F = ∅

(3) Pour i = 1 à n, ajouter ei à F si c3 c5 c2 c6 c1 c4

(1) Classer les éléments suivant f(c)

d(ei) ≥ max { f(x) | x ∈ F } F = { c3, c2, c4 }

e1 e2 e3 e4 e5 e6

(8)

Démonstration

Soit {x1, ..., xp} la solution obtenue par l'algorithme glouton.

Soit {y1, ..., yq} une solution optimale, avec q ≥ p et f(y1) ≤ f(y2) ≤ ... ≤ f(yq). Montrons que p

= q.

Si x1 = y1, ..., xk-1 = yk-1 et xk ≠ yk, on a par construction f(xk) ≤ f(yk).

Donc la solution {x1, ..., xk, yk+1, ..., yq} est aussi optimale. Par récurrence, {x1, ..., xp, yp+1, ..., yq} est optimale est donc p = q.

(9)

Evaluation de polynômes

Schéma de Horner

p(x) = x4 + 2x3 - x2 + 3x + 1

p(x) = x(x(x(x + 2) - 1) + 3) + 1

v := p[degre];

for i:= degre - 1 downto 0 do v := x * v + p[i];

Complexité : n - 1 multiplications et n additions

(10)

Multiplication de polynômes

p = (1 + X + 3X2 - 4X3) q = (1 + 2X - 5X2- 3X3) r = (1 + X)(1 + 2X)

t = (3 - 4X)(-5 -3X)

s = [(1 + X) + (3 - 4X)][(1 + 2X) + (-5 -3X)] = (4 - 3X)(-4 -X)

Principe :

si p = p1 + p2Xn et q = q1 + q2Xn alors pq = r + (s - r - t)Xn + tX2n avec r = p1q1, t = p2q2 et

s = (p1 + p2)(q1 + q2)

(11)

Multiplication de polynômes

Thm Deux polynômes de degré n peuvent être multipliés en O(n1,58) multiplications.

Preuve Diviser pour régner donne un = 3un/2 + 1 u(1) = 1

d'où u(2n) = 3n et u(n) ≈ nlog 3 En fait, il existe un bien meilleur algorithme en O(n log n)

(12)

Sous-mot commun

Un mot est une suite finie de symboles (ou lettres) pris dans un ensemble fini (l' alphabet). Si u = a1 ... an est un mot, où a1, ..., an sont des lettres, n est la longueur de u.

Un sous-mot de u est un mot de la forme ai

1

... ai

k.

Exemple : abaa est un sous mot de babcabba.

Problème : Etant donné deux mots, trouver un sous-mot commun de longueur maximale.

Etude du génome

(13)

Soit x = c1 ... ck un sous-mot maximal de a1 ... ai et b1 ... bj.

(1) Si ai = bj, alors ck = ai = bj et c1

... ck-1 est un sous mot maximal de a1 ... ai-1 et b1 ... bj-1.

(2) Si ai ≠ bj et si ck ≠ ai, alors x est un sous mot maximal de a1... ai-1 et b1 ... bj.

(3) Si ai ≠ bj et si ck ≠ bj, alors x est un sous mot maximal de a1 ... ai et b1 ... bj-1.

Soit L(i, j) la longueur de x. On a L(i, j) =

{

1 + L(i-1, j-1) si ai = bj

max(L(i, j-1), L(i-1, j)) sinon

(14)

0 0 0 0 0 0 0 a

b c b d a b

b d c a b a

0 1 2 2 3 4 4 0 1 2 2 2 3 3 0 1 1 2 2 2 2 0 1 1 2 2 3 3 0 1 2 2 3 3 4 0 0 0 0 1 1 1 0 1 1 1 1 2 2

Sous-mot commun

Références

Documents relatifs

- certaines des fenêtres qui sont utilisées pour les répétitions successives de la séquence des étapes /6/ et /7/ peuvent être déterminées par l’opérateur, et pour chaque

L’exemple suivant montre la déclaration d’une variable de type pointeur de fonction qui doit retourné un entier nommé pFonction1 et d’une fonction retournant

Cette aire est compt´ee avec un signe positif ou n´egatif suivant sa position par rapport `a l’axe des abscisses.. Th´ eor`

Dispositif de recouvrement (1) d’un compartiment à bagages de véhicule automobile, ledit compartiment étant délimité en partie avant par au moins un dossier (3) de siège

Ecrivez la fonction void commande(bool C[], bool E[],bool P[], bool D[], int n) qui remplit le tableau C de telle façon que chaque élément C[i] soit égal à true si le client i a

[0021] L’invention a également pour objet l’application des compositions ou lyophilisats susmentionnés, en tant qu’adjuvants effecteurs pour la préparation de milieux de culture

Conducteur électrique (2) d’axe longitudinal (X) pour poste électrique sous enveloppe métallique remplie d’un gaz diélectrique, comportant une enveloppe (4) de forme cylindrique

- On peut ainsi assigner une valeur au pointeur de fonction, le passer à une fonction, le retourner d’une fonction et, finalement le ranger dans un