博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Individual Project - Word frequency program
阅读量:5320 次
发布时间:2019-06-14

本文共 1083 字,大约阅读时间需要 3 分钟。

1.做这个项目之前,因为之前在OO课中做过一些项目,这钟算法也非常熟悉,因此算上单纯的词法算法,和C#语言中文件操作的学习,预计一天之内应该可以写好。

2.实际上做起来时,我发现c#与之前学过的java还是有些差别的,算法非常简单,但是学习使用c#花了许多时间,零零碎碎共做了2天。

3.原本一直认为程序的最大资源使用会是单词按词频排序,但是经过算法的分析,还是单词+空格+单词这种格式的判断比较耗费时间

我的算法是这样的:读入一个文本文件的所有字符,以一个字符串形式储存。从头到尾遍历字符串,认为大小写字母和数字都是“字符”,其他都是分隔符,这样整个字符串就是这样的形式:

                           字符+分隔符+字符+分隔符+...

将所有字符按顺序存储于一个数组中,将所有分隔符也储存在一个数组中。

这样第i个分隔符的左右两个字符就是第i个字符和第i+1个字符(若i+1还在字符数组的范围内)

字符并不是等同于要求中的单词,需要经过检查。

建立单词类,由一个字符串“单词” 和一个整形数“数量”组成。

功能1:新建单词数组,从前往后遍历字符数组,有符合单词的条件的字符就加入数组。数组在加入单词时检查这个单词(无视大小写)是否存在过,若不存在新加单词,若存在则数量加1并更新这个单词的大小写。然后数组按单词词频排序,数量相等的单词按名称字典序升序排序。

功能2:新建“双单词”数组,遍历分隔符数组,若分隔符是单个空格,则检查这个分隔符两旁的字符是否都是单词(若越界则不检查),若都是单词,将这个“左单词”+“ ”+“右单词”

的字符串加入“双单词”数组中,处理方法同功能1,输出词频前10位。

功能3:新建“三单词”数组,遍历分隔符数组,若连续两个分隔符都是单个空格,则检查这两个分隔符附近的三个字符是否都是单词(若越界则不检查),若都是单词,将这个“左单词”+“ ”+“中单词”+“ ”+“右单词”的字符串加入“三单词”数组中,处理方法同功能1,输出词频前10位。

 

4.测试用例:共取了纽约时报上的10篇文章,有些位于测试文件目录下,有些位于测试文件目录中的文件目录下

与我的队友一起测试,将取得的结果进行对比。

 

5.要提高程序效率,一个好的算法非常重要,这少不了编程前的细致分析。另外,我注意到,我写的程序的可移植性很差,整体来看功能是可以的,但是内部几个部分的编程风格还是十分粘滞,我写其他程序时经常要把已经写过的功能再写一遍。这并不是什么好习惯,我在以后的编程过程中一定会注意。

转载于:https://www.cnblogs.com/wyjbjl/p/3993846.html

你可能感兴趣的文章
Atitit.进程管理常用api
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
原生JavaScript第六篇
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
给C#学习者的建议 - CLR Via C# 读后感
查看>>