• Aucun résultat trouvé

Algorithmique avancée

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique avancée"

Copied!
16
0
0

Texte intégral

(1)

Algorithmique avancée

les structures de données

(2)

Pourquoi structurer les données ?

Exemple de programme écrit de façon débile :

manipulation de N (<=100) entiers, avec uniquement des variables

void main(int argc, char **argv) { int v1,v2,v3,v4,v5,...,v100;

int nbvar = argc - 1;

if (nbvar>100) exit(1);

if (nbvar >= 1) v1 = atoi(argv[1]);

if (nbvar >= 2) v2 = atoi(argv[2]);

...

if (nbvar >= 100) v100 = atoi(argv[101]);

// calcul somme int somme = 0;

if (nbvar >= 1) somme += v1;

if (nbvar >= 2) somme += v2;

...

if (nbvar >= 100) somme += v100;

printf("somme des %d valeurs : %d\n",nbvar,somme);

> 200 lignes

de code

(3)

Pourquoi structurer les données ?

Même exemple de programme écrit intelligemment :

manipulation de N (<=100) entiers, avec un tableau

void main(int argc, char **argv) { int i,somme;

int tabv[100];

int nbvar = argc - 1;

if (nbvar>100) exit(1);

somme = 0;

for(i=0;i<nbvar;i++) {

tabv[i] = atoi(argv[i+1]);

somme += tabv[i];

}

printf("somme des %d valeurs : %d\n",nbvar,somme);

}

6 lignes de

code

(4)

Les structures classiques : tableau

Traitements classiques :

– accès en lecture/écriture à la cellule d'indice i

ex : écriture de 15 et 6 en cellule 1 et 2 (Þ écrasement en 2)

– insertion/suppression de données à l'indice i

ex : suppression en cellule 2 (Þ décalage à gauche des données suivantes)

-5 15 6 4 2 7

-5 30 4 2 7

-5 15 4 2 7

-5 15 6 4 2 7

(5)

Les structures classiques : liste

Traitements classiques :

– accès en lecture/écriture à la cellule d'indice i

ex : écriture de 15 et 6 en indice 1 et 2 (Þ écrasement des données)

– insertion/suppression de données à l'indice i

ex : suppression en indice 2 (Þ suppression de la cellule, diminution taille liste)

-5 30 4 2 7

-5 15 6 2 7

-5 15 6 2 7

-5 15 2 7

(6)

Les structures classiques : liste

Exemple d'algorithme : récupérer la valeur à l'indice i dans une liste d'entiers.

# déclaration types

cellule : {entier val, cellule suiv}

liste : {cellule tete, entier taille}

fonction : get(liste l, entier indice) → entier # déclaration variables

i : entier c : cellule # traitement

si indice > l.taille-1 retourne vide

finsi

c ← l.tete

pour i de 0 à indice-1 c ← c.suiv

finpour retourne c

(7)

Les structures classiques : liste

Pour simplifier certains traitements, les listes peuvent avoir une structure plus complexe :

– doublement chaînée : chaque cellule référence la suivante ET la précédente

– circulaire : la dernière cellule référence la première

– doublement chaînée et circulaire

– ...

-5 30 4 2 7

-5 15 6 2 7

(8)

Les structures classiques : arbre

Exemple, arbre stockant des entiers, avec un nombre variable de fils pour chaque nœud

-5

30 4

2 8 -3 7

1 1

(9)

Les structures classiques : arbre

Illustration des mots-clés.

-5

30 4

2 8 -3 7

1 1

racine feuille

sous-arbre

une branche

(10)

Les structures classiques : graphe

Exemple, graphe stockant des entiers

30 -5

4

2

7

8

-3

1

1

(11)

Les structures classiques : graphe

Remarque : un graphe non-orienté, sans circuit et connexe constitue un arbre (dont il faut définir la racine).

30 -5

4

2

7

8

-3

1

1

(12)

Corrélation structure/traitements

Exemple 4 : plus court chemin entre deux villes

Organisation naturelle : graphe pondéré, orienté.

– arête = route directe entre deux villes,

– pondération = nombre de kilomètres.

structure de stockage suffisante : tableau 2D

0 0 15 23 0

0 0 50 0 0

15 50 0 31 9

23 0 31 0 13

0 0 9 13 0

0 = pas d'arête

structure de matrice symétrique

implémentation sous forme de

tableau 1D ou bien tableau de

tableaux.

(13)

Exemple : l'arbre binaire en Java

classe Node stockant un int

class Node {

public Node left;

public Node right;

public int value;

public Node(value) { this.value = value;

left = null;

right = null;

} }

(14)

Exemple : l'arbre binaire en Java

classe BinaryTree

class BinaryTree { public Node root;

public BinaryTree() { root = null;

}

public void printDepth(Node n) { if (left!= null) {

printDepth(n.left);

}

if (right!= null) {

printDepth(n.right);

}

System.out.println(value); // ou qqchose d'autre }

...

}

(15)

Exemple : le graphe orienté/pondéré

classes Edge (arête), Vertex (sommet)

class Edge {

public Vertex from;

public Vertex to;

public double weight;

public Edge(Vertex from, Vertex to, double weight) { ... } ...

}

class Vertex {

public Set<Edge> edgesTo;

public Set<Edge> edgesFrom;

int value;

...

}

(16)

Exemple : le graphe orienté/pondéré

classe GraphOP

class GraphOp {

public Set<Vertex> vertices;

public int nbVertices; // pas nécessaire mais utile public int nbEdges; // pas nécessaire mais utile public GraphOp() {

vertices = new HashSet<Vertex>();

nbVertices = 0; nbEdges = 0;

} ...

public connectVertices(Vertex src, Vertex dest, double weight) { Edge e = new Edge(src, dest, weight);

src.edgesTo.add(e);

dest.edgesFrom.add(e);

nbEdges += 1;

} ...

}

Références

Documents relatifs

An adjacent vertex-distinguishing k-edge coloring, or k-avd-coloring for short, of a graph G is a proper edge coloring of G using at most k colors such that, for every pair of

The 4-jet contributions from double- gluon bremsstrahlung, the triple-gluon vertex, and secondary quark-antiquark pair production then yield signi cantly di erent

Since adding edges to a graph only costs one color, it remains to prove that the disjoint union of 1-stars admits a union vertex-distinguishing edge coloring using the optimal number

To demonstrate the usefulness of the PUSH operator for solving MVWCP, we introduced two restart tabu search algorithms (ReTS-I and ReTS-II) which apply PUSH on different candidate

Accessibility of information contained in digital documents is a crucial challenge for visually impaired people, especially for blind users. Indeed, it is predicted that

Arbre couvrant de poids minimum ou MST (Minimum Spanning Tree, voir chapitre IV) des profils MLST de 4,257 isolats de S. enterica sous-espèce enterica. Différentes structures

Le fonctionnement biologique des sols, en particulier en ce qui concerne la présence et l’activité de la faune, est donc un élément-clé d’une gestion conservatoire des

We show that the decision versions of the minimum cover and partition by γ-quasi-cliques problems are NP-complete for any fixed γ satisfying 0 &lt; γ &lt; 1.. Key-words: