Codes et jeux de données
Cette page permet de récupérer les programmes C et OCaml ainsi que les jeux de données utilisés en exemples dans le livre.
Codes C et OCaml du livre
Une archive pour les télécharger tous : code.zip. Ce code a été compilé avec gcc 7.5.0 (avec les options -O2 -std=c99 -pedantic -Wall sur la ligne de commande) et OCaml 4.14.0 (sans option particulière sur la ligne de commande). Ce code a été testé, mais les codes de test ne sont pas fournis. Le code C utilise ce prelude.h.
Il est possible de cliquer sur chaque fichier pour en visualiser le contenu (avec coloration syntaxique), ou d'enregistrer le fichier original en effecutant un clic droit puis « enregistrer la cible ».
Chapitre 6 - Raisonner sur les programmes (C et OCaml)
Prélude | ||
---|---|---|
prelude.h | ||
Petits algorithmes | ||
recherche dichotomique | binary_search.c / .h | binary_search.ml |
exponentiation rapide | arith.c / .h (power) | math.ml / .mli (power) |
motifs et chaînes de caractères | string_search.c / .h | |
vote majoritaire | majority.c | |
tableaux binaires | binary_counter.c | |
coefficients du binôme | binom.c | |
Algorithmes de tri | ||
tri par insertion | insertion_sort.c / .h | insertion_sort.ml |
tri fusion | merge_sort.c / .h | merge_sort.ml |
tri rapide | quick_sort.c / .h | |
tri par tas | heap_sort.c / .h | heapsort.ml |
tri par sélection | selection_sort.c / .h | |
tri de chaînes de caractères | string_sort.c / .h | |
tri à bulles | bubble_sort.c | |
Induction structurelle | ||
mobiles de Calder | calder.ml | |
expressions arithmétiques | expr.ml | |
manipulations de listes | lists.ml |
Chapitre 7 - Structures de données (C et OCaml)
Structures de données séquentielles | ||
---|---|---|
tableaux redimensionnables | vector.c / .h | vector.ml / .mli |
listes chaînées | list.c / .h | |
piles (fifo) | stack.c / .h | istack.ml / .mli |
files (lifo) | queue.c / .h | iqueue.ml / .mli (mutable) |
aqueue.ml / .mli (immuable) | ||
tables de hachage | hashtbl.c / .h | hashtable.ml / .mli |
Arbres binaires | ||
arbres binaires | bintree.c / .h | bintree.ml / .mli |
arbres binaires de recherche | bst.c / .h | bst.ml / .mli |
arbres rouge-noir | rbt.ml / .mli | |
files de priorité | pqueue.c / .h | braun.ml / .mli (immuable) |
pqueue.ml / .mli (mutable) | ||
skew_heap.ml / .mli (immuable) | ||
Arbres | ||
arbres | tree.c / .h | tree.ml / .mli |
arbres préfixes | trie.c / .h | trie.ml / .mli |
union-find | union_find.c / .h | union_find.ml / .mli |
Chapitre 8 - Graphes (C et OCaml)
Structures de graphe | ||
---|---|---|
graphes orientés | digraph.c / .h | digraph.ml / .mli |
graphes non orientés | graph.c / .h | graph.ml / .mli |
graphes orientés pondérés | wdigraph.ml / .mli | |
graphes non orientés pondérés | wgraph.ml / .mli | |
Algorithmes et parcours | ||
composantes connexes | components.c / .h | components.ml / .mli |
algorithme de Floyd-Warshall | floyd_warshall.ml / .mli | |
algorithme de Dijkstra | dijkstra.ml / .mli | |
algorithme A* | astar.ml / .mli | |
composantes fortement connexes | kosaraju_sharir.c / .h | kosaraju_sharir.ml / .mli |
algorithme de Kruskal | kruskal.ml / .mli | |
couplage maximum dans un graphe biparti | bipartite.ml / .mli |
Chapitre 9 - Algorithmique (C et OCaml)
Mathématiques | ||
---|---|---|
arithmétique entière | arith.c / .h | math.ml / .mli |
matrices | matrix.ml / .mli | |
Retour sur trace | ||
Sudoku | sudoku.c | |
N reines | queens.c | |
Algorithmes gloutons | ||
rendu de monnaie | greedy_change.c | greedy_change.ml |
coloration de graphe | greedy_color.ml | |
Diviser pour régner | ||
plus proches points dans le plan | closest_pair.ml / .mli | |
Programmation dynamique | ||
pyramide d'entiers | dp_pyramid.ml | |
rendu de monnaie | dp_change.c | dp_change.ml |
Algorithmique des textes | ||
Boyer-Moore | boyer_moore.c / .h | boyer_moore.ml / .mli |
Rabin-Karp | rabin_karp.c / .h | rabin_karp.ml / .mli |
Huffman | huffman.ml / .mli | |
Lempel-Ziv-Welch | lzw.c / .h | lzw.ml / .mli |
RLE (Run-Length Encoding) | rle.ml / .mli | |
Algorithmes probabilistes | ||
mélange de Knuth | quick_sort.c | arrays.ml |
échantillonnage | arrays.ml (sampling) | |
problème des N reines | queens.c (queens_prob) | |
test de primalité | arith.c / .h | |
génération de labyrinthe | maze.ml | |
Apprentissage | ||
bibliothèques pour utiliser la base MNIST | mnist.c / .h | mnist.ml / .mli |
k moyennes | kmeans.c / .h | learning.ml / .mli |
k plus proches voisins | learning.ml / .mli (k_nn) | |
arbres k dimensionnels | kdtree.ml / .mli | |
ID3 | id3.ml / .mli | |
Jeux à deux joueurs | ||
algorithmes min-max et alpha-beta | game.ml | |
exemple : Othello | othello.ml | |
exercice 172 : tic-tac-toe | tictactoe.ml |
Chapitre 10 - Logique (OCaml)
Manipulation de formules | |
---|---|
formules propositionnelles | fmla.ml / .mli |
formes normales | cnf.ml / .mli |
Satisfiabilité | |
algorithme de Quine | quine.ml |
algorithme DPLL | dpll.ml |
modélisation du coloriage de graphes | color2sat.ml |
Chapitre 12 - Langages formels (OCaml)
Automates | |
---|---|
bibliothèque d'automates | auto.ml/.mli |
opérations sur les automates (reconnaissance, émondage, déterminisation, …) | auto_op.ml |
Nombre de mots de longueur, k, mot de longueur k | ex_auto.ml |
Expressions régulières | |
bibliothèque d'expressions régulières | re.ml/.mli |
Algorithme de Berry-Sethi, résidus de Brzozowski, élimination des états, construction de Thompson | re_algo.ml |
Grammaires non-contextuelles | |
Analyse syntaxique de formules logiques | prop_parser.ml |
reconnaissance de mots du langage de Dyck | ex_gram.ml |
Chapitre 13 - Calculabilité (OCaml)
Décidabilité | |
---|---|
indécidabilité de l'arrêt | barber.ml |
équivalence sémantique | equivalence.ml |
théorème de Rice | rice.ml |
Réductions polynomiales | |
transformation de Tseitin | tseitin.ml |
réduction de 3SAT à 3COLOR | sat2color.ml / color.ml |
Problèmes d'optimisation | |
voyageur de commerce | tsp.ml |
MAXSAT | maxsat.ml |
Chapitre 14 - Gestion de la concurrence et synchronisation (C et OCaml)
Concurrence et synchronisation | ||
---|---|---|
algorithme de Peterson | peterson_thread.c | |
algorithme de la boulangerie de Lamport | bakery_thread.c | bakery_thread.ml |
producteurs et consommateurs | prod_cons_thread.c | prod_cons_thread.ml |
dîner des philosophes | philo_thread.c | philo_thread.ml |
Code supplémentaire
L'âne rouge (OCaml) | |
---|---|
L'âne rouge | ane_rouge.ml |
Solution générique de mémoïsation (OCaml) | Mémoïsation | memo.ml / .mli |
Jeux de données
Les fichiers SQL ont été testés avec le SGBD libre PostgreSQL ainsi qu'avec l'évaluateur en ligne (basé sur SQLite).
Description | fichier |
---|---|
mots anglais de cinq lettres (depuis The Stanford GraphBase) | words.txt |
Le code SQL de création de la base de données des Films | films.sql |
Le code SQL de création de la base de données du championnat France de football féminin | foot.sql |
Le code SQL de création de la base de données des Étudiants | etudiants.sql |
Le code SQL de création de tables pour la médiathèques, utilisé dans le livre NSI Terminale | livres.sql |