From e0f63df0c826f7be0547929755ec5c67ace2cade Mon Sep 17 00:00:00 2001 From: Kaehvaman Date: Fri, 6 Dec 2024 20:08:12 +0400 Subject: [PATCH] finish tests of lab26 --- lab25/lab25/sort test.xlsx | Bin 12717 -> 12729 bytes lab26/TextProcessingDict/Dict.h | 2 +- lab26/TextProcessingDict/DictHash.c | 38 ++++++++++++++++-- lab26/TextProcessingDict/DictLinkedList.c | 3 +- lab26/TextProcessingDict/DictSortedArray.c | 16 ++++++-- lab26/TextProcessingDict/DictTree.c | 4 +- lab26/TextProcessingDict/TextProcessing.c | 2 +- .../TextProcessingDict.vcxproj | 6 +++ .../TextProcessingDict.vcxproj.filters | 12 ++++++ lab26/TextProcessingDict/out/Alice_out.html | 2 +- .../TextProcessingDict/out/Tolkien2_out.html | 2 +- lab26/TextProcessingDict/out/Tolkien_out.html | 2 +- ..._реализаций_Словаря.xlsx | Bin 18373 -> 21496 bytes 13 files changed, 73 insertions(+), 16 deletions(-) diff --git a/lab25/lab25/sort test.xlsx b/lab25/lab25/sort test.xlsx index 9eb8895222fa3c957a1b95def03f187c9bfa3b75..b8180b65db282d498e9c24d79d853e890b47571c 100644 GIT binary patch delta 7102 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 F{|CdTlY9UG delta 7120 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 diff --git a/lab26/TextProcessingDict/Dict.h b/lab26/TextProcessingDict/Dict.h index 343ef33..e18fe52 100644 --- a/lab26/TextProcessingDict/Dict.h +++ b/lab26/TextProcessingDict/Dict.h @@ -1,6 +1,6 @@ #pragma once -#define DICT_ARRAY_C +#define DICT_TREE_C /* : diff --git a/lab26/TextProcessingDict/DictHash.c b/lab26/TextProcessingDict/DictHash.c index 23600ad..2588618 100644 --- a/lab26/TextProcessingDict/DictHash.c +++ b/lab26/TextProcessingDict/DictHash.c @@ -1,21 +1,26 @@ // // // - -#ifdef DICT_HASH_C - #define _CRT_SECURE_NO_WARNINGS #include #include #include "Dict.h" +#include "fnvhash_32a.h" +#include "jhash.h" -#define MAX_HASH 13267 +#ifdef DICT_HASH_C struct Node { char* word; struct Node* next; }; +#define FNV_HASH + +#if defined VLASENKO_HASH + +#define MAX_HASH 13267 + // struct Node* first[MAX_HASH]; @@ -30,6 +35,31 @@ int hash(char* word) { return hash_value % MAX_HASH; } +#elif defined JHASH + +#define MAX_HASH 16384 + +// +struct Node* first[MAX_HASH]; + +int hash(char* word) { + int hash_value = (int)jhash(word, strlen(word) + 1, FNV1_32A_INIT); + hash_value = hash_value & hashmask(14); +} + +#elif defined FNV_HASH +#define MAX_HASH 16384 + +// +struct Node* first[MAX_HASH]; + +int hash(char* word) { + int hash_value = (int)fnv_32a_str(word, FNV1_32A_INIT); + hash_value = TINY_FNV(14, hash_value); +} + +#endif + /* INSERT . . , . diff --git a/lab26/TextProcessingDict/DictLinkedList.c b/lab26/TextProcessingDict/DictLinkedList.c index b2f70d4..e07e14d 100644 --- a/lab26/TextProcessingDict/DictLinkedList.c +++ b/lab26/TextProcessingDict/DictLinkedList.c @@ -1,5 +1,3 @@ -#ifdef DICT_LINKED_LIST_C - // // // @@ -9,6 +7,7 @@ #include "Dict.h" +#ifdef DICT_LINKED_LIST_C // struct Node { diff --git a/lab26/TextProcessingDict/DictSortedArray.c b/lab26/TextProcessingDict/DictSortedArray.c index 1df2fa9..df4bb38 100644 --- a/lab26/TextProcessingDict/DictSortedArray.c +++ b/lab26/TextProcessingDict/DictSortedArray.c @@ -1,9 +1,10 @@ -#ifdef DICT_SORTED_ARRAY_C - #define _CRT_SECURE_NO_WARNINGS #include +#include #include "Dict.h" +#ifdef DICT_SORTED_ARRAY_C + #define MAX_WORDS 10000 // @@ -48,6 +49,15 @@ MEMBER */ int Member(char* word) { // + + if (bsearch(word, words, numWords, sizeof(char), strcmp)) { + return 1; + } + else { + return 0; + } + + /* int left = 0; int right = numWords - 1; @@ -65,7 +75,7 @@ int Member(char* word) { right = middle - 1; } } - return 0; + return 0;*/ } #endif diff --git a/lab26/TextProcessingDict/DictTree.c b/lab26/TextProcessingDict/DictTree.c index bec342a..38185b1 100644 --- a/lab26/TextProcessingDict/DictTree.c +++ b/lab26/TextProcessingDict/DictTree.c @@ -2,13 +2,13 @@ // // -#ifdef DICT_TREE_C - #define _CRT_SECURE_NO_WARNINGS #include #include #include "Dict.h" +#ifdef DICT_TREE_C + // struct NodeTree { char* word; diff --git a/lab26/TextProcessingDict/TextProcessing.c b/lab26/TextProcessingDict/TextProcessing.c index 98316d7..10e3757 100644 --- a/lab26/TextProcessingDict/TextProcessing.c +++ b/lab26/TextProcessingDict/TextProcessing.c @@ -119,7 +119,7 @@ int TextProcessing(char* filenameIn, char* filenameOut) { fprintf(fout, ""); fprintf(fout, ""); fprintf(fout, ""); - fprintf(fout, ""); + fprintf(fout, ""); fprintf(fout, "HTML Document"); fprintf(fout, ""); fprintf(fout, ""); diff --git a/lab26/TextProcessingDict/TextProcessingDict.vcxproj b/lab26/TextProcessingDict/TextProcessingDict.vcxproj index 668cb34..ea856e1 100644 --- a/lab26/TextProcessingDict/TextProcessingDict.vcxproj +++ b/lab26/TextProcessingDict/TextProcessingDict.vcxproj @@ -104,10 +104,12 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true + ..\..\hash functions Console true + 4194304 @@ -127,6 +129,8 @@ + + @@ -135,6 +139,8 @@ + + diff --git a/lab26/TextProcessingDict/TextProcessingDict.vcxproj.filters b/lab26/TextProcessingDict/TextProcessingDict.vcxproj.filters index 9463f85..c245e21 100644 --- a/lab26/TextProcessingDict/TextProcessingDict.vcxproj.filters +++ b/lab26/TextProcessingDict/TextProcessingDict.vcxproj.filters @@ -33,10 +33,22 @@ Исходные файлы + + Исходные файлы + + + Исходные файлы + Файлы заголовков + + Файлы заголовков + + + Файлы заголовков + \ No newline at end of file diff --git a/lab26/TextProcessingDict/out/Alice_out.html b/lab26/TextProcessingDict/out/Alice_out.html index b37dfc6..f8abb40 100644 --- a/lab26/TextProcessingDict/out/Alice_out.html +++ b/lab26/TextProcessingDict/out/Alice_out.html @@ -1,4 +1,4 @@ -HTML DocumentAlice's Adventures in Wonderland
+HTML DocumentAlice's Adventures in Wonderland
Lewis Carroll


diff --git a/lab26/TextProcessingDict/out/Tolkien2_out.html b/lab26/TextProcessingDict/out/Tolkien2_out.html index 7411698..39cfbcc 100644 --- a/lab26/TextProcessingDict/out/Tolkien2_out.html +++ b/lab26/TextProcessingDict/out/Tolkien2_out.html @@ -1,4 +1,4 @@ -HTML DocumentThe Fellowship of the Ring
+HTML DocumentThe Fellowship of the Ring
J. R. R. Tolkien


diff --git a/lab26/TextProcessingDict/out/Tolkien_out.html b/lab26/TextProcessingDict/out/Tolkien_out.html index cf3fa98..1eb9e57 100644 --- a/lab26/TextProcessingDict/out/Tolkien_out.html +++ b/lab26/TextProcessingDict/out/Tolkien_out.html @@ -1,4 +1,4 @@ -HTML DocumentThe Fellowship of the Ring
+HTML DocumentThe Fellowship of the Ring
J. R. R. Tolkien


diff --git a/lab26/ФИСТ2024_ЛР26_Время_работы_разных_реализаций_Словаря.xlsx b/lab26/ФИСТ2024_ЛР26_Время_работы_разных_реализаций_Словаря.xlsx index 8a1c6d41b3f1f1cb316b32a57bfe628654ccdb5d..ae1a3b982e6288f7110c2436de5e36fe46664b22 100644 GIT binary patch delta 11930 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 B5oG`X