streecmp/README

73 lines
2.7 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: ++strong++ and --loose-- comparison
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