AfanasevGad7

This is a task for our favourite professor
git clone git://git.stellar-nexus.ru/AfanasevGad7
Log | Files | Refs | README

commit ab2f6edfd838d0d069f3d5284d8a68220f21b769
parent 6ea01fd6bfe542f8c76ba7010f9a00c48b89fd60
Author: Plat <plat@stellar-nexus.ru>
Date:   Fri,  7 Nov 2025 09:58:34 +0000

Changes to flags and timings of avl and rb

Diffstat:
Mavl.c | 46+++++++++++++++++++++++++++++++---------------
Mfib.c | 8++++----
Mrb.c | 40+++++++++++++++++++++++++++++-----------
3 files changed, 64 insertions(+), 30 deletions(-)

diff --git a/avl.c b/avl.c @@ -15,7 +15,7 @@ typedef struct Node Node; inline Node * init(int val) { - Node *n = malloc(sizeof(Node)); + Node *n = emalloc(sizeof(Node)); if (n == NULL) return NULL; @@ -62,7 +62,7 @@ get_height(Node *root) } -inline int +static inline int get_balance_factor(Node *root) { if (!root) @@ -142,12 +142,23 @@ usage(void) int main(int argc, char *argv[]) { - argv0 = argv[0]; - if (argc > 2) + int cflag = 0, sflag = 0, dflag = 0; + ARGBEGIN { + case 'c': + cflag = 1; + break; + case 's': + sflag = 1; + break; + case 'd': + dflag = 1; + break; + } ARGEND + if (argc > 1) usage(); const char *filename; - if (argc == 2) - filename = argv[1]; + if (argc == 1) + filename = argv[0]; else filename = FILENAME; @@ -175,17 +186,22 @@ main(int argc, char *argv[]) weprintf("Array too big - using only the first %d elements\n", TESTNUMBER); Node *root = NULL; + clock_t start_time, elapsed = 0; - for (int i = 0; i < TESTNUMBER; ++i) { + if (cflag) + start_time = clock(); + for (int i = 0; i < TESTNUMBER; ++i) root = add(root, arr[i]); - SET_COLOR(root, BLACK); + if (cflag) + elapsed += clock() - start_time; + + volatile uintptr_t checksum = 0; /* to avoid optimization */ + if (sflag) { + start_time = clock(); + for (int i = 0; i < TESTNUMBER; ++i) + checksum = (uintptr_t)search(root, arr[i]); + elapsed += clock() - start_time } - volatile uintptr_t checksum = 0; /* to avoid optimization */ - clock_t start_time, end_time; - start_time = clock(); - for (int i = 0; i < TESTNUMBER; ++i) - checksum = (uintptr_t)search(root, arr[i]); - end_time = clock(); - printf("%f\n", (double)(end_time-start_time)/CLOCKS_PER_SEC); + printf("%f\n", (double)elapsed/CLOCKS_PER_SEC); } diff --git a/fib.c b/fib.c @@ -73,19 +73,19 @@ main(int argc, char *argv[]) usage(); - clock_t start_time, time = 0; + clock_t start_time, elapsed = 0; if (cflag) start_time = clock(); Node *root = create(estrtonum(argv[0], 0, UINT_MAX)); if (cflag) - time += clock() - start_time; + elapsed += clock() - start_time; volatile unsigned long int fib = 0; /* to avoid optimization */ if (sflag) { start_time = clock(); fib = count(root); - time += clock() - start_time; + elapsed += clock() - start_time; } - printf("%f\n", (double)time/CLOCKS_PER_SEC); + printf("%f\n", (double)elapsed/CLOCKS_PER_SEC); } diff --git a/rb.c b/rb.c @@ -101,12 +101,23 @@ usage(void) int main(int argc, char *argv[]) { - argv0 = argv[0]; - if (argc > 2) + int cflag = 0, sflag = 0, dflag = 0; + ARGBEGIN { + case 'c': + cflag = 1; + break; + case 's': + sflag = 1; + break; + case 'd': + dflag = 1; + break; + } ARGEND + if (argc > 1) usage(); const char *filename; - if (argc == 2) - filename = argv[1]; + if (argc == 1) + filename = argv[0]; else filename = FILENAME; @@ -134,17 +145,24 @@ main(int argc, char *argv[]) weprintf("Array too big - using only the first %d elements\n", TESTNUMBER); Node *root = NULL; + clock_t start_time, elapsed = 0; + if (cflag) + start_time = clock(); for (int i = 0; i < TESTNUMBER; ++i) { root = add(root, arr[i]); SET_COLOR(root, BLACK); } - + if (cflag) + elapsed += clock() - start_time; + volatile uintptr_t checksum = 0; /* to avoid optimization */ - clock_t start_time, end_time; - start_time = clock(); - for (int i = 0; i < TESTNUMBER; ++i) - checksum = (uintptr_t)search(root, arr[i]); - end_time = clock(); - printf("%f\n", (double)(end_time-start_time)/CLOCKS_PER_SEC); + if (sflag) { + start_time = clock(); + for (int i = 0; i < TESTNUMBER; ++i) + checksum = (uintptr_t)search(root, arr[i]); + elapsed += clock() - start_time + } + + printf("%f\n", (double)elapsed/CLOCKS_PER_SEC); }