streecmp/README
2024-08-28 20:30:33 +02:00

74 lines
2.8 KiB
Plaintext

+==============+
| streecmp |
+==============+
Fast*er* string comparison - an alternative to thousands of strcmp calls
This is an O(n) solution - n being the length of the string to be checked.
A plus is that this method will stay O(n) *no matter the length of the string
nor the number of strings to be checked against*.
Potential minuses might be the additional memory needed to store the trie
data structure or the computational time required to generate the tree before
utilizing it. Therefore, users are advised to use a secure, fast hashmap
instead of streecmp. streecmp is only applied to specific scenarios where
a rather simple or fast solution for string comparison is required so the
project moves on.
RES: en.wikipedia.org/wiki/Trie
RES: en.wikipedia.org/wiki/Suffix_tree
RES: en.wikipedia.org/wiki/Radix_tree
RES: facweb.cs.depaul.edu/mobasher/classes/csc575/Suffix_Trees/index.html
TECHNICALS
struct nod
* data structure that represents a node of the tree
void frenod(struct nod *nod)
* free memory of node and all of its children
struct nod *allocnod(void)
* allocate memory for a node and its pool size for
character hashmap
* returns: poiner to said node or NULL if function fails
struct nod *mknod(struct nod *nod, int loc)
* create a child node below given parent node
* loc is the character of the node (consult source code
of mkstr for more information)
* returns: pointer to said node or NULL if function fails
int mkstr(struct nod *nod, char *str)
* fit string into tree if it does not already exist
* warning: string has to be null-byte terminated
* returns: the assigned ID of the string, 0 if string
is already inside tree, or -1 if function fails
int gentree(struct nod *nod, char *strs, char *delim)
* generate tree from character seperated strings
* if delim is NULL, then "\n" is assumed
* warning: seperation character is '\n'
* returns: 0 if ok or -1 if function fails
int streecmp(struct nod *nod, char *str)
* traverse tree and search for str
* returns: id of string or 0 if there is no match
test.c provides a practical example for comparing against
HTTP header fields
LEAKS
LEAKS file contains the most recent valgrind memory leaks
dump ran on test.c.
TODO
* feat: add length option - streencpy
* feat: ++ strong or loose -- comparison option
COMMITS
Each commit is prefixed with an indicator token of what the change is
*mostly* about. List of tokens is:
* repo: change docs or code style
* feat: implement new change
* fix: implement fix for a bug