这次作业主要问题出现在数据结构没有考虑周全,由于以前作业都是有限少量数据测试,一开始的时候使用了定长的数组来存储数据,当读取文件的数据大小超过1MB时程序就崩溃了,后来修改用list进行存储,但是使用测试144MB的数据程序跑的时间过长,19分钟。最后的版本使用了sortdictionary来存储数据,list来进行字典序排序,程序运行所欲要的时间大大缩小了,不到1分钟就跑完了144MB的数据。同时因为作业要求改动而对原程序修改工作量较大,从中看出为我的程序结构化还不够好,函数方法之间功能模块之间功能有很多重叠,导致要求更改后许多功能模块都得重写,显得很蛋疼。
从图中看出,主函数中存储部份比重最大,其中count函数(统计单词和单词数量)占其中97.1%,而统计时调用isrepeat函数(判断是否重复)占其中86.2%,调用sortdictionary的ContainsKey花费了其中一半时间。可以看出这个程序主要花费在存储方面的时间最长,节省存储时间就能显著提高效率,使用更优的存储结构最为明显。使用了sortdictionary的效率确实比只使用list的效率高!