0% ont trouvé ce document utile (0 vote)
26 vues3 pages

Corrigé Type

Transféré par

iinacer27
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues3 pages

Corrigé Type

Transféré par

iinacer27
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Corrigé Algorithmique examen

Exercice 1:
Renvoie l'indice du plus grand élément du tableau
int max-ind(int tab[], int taille)
{
// on considère que le plus grand élément est le premier
int i=0, indice_max=0;

while(i < taille) Échange deux éléments d'un tableau


{
if(tab[i] > tab[indice_max])
indice_max = i;
i++; void echanger(int tab[], int x, int y)
} {
int tmp;
return indice_max;
}
tmp = tab[x];
tab[x] = tab[y];
tab[y] = tmp;
}

Version itérative
void tri_selection(int tab[], int taille)
{
int indice_max;

// à chaque tour de boucle, on va déplacer le plus grand élément


// vers la fin du tableau, on diminue donc à chaque fois sa taille
// car le dernier élément est obligatoirement correctement
// placé (et n'a donc plus besoin d'être parcouru/déplacé)

for(; taille > 1 ; taille--) // tant qu'il reste des éléments non triés
{
indice_max = max-ind(tab, taille);

echanger(tab, taille-1, indice_max);


// on échange le dernier élément avec le plus grand
}
}

VERSION RÉCURSIVE
void tri_selection_recursif(int tab[], int taille)
{
// un tableau d'un seul élément ou moins n'a pas besoin d'être trié
if(taille <= 1)
return;

echanger(tab, taille-1, max-ind(tab, taille));


// on échange le dernier élément avec le plus grand

// on rappelle la fonction en diminuant la taille du tableau


// on peut faire cela car on est certain que le dernier élément
// est le plus grand (donc plus besoin de le déplacer)
return tri_selection_recursif(tab, taille-1);
}
COMLEXITE

À la première itération, on effectue n−1 comparaisons. À la ième itération, on effectue


donc n−i comparaisons (puisque à chaque itération on décrémente la taille du tableau).

En résumé, lorsque on utilise le tri par sélection :

- On effectue environ n(n−1)/2 comparaisons ;


- On effectue environ n échanges ;
- La complexité moyenne et dans le pire des cas est quadratique Ɵ(n2) .

Exercice 2:

/* Returns true if binary tree with root as root is height-balanced */

bool isBalanced(struct node* root)


{
int lh; /* for height of left subtree */
int rh; /* for height of right subtree */

/* If tree is empty then return true */


if (root == NULL)
return 1;

/* Get the height of left and right sub trees */


lh = height(root->left);
rh = height(root->right);

if (abs(lh - rh) <= 1 && isBalanced(root->left) && isBalanced(root->right))


return 1;

/* If we reach here then tree is not height-balanced */


return 0;
}

function AVL() returns true if the given tree is AVL otherwise false.
if(root == NULL)
return 1
leftheight = height(root->left)
rightheight = height(root->right)
if(abs(leftheight-rightheight) <= 1 && AVL(root->left) && AVL(root->right))
return 1
return 0
End

S  50,40,60,20,45,10,30,55,70,65,80
Exercice 3:

Liste fusion_iterative (Liste d1,Liste d2)


{
Liste d,p ;
if (d1 == NULL) return d2 ;
else if (d2 == NULL) return d1 ;
d = d1;
d1 = d1->nxt;
p=d;
while ((d1 != NULL) && (d2 !=NULL))
{
p->nxt = d2;
p = d2;
d2 = d2->nxt;
p->nxt = d1;
p = d1;
d1 = d1->nxt;
}
if (d1 == NULL) p->nxt = d2;
else p->nxt = d1;
return d;
}

Liste fusion_recursive(Liste L1, Liste L2)


{
if (L1 == NULL) return L2;
else if (L2 == NULL) return L1;
else {

recur = fusion_recursive (L1->next, L2->next);


result = L1; // one node from a
L1->next = L2; // one from b
L2->next = recur; // then the rest
return(result);
}

Vous aimerez peut-être aussi