From 214355371781c90d10e141a998f0f05c7ff3d2a6 Mon Sep 17 00:00:00 2001
From: Jonas <jonas.stirnemann@etu.hesge.ch>
Date: Wed, 6 Apr 2022 10:49:21 +0200
Subject: [PATCH] Added compression functions

---
 quad_tree/cours.md    | 16 ++++++++++++++
 quad_tree/quad_tree.c | 49 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/quad_tree/cours.md b/quad_tree/cours.md
index e69de29..9328fee 100644
--- a/quad_tree/cours.md
+++ b/quad_tree/cours.md
@@ -0,0 +1,16 @@
+
+
+```c
+tree tree_compress(tree)
+{
+	if !is_leaf(tree)
+	{
+		tree->left = tree_compress(tree->left);
+		tree->right = tree_compress(tree->right);
+		if (tree->left == tree->right)
+		{
+			tree = tree->left;
+		}
+	}
+}
+```
\ No newline at end of file
diff --git a/quad_tree/quad_tree.c b/quad_tree/quad_tree.c
index 0463b76..59d92cd 100644
--- a/quad_tree/quad_tree.c
+++ b/quad_tree/quad_tree.c
@@ -5,6 +5,7 @@ typedef int value_t;
 typedef struct node_
 {
 	value_t value;
+	value_t sqared_avg;
 	node_ *child[4]
 } node_t;
 
@@ -142,3 +143,51 @@ node_t *tree_vert_sym(node_t *tree)
 	tree = fill_tree(m);
 	return tree;
 }
+
+/**
+ * @brief Lossless tree compression
+ *
+ * @param tree
+ * @return node_t*
+ */
+void tree_lossless_compress(node_t *tree)
+{
+	if (!is_leaf(tree))
+	{
+		for (int i = 0; i < 4; i++)
+		{
+			tree->child[i] = tree_lossless_compress(tree->child[i]);
+		}
+		if(last_branch(tree)
+		{
+			if (tree->child[0] == tree->child[1] == tree->child[2] == tree->child[3])
+			{
+				tree->data = tree->child[0]->data;
+				free(tree->child);
+			}
+		}
+	}
+}
+
+#define DIFF 4
+
+standard_deviation = Racine de la moyenne des elements au carré
+
+	void
+	tree__lossy_compression(node_t * tree)
+{
+	if (!is_leaf(tree))
+	{
+		for (int i = 0; i < 4; i++)
+		{
+			tree->child[i] = tree_lossy_compress(tree->child[i]);
+		}
+		if (last_branch(tree))
+		{
+			if (sqrt(tree->sqared_avg - tree->value * tree->value) < DIFF)
+			{
+				free(tree->child);
+			}
+		}
+	}
+}
-- 
GitLab