diff --git a/readme.md b/readme.md
index cd6f9c1cdc6c8f48ec01df0964564b16e6739972..039c665d221a312eb4fa28f249f171326c9e621b 100644
--- a/readme.md
+++ b/readme.md
@@ -10,8 +10,7 @@ en _clusters_ de façon à ce que les éléments d'un même groupe soient proche
 uns des autres ou d'un élément virtuel représentant l'élément "moyen" de la
 partition.
 
-![kmeans clustering](./img/kmeans_clustering.png)
-
+![[kmeans clustering](https://stats.stackexchange.com/questions/146339/what-does-cluster-size-mean-in-context-of-k-means)](./img/kmeans_clustering.png)
 
 ## Méthodes des k-moyennes
 La méthode k-moyennes (k-means en anglais) est un algorithme qui permet de partitionner un groupe de données par rapport à une métrique définie. Chaque _cluster_ devra contenir des données homogènes. De plus tous les _cluster_ doivent également être hétérogènes les uns des autres.
@@ -19,21 +18,24 @@ La méthode k-moyennes (k-means en anglais) est un algorithme qui permet de part
 Ce processus de regroupement de données s'effectue de manière non supervisée, c'est-à-dire que l'algorithme utilisé s'applique sur des données non étiquetées et sans avoir recours à un retour externe sur ses résultats.
 
 ## Initialisation des clusters
-Avant de pouvoir appliquer l'algorithme des k-moyennes, il faut déterminer le nombre de _clusters_ souhaité ($k$) ainsi que la position de leur _centroïde_ (point représentant le centre de chaque _cluster_).
+Avant de pouvoir appliquer l'algorithme des k-moyennes, il faut déterminer le nombre de _clusters_ souhaité ($k$) ainsi que la position de leur _centroïde_, point représentant le centre de gravité de chaque _cluster_. Le _centroïde_ n'est pas forcément au centre du cluster.
 
-Dans un premier temps la valeur de $k$ peut être choisie arbitrairement, mais il faudra par la suite déterminer la valeur la plus optimale (nous y reviendrons plus tard).
+Le $k$ choisi sera fixe pour le partionnement mais pourra être modifié par la suite par une valeur plus optimisée (voir la section calcul du $k$ optimal).
 
 La position des _centroïdes_ sera déterminée aléatoirement mais il faut s'assurer qu'ils ne soient pas trop proches les uns des autres afin d'avoir des _clusters_ cohérents. Vous devrez déterminer une distance $\delta$ minimale séparant chaque _centroïde_ entre eux.
 
-## Calcul de la distance
-Vous travaillerez avec des points à 2 dimensions contenant des coordonnées sous la forme de nombres à virgule flotante. Ainsi vous devrez les assigner à des _clusters_ par rapport à la distance séparent les points. En effet, chaque point devra appartenir au _cluster_ dont son _centroïde_ est le plus proche.
+## Données d'entrée et métrique
+Vous travaillerez avec des points à $n$ dimensions contenant des valeurs numériques (vous êtes libres de choisir le type).
 
+La métrique utilisée pour le partionnement des données est libre. Les sections ci-dessous donnent quelques détails si vous décidez d'effectuer un partionnement selon la distance des points.
+
+## Calcul de la distance
+Un partitionnement des données selon leur distance pourrait, par exemple, assigner les points aux _clusters_ par rapport à la distance les séparants. En effet, chaque point pourrait appartenir au _cluster_ dont son _centroïde_ est le plus proche.
 
 Afin de quantifier la proximité de deux éléments entre eux, nous avons
 besoin de définir une fonction distance, qui sera notre métrique.
 
-Cette fonction distance peut retourner simplement une distance
-de Manhattan ou une distance euclidienne et prend en argument deux vecteurs éléments de notre univers.
+Vous êtes libre de choisir la manière de calculer la distance, vous pourriez par exemple utiliser une distance de Manhattan ou une distance euclidienne.
 
 $$d(x,y)$$
 
@@ -67,13 +69,14 @@ Pour cela il existe de nombreuses méthodes, les plus connues étant :
 - L'analyse par silhouette (Silhouette analysis)
 
 # Énoncé
-À partir d'un fichier contenant des points à 2 dimensions (chaque coordonnées étant un nombre à virgule flotante), vous devez implémenter l'algorithme k-moyennes et permettre la visualisation des différents clusters créés.
+À partir d'un fichier contenant des données de $n$ dimensios, vous devez implémenter l'algorithme k-moyennes et permettre la visualisation des différents clusters créés.
 
 Cet algorithme peut s'appliquer facilement à tous types de données
 pouvant être représentées sous forme de vecteurs de valeurs.
-Cependant, nous avons décidé de limiter ce travail aux vecteurs à valeurs
-décimales, en 2 dimensions, pour en simplifier la visualisation
-et la vérification de notre algorithme.
+
+Dans un premier temps vous devez définir manuellement le $k$ utilisé, mais il faudra déterminer le $k$ optimal une fois votre implémentation terminée.
+
+Vous retournerez le résultat de votre algorithme selon le format défini en annexe.
 
 ## Interface utilisateur
 
@@ -92,9 +95,6 @@ Une fois nos données correctement chargées, il faudra appliquer l'algorithme d
 2. Déterminer les points appartenant à chaque _cluster_ selon leur distance avec les _centroïdes_.
 3. Une fois tous les points (ré)assignés à un _cluster_, calculer la nouvelle position des _centroïdes_ (il s'agira du nouveau centre du _cluster_ suite à la modification des points).
 4. Recommencer à partir de l'étape 2 si la position d'au moins 1 _centroïde_ a été modifiée.
-5. Afficher les points et _clusters_ à l'écran (avec des couleurs !)
-
-Il faudra utiliser la librairie gfx pour afficher vos résultats.
 
 ## Fonctions à implémenter
 Votre programme doit implémenter les fonctions suivantes :
@@ -105,28 +105,7 @@ Votre programme doit implémenter les fonctions suivantes :
 - Déterminer les points appartenant aux _clusters_
 - Déterminer le K optimal (Elbow optimal, silhouette method, ...)
 
-Ainsi que les structures ci-dessous :
-
-```c
-typedef struct _cluster {
-    struct _point* centroid;
-    int color;
-} cluster;
-
-typedef struct _point {
-    float x;
-    float y;
-    char* label; // for tests
-    struct _cluster* cluster;
-    int color;
-} point;
-
-typedef struct _kmeans {
-    int k;
-    struct _cluster* clusters_array; // k size
-    struct _point** points_array;
-} kmeans;
-```
+Vous devrez probablement implémenter des structures représentant les _clusters_ et les points.
 
 ## Vérification du travail réalisé
 Afin de s'assurer que votre algorithme a été correctement implémenté vous devez mettre en place des fichiers de tests.
@@ -145,9 +124,12 @@ Le fichier _data_for_tests.txt_ contient une dizaine de points directement assig
 
 Au lieu d'afficher directement le résultat final de votre implémentation de l'algorithme des k-moyennes, vous devez afficher chaque étape effectuée afin que l'on puisse constater comment l'assignation des points aux _clusters_ est effectuée.
 
-## Implémentation avec vecteurs à $n$ dimensions
+# Références
+
+- [https://www.editions-eni.fr/livre/le-machine-learning-avec-python-de-la-theorie-a-la-pratique-9782409031816/extrait-du-livre.pdf](https://www.editions-eni.fr/livre/le-machine-learning-avec-python-de-la-theorie-a-la-pratique-9782409031816/extrait-du-livre.pdf)
+
+- [https://towardsdatascience.com/k-means-clustering-algorithm-applications-evaluation-methods-and-drawbacks-aa03e644b48a](https://towardsdatascience.com/k-means-clustering-algorithm-applications-evaluation-methods-and-drawbacks-aa03e644b48a)
 
-Étendre l'implémentation pour pouvoir utiliser des vecteurs
-à $n$ dimensions avec $n$ passé en paramètre au début de la procédure.
+- [https://towardsmachinelearning.org/k-means/](https://towardsmachinelearning.org/k-means/)
 
-Afin de pouvoir visualiser les résultats, vous devrez également implémenter l'algorithme PCA pour la visualisation de vecteurs à plus de 2 dimensions.
+- [https://vitalflux.com/elbow-method-silhouette-score-which-better/](https://vitalflux.com/elbow-method-silhouette-score-which-better/)