个人任务进度

在软件编写过程中并没有同时记录个人进度,在这里大致回顾一下。

3.25 Sun

开始着手编写程序,先开始写遍历文件夹的部分。消耗较多时间在上网查询 _ inddata_t 的相关用法上。最终从网上的案例中成功改编,完成文件夹的遍历。

3.26 Mon

今日满课,在晚上开始写读取文件内容部分。考虑较久以后,开始下手。采取 fread() 函数,将每一个可读取的文件直接装入一个数组,相较于一个个字符读入,速度有提高。

3.27 Tue

在下午第一节课下课后,开始编写程序。主要开始处理单词统计部分,思路为将每个单词分为单词部分和数字后缀部分,存入哈希表中。

由于对于 C++ 的 unordered_map 无法熟练使用,改用自己写哈希表,因而时间大大加长。

在当日成功完成函数,简单的遍历一次后,得出的最大单词数略有不同,决定睡觉。

3.28 Wed

上午满课,中午开始编程。

对于昨天单词数目不对的Bug做了修复,使用自己的小型测试集检查问题。具体问题为:当单词出现在文件最后,且单词后面没有分隔符时,会因个人的判断条件直接跳出,对该单词不进行统计。在每个文件末尾再次进行了一次统计后,成功解决问题。

着手写词组的函数。同样采取哈希表来储存,为了减少空间占用,并未直接将词组存入哈希表,而是将词组的两个单词在单词的哈希表中对应的位置存入词组哈希表。单词的哈希表采用开散列,由两个数值,哈希值 Key 和开散列中的链表的偏移量 Offset 即可唯一确定一个单词。因整体结构与单词哈希表类似,所用代码可以直接复制修改,该部分完成较快。

完成后,使用代码对自己的小测试集进行测试,没有发现问题。

晚上开始进行选出前十的代码编写,思路为在单词全部找出后,对哈希表进行遍历,找出前十。整体来说思路较为简单,但在实现时由于判断条件和访问越界,DeBug较长时间,在当日成功完成,输出前十的单词数与助教所给参考答案相同。

3.29 Thu

昨晚。或者说今早,1:00AM

由单词的前十排序改写词组的前十排序,结果出现大问题,完全不同。开始DeBug

发现Bug:由于在建立词组的哈希表时,两个单词相同的判断是使用了 stricmp() 函数,该函数当单词相同时,返回的值为零。而建立链表哈希表时,使用的判断条件是四个值是否相同,如果成立,返回的值为 1 ,故由于判断条件错误,导致哈希表并未成功开散列,相同哈希值的词组,会直接替换上一个。

2:00 AM 睡觉

7:00 AM 起床,继续调试程序

目前结果:单词前十与参考答案相同

词组前十有两个与参考答案不同,分别为 Span Span 和 Class Span ,相较于参考答案少 8 个与 24 个。

三个 num 都偏多。

目前词组问题仍未解决

还未开始进行 Linux 系统下的移植

原文地址:https://www.cnblogs.com/aiyz/p/8668887.html