C语言 运用散列函数拼写检查

来源:百度知道 编辑:UC知道 时间:2024/05/19 18:30:03
缺席了几节课,后天要交作业了,但现在基本是一头雾水…… Q_Q

请问如何运用散列(hashing)实现拼写检查。要求是给一个字典文件(Dictionary.txt),和一个示例文件(test.txt),然后检查示例文件中拼写错误的单词并且指出。

1.使用流(stream),而不是标准输入(stdin)读取字典文件(dictionary.txt)。字典文件每行是一个单词
2.将每个单词加入抽象数据库表(Table Abstract Data Type),该表会通过多项式散列公式(polynomial hashing algorithm)散列。该抽象数据库表可以包含以下方程:
* int hash(char *word)
* void initDictionary(char *fileName)
* void destroyDictionary(void)
* Bool lookupDictionary(char *word)
3.读入示例文件
4.检查示例文件中的每个单词,如果拼写错误,一次性输出提示该错误单词出现的行数。例如:
错误的单词 "DDD" 位于行数: 1, 5, 6,9,13,15……
错误的单词 "GNU" 位于行数: 1, 1, 6, ...
*注意内存释放,所有单词转换为小写(或大写)。

大体是这样了,哪位好心人帮忙写下。好的话我会加分!!非常感谢!
谢谢一楼的回复。
散列函数给出了:
for(hashVal = 0;*s != '\0';s++)
hashVal = *s + 31 * hashVal;
return hashVal % HASHSIZE

个人不明白的几个地方是:如何保存Dictionary.txt文件?是用链表,还是array,或者其他方法?是保存单词字符串(string)还是哈希值(hash value)?具体怎么操作?
最后输

可以考虑建一个桶式的散列表,表的主体结构是个长为26*27的指针数组,每个指针分别指向一个子链表,每个链表分别存放开头为a,aa,ab,ac......g,ga,gb,......zy,zz为单词.(不区分大小写)
这样的话,假设单词存放在字符串str中,则散列函数就是
h(str)=(str[0]-'A')*27+str[1]-'A'

从题目给的散列函数就可以明显看出,散列表肯定要用长度为HASHSIZE的数组啊,你的链表设想肯定不符合题目要求

把楼主当宝搞是吧!