Formulaire
LINFO1121Formulaire
Choisir « Enregistrer au format PDF ».
Complexités essentielles
Section intitulée « Complexités essentielles »| Opération / pattern | Coût typique |
|---|---|
| accès tableau par indice | |
| parcours de éléments | |
| deux boucles imbriquées sur | |
| recherche dichotomique | |
| tri efficace classique | |
| redimensionnement ponctuel d’un tableau dynamique | |
| insertion amortie dans un tableau dynamique |
Doubling ratio
Section intitulée « Doubling ratio »Si :
- ratio → linéaire
- ratio → quadratique
- ratio → cubique
Stack, Queue et LinkedList
Section intitulée « Stack, Queue et LinkedList »Stack — LIFO
Section intitulée « Stack — LIFO »push(x) ajoute au toppop() retire le toppeek() lit le topisEmpty()Avec une singly linked list : top en tête → push / pop en .
node.next = first;first = node;Queue — FIFO
Section intitulée « Queue — FIFO »Queue<Integer> q = new ArrayDeque<>();
q.add(x); // enqueueq.remove(); // dequeueq.peek(); // lire la têteLinkedList : parcours
Section intitulée « LinkedList : parcours »À privilégier :
for (E x : list) { process(x);}ou :
Iterator<E> it = list.iterator();
while (it.hasNext()) { E x = it.next();}À éviter :
for (int i = 0; i < list.size(); i++) { process(list.get(i));}Sur une LinkedList, ce dernier pattern peut coûter .
Patterns Java à retrouver vite
Section intitulée « Patterns Java à retrouver vite »Référence vs valeur
Section intitulée « Référence vs valeur »int[] a = {1, 2, 3};int[] b = a;
b[0] = 99;// a[0] vaut aussi 99Java passe toujours les arguments par valeur ; pour un objet, la valeur copiée est sa référence.
Itérateur fail-fast
Section intitulée « Itérateur fail-fast »Pattern classique :
private final long expectedOps = nOp;
public E next() { if (expectedOps != nOp) { throw new ConcurrentModificationException(); }
// avancer}Test rapide d’une structure
Section intitulée « Test rapide d’une structure »assertTrue(stack.empty());
stack.push(1);assertEquals(1, stack.peek());assertEquals(1, stack.pop());
assertThrows(EmptyStackException.class, stack::pop);Pièges centraux
Section intitulée « Pièges centraux »Overflow
Section intitulée « Overflow »Éviter :
int mid = (lo + hi) / 2;Préférer :
int mid = lo + (hi - lo) / 2;Division entière
Section intitulée « Division entière »System.out.println(-1 / 2); // 0Java tronque vers zéro.
Tableau dynamique
Section intitulée « Tableau dynamique »if (size == a.length) { a = Arrays.copyOf(a, 2 * a.length);}
a[size++] = item;Le redimensionnement coûte , mais l’insertion reste amortie.
Mémoire JVM
Section intitulée « Mémoire JVM »stack mémoire → appels, paramètres, variables localesheap → objets et tableaux-Xms → taille initiale du heap
-Xmx → taille maximale du heap
Le garbage collector récupère les objets devenus inaccessibles.
Algorithmes à compléter au fil du cours
Section intitulée « Algorithmes à compléter au fil du cours »Cette section sert uniquement à garder les squelettes centraux qu’il faut pouvoir retrouver rapidement.
Binary search
Section intitulée « Binary search »int lo = 0;int hi = a.length - 1;
while (lo <= hi) { int mid = lo + (hi - lo) / 2;
if (a[mid] < key) { lo = mid + 1; } else if (a[mid] > key) { hi = mid - 1; } else { return mid; }}
return -1;À ajouter quand le cours y arrive : sorting, BST, heap, hashing, BFS/DFS, graphes, strings.