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