From 842f625986aa3f75e3f0d87a7f2871d7ce593d30 Mon Sep 17 00:00:00 2001 From: Florian Burgener <florian.brgnr@gmail.com> Date: Mon, 23 May 2022 22:57:39 +0200 Subject: [PATCH] Progress of the implementation 2 --- src/bptree.c | 149 +++++++++++++++++++++++++++++++++++++++++---- src/bptree.h | 13 +++- src/bptree.o | Bin 0 -> 25160 bytes src/main.c | 31 ++++------ src/main.o | Bin 9296 -> 8384 bytes src/program | Bin 29360 -> 41496 bytes src/sorted_array.c | 52 +++++++++++----- src/sorted_array.h | 21 +++++-- src/sorted_array.o | Bin 17424 -> 20032 bytes 9 files changed, 210 insertions(+), 56 deletions(-) create mode 100644 src/bptree.o diff --git a/src/bptree.c b/src/bptree.c index b551024..330dc11 100644 --- a/src/bptree.c +++ b/src/bptree.c @@ -1,29 +1,29 @@ #include "bptree.h" #include <stdbool.h> +#include <stdint.h> +#include <stdio.h> #include <stdlib.h> -/// +#include "sorted_array.h" -static bool has_minimum_keys(BPTreeNode *root); -static bool has_maximum_keys(BPTreeNode *root); +// static bool has_minimum_keys(BPTreeNode *node); +static bool has_maximum_keys(BPTreeNode *node); -static bool has_minimum_keys(BPTreeNode *root) { - return root->keys_length == root->order; -} +// static bool has_minimum_keys(BPTreeNode *node) { +// return node->keys_length == node->order; +// } -static bool has_maximum_keys(BPTreeNode *root) { - return root->keys_length == 2 * root->order; +static bool has_maximum_keys(BPTreeNode *node) { + return node->keys_length == 2 * node->order; } -/// - BPTreeNode *bptree_init(int order) { BPTreeNode *root = (BPTreeNode *)malloc(sizeof(BPTreeNode)); root->order = order; root->is_leaf = true; root->keys_length = 0; - root->keys = (int *)malloc(sizeof(int) * (2 * order)); + root->keys = (uint64_t *)malloc(sizeof(uint64_t) * (2 * order)); root->children_length = 0; root->children = (BPTreeNode **)malloc(sizeof(BPTreeNode *) * (2 * order + 1)); return root; @@ -31,7 +31,7 @@ BPTreeNode *bptree_init(int order) { void bptree_destroy(BPTreeNode **root) { for (int i = 0; i < (*root)->children_length; i++) { - bptree_destroy((*root)->children[i]); + bptree_destroy(&(*root)->children[i]); } free((*root)->keys); @@ -40,6 +40,131 @@ void bptree_destroy(BPTreeNode **root) { *root = NULL; } +// ... + // Insertion +static void redistribute_keys(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index) { + for (int i = right_index; i < left_node->keys_length; i++) { + array_append(&right_node->keys_length, right_node->keys, left_node->keys[i]); + } + + left_node->keys_length = left_index; +} + +uint64_t split_leaf(BPTreeNode *node, uint64_t key, BPTreeNode **right_node) { + int virtual_insertion_index = lower_bound(node->keys_length, node->keys, key); + int median_index = node->keys_length / 2; + uint64_t median_value; + *right_node = bptree_init(node->order); + + if (virtual_insertion_index < median_index) { + median_value = node->keys[median_index - 1]; + redistribute_keys(node, *right_node, median_index - 1, median_index - 1); + sorted_array_insert(&node->keys_length, node->keys, key); + } else if (virtual_insertion_index > median_index) { + median_value = node->keys[median_index]; + redistribute_keys(node, *right_node, median_index, median_index); + sorted_array_insert(&(*right_node)->keys_length, (*right_node)->keys, key); + } else { + median_value = key; + redistribute_keys(node, *right_node, median_index, median_index); + sorted_array_insert(&(*right_node)->keys_length, (*right_node)->keys, key); + } + + // TODO : Linked List + + return median_value; +} + +// static void redistribute_children(BPTreeNode *left_node, BPTreeNode *right_node, int left_index, int right_index) { +// for (int i = right_index; i < left_node->children_length; i++) { +// array_append_BPTreeNode(&right_node->children_length, right_node->children, left_node->children[i]); +// } + +// left_node->children_length = left_index; +// } + +static void grow(BPTreeNode *root, uint64_t median_value, BPTreeNode *split_right_node) { + BPTreeNode *left_node = bptree_init(root->order); + left_node->is_leaf = split_right_node->is_leaf; + + for (int i = 0; i < root->keys_length; i++) { + array_append(&left_node->keys_length, left_node->keys, root->keys[i]); + } + + for (int i = 0; i < root->children_length; i++) { + array_append_BPTreeNode(&left_node->children_length, left_node->children, root->children[i]); + } + + root->is_leaf = false; + root->keys_length = 0; + root->children_length = 0; + + array_append(&root->keys_length, root->keys, median_value); + array_append_BPTreeNode(&root->children_length, root->children, left_node); + array_append_BPTreeNode(&root->children_length, root->children, split_right_node); +} + +static void insert_full(BPTreeNode *root, int *parents_length, BPTreeNode **parents, BPTreeNode *node, uint64_t key, BPTreeNode *previous_split_right_node) { + uint64_t median_value; + BPTreeNode *split_right_node; + + if (node->is_leaf) { + median_value = split_leaf(node, key, &split_right_node); + } else { + // TODO + printf("TODO\n"); + } + + if (node == root) { + grow(root, median_value, split_right_node); + } else { + // TODO + printf("TODO\n"); + } +} + +static void insert_non_full(BPTreeNode *node, uint64_t key, BPTreeNode *previous_split_right_node) { + int insertion_index = sorted_array_insert(&node->keys_length, node->keys, key); + + if (previous_split_right_node != NULL) { + array_insert_at_index_BPTreeNode(&node->children_length, node->children, insertion_index + 1, previous_split_right_node); + } +} + +static BPTreeNode *find_leaf(BPTreeNode *root, uint64_t key, int *parents_length, BPTreeNode ***parents) { + BPTreeNode *current = root; + *parents_length = 0; + // TODO : 10 is not enough. + *parents = (BPTreeNode **)malloc(sizeof(BPTreeNode *) * 10); + + while (!current->is_leaf) { + array_append_BPTreeNode(parents_length, *parents, current); + int child_index = lower_bound(current->keys_length, current->keys, key); + + if (child_index < current->keys_length && current->keys[child_index] == key) { + child_index += 1; + } + + current = current->children[child_index]; + } + + return current; +} + +void bptree_insert(BPTreeNode *root, uint64_t key) { + int parents_length; + BPTreeNode **parents; + BPTreeNode *leaf = find_leaf(root, key, &parents_length, &parents); + + if (has_maximum_keys(leaf)) { + insert_full(root, &parents_length, parents, leaf, key, NULL); + } else { + insert_non_full(leaf, key, NULL); + } + + free(parents); +} + // Deletion diff --git a/src/bptree.h b/src/bptree.h index 559ccfe..d5bc03a 100644 --- a/src/bptree.h +++ b/src/bptree.h @@ -1,13 +1,14 @@ #ifndef BPTREE_H #define BPTREE_h -#include "stdbool.h" +#include <stdbool.h> +#include <stdint.h> typedef struct BPTreeNode { int order; bool is_leaf; int keys_length; - int *keys; + uint64_t *keys; int children_length; struct BPTreeNode **children; } BPTreeNode; @@ -15,4 +16,12 @@ typedef struct BPTreeNode { BPTreeNode *bptree_init(int order); void bptree_destroy(BPTreeNode **root); +// ... + +// Insertion + +void bptree_insert(BPTreeNode *root, uint64_t key); + +// Deletion + #endif diff --git a/src/bptree.o b/src/bptree.o new file mode 100644 index 0000000000000000000000000000000000000000..1c3356f81150672ea30605e2d69c077b43918883 GIT binary patch literal 25160 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 HqU#3$cjsnh literal 0 HcmV?d00001 diff --git a/src/main.c b/src/main.c index 3da830e..656890d 100644 --- a/src/main.c +++ b/src/main.c @@ -2,28 +2,19 @@ #include <stdlib.h> #include "sorted_array.h" +#include "bptree.h" int main() { - int *array = (int *)malloc(sizeof(int) * 10); - int array_length = 0; - - sorted_array_insert(array, &array_length, 3); - sorted_array_insert(array, &array_length, 11); - sorted_array_insert(array, &array_length, 5); - sorted_array_insert(array, &array_length, 1); - sorted_array_insert(array, &array_length, 15); - sorted_array_insert(array, &array_length, 12); - sorted_array_insert(array, &array_length, 8); - sorted_array_print(array, array_length); - - sorted_array_delete(array, &array_length, 12); - sorted_array_delete(array, &array_length, 1); - sorted_array_delete(array, &array_length, 15); - sorted_array_delete(array, &array_length, 5); - sorted_array_delete(array, &array_length, 8); - sorted_array_delete(array, &array_length, 11); - sorted_array_delete(array, &array_length, 3); - sorted_array_print(array, array_length); + BPTreeNode *root = bptree_init(2); + // [8, 12, 11, 47, 22, 95, 86, 40, 33, 78, 28, 5, 75, 88, 21, 56, 82, 51, 93, 66, 48, 70, 57, 65, 35, 4, 60, 41, 49, 55 + bptree_insert(root, 8); + bptree_insert(root, 12); + bptree_insert(root, 11); + bptree_insert(root, 47); + bptree_insert(root, 22); + array_print(root->keys_length, root->keys); + array_print(root->children[0]->keys_length, root->children[0]->keys); + array_print(root->children[1]->keys_length, root->children[1]->keys); return EXIT_SUCCESS; } diff --git a/src/main.o b/src/main.o index 430793ffa0d07259fdf13973a75857418dc744d3..7cead98a5619bbb3096b135d6cd99d66c5f6d86c 100644 GIT binary patch literal 8384 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 H6|xWjRGg4} literal 9296 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 diff --git a/src/program b/src/program index d77345c41e98d225093d0a372100bb75b4155945..b11cbd80e7c3c03fd3956742bc7631c4cbbb3342 100644 GIT binary patch literal 41496 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	(;9qxmq$3$Ne* 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 literal 29360 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 diff --git a/src/sorted_array.c b/src/sorted_array.c index 0bbf3a0..50834dc 100644 --- a/src/sorted_array.c +++ b/src/sorted_array.c @@ -1,10 +1,11 @@ #include "sorted_array.h" #include <stdbool.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> -int lower_bound(int *array, int array_length, int value) { +int lower_bound(int array_length, uint64_t *array, uint64_t value) { int low = 0; int high = array_length - 1; @@ -23,7 +24,7 @@ int lower_bound(int *array, int array_length, int value) { return low; } -int sorted_array_find_index(int *array, int array_length, int value) { +int sorted_array_find_index(int array_length, uint64_t *array, uint64_t value) { int low = 0; int high = array_length - 1; @@ -42,8 +43,8 @@ int sorted_array_find_index(int *array, int array_length, int value) { return -1; } -bool sorted_array_search(int *array, int array_length, int value, int *index) { - int i = sorted_array_find_index(array, array_length, value); +bool sorted_array_search(int array_length, uint64_t *array, uint64_t value, int *index) { + int i = sorted_array_find_index(array_length, array, value); if (index != NULL) { *index = i; @@ -52,16 +53,8 @@ bool sorted_array_search(int *array, int array_length, int value, int *index) { return i != -1; } -void sorted_array_print(int *array, int array_length) { - for (int i = 0; i < array_length; i++) { - printf("%d ", array[i]); - } - - printf("\n"); -} - -int sorted_array_insert(int *array, int *array_length, int value) { - int insertion_index = lower_bound(array, *array_length, value); +int sorted_array_insert(int *array_length, uint64_t *array, uint64_t value) { + int insertion_index = lower_bound(*array_length, array, value); for (int i = *array_length - 1; i >= insertion_index; i--) { array[i + 1] = array[i]; @@ -72,8 +65,8 @@ int sorted_array_insert(int *array, int *array_length, int value) { return insertion_index; } -void sorted_array_delete(int *array, int *array_length, int value) { - int index = sorted_array_find_index(array, *array_length, value); +void sorted_array_delete(int *array_length, uint64_t *array, uint64_t value) { + int index = sorted_array_find_index(*array_length, array, value); for (int i = index; i < *array_length; i++) { array[i] = array[i + 1]; @@ -81,3 +74,30 @@ void sorted_array_delete(int *array, int *array_length, int value) { *array_length -= 1; } + +void array_append(int *array_length, uint64_t *array, uint64_t value) { + array[*array_length] = value; + *array_length += 1; +} + +void array_print(int array_length, uint64_t *array) { + for (int i = 0; i < array_length; i++) { + printf("%ld ", array[i]); + } + + printf("\n"); +} + +void array_insert_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int insertion_index, BPTreeNode *value) { + for (int i = *array_length - 1; i >= insertion_index; i--) { + array[i + 1] = array[i]; + } + + array[insertion_index] = value; + *array_length += 1; +} + +void array_append_BPTreeNode(int *array_length, BPTreeNode **array, BPTreeNode *value) { + array[*array_length] = value; + *array_length += 1; +} diff --git a/src/sorted_array.h b/src/sorted_array.h index e108832..5192d0f 100644 --- a/src/sorted_array.h +++ b/src/sorted_array.h @@ -2,14 +2,23 @@ #define SORTED_ARRAY_H #include <stdbool.h> +#include <stdint.h> -int lower_bound(int *array, int array_length, int value); +int lower_bound(int array_length, uint64_t *array, uint64_t value); -int sorted_array_find_index(int *array, int array_length, int value); -bool sorted_array_search(int *array, int array_length, int value, int *index); -void sorted_array_print(int *array, int array_length); +int sorted_array_find_index(int array_length, uint64_t *array, uint64_t value); +bool sorted_array_search(int array_length, uint64_t *array, uint64_t value, int *index); -int sorted_array_insert(int *array, int *array_length, int value); -void sorted_array_delete(int *array, int *array_length, int value); +int sorted_array_insert(int *array_length, uint64_t *array, uint64_t value); +void sorted_array_delete(int *array_length, uint64_t *array, uint64_t value); + +void array_print(int array_length, uint64_t *array); +void array_append(int *array_length, uint64_t *array, uint64_t value); + +typedef struct BPTreeNode BPTreeNode; + +void array_insert_at_index_BPTreeNode(int *array_length, BPTreeNode **array, int insertion_index, BPTreeNode *value); +void array_append_BPTreeNode(int *array_length, BPTreeNode **array, BPTreeNode *value); +// void array_delete_at_index_BPTreeNode(BPTreeNode **array, int *array_length, int index); #endif diff --git a/src/sorted_array.o b/src/sorted_array.o index b5cdc315a1c1cef35f42c2424ca12b6288091a13..4d28f285dc92c82c19a672638a679bb237d9a952 100644 GIT binary patch literal 20032 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 literal 17424 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 K{pkKj*AD=P8M!3@ -- GitLab