//}}AFX_MSG
DECLARE_MESSAGE_MAP() };
表2 CAboutDlg类说明表
名称 DicObject m_EDIT1 m_EDIT2 M_hIcon 属性 数据成员 数据成员 数据成员 数据成员 说明 创建词典类的一个实例 存放单词的字符变量 存放单词的字符变量 创建Icon类的一个实例 声明消息 进行数据交换 构造函数 对话框函数 系统命令函数 重绘函数 回调函数 按钮行为方法 按钮行为方法 按钮行为方法 DECLARE_MESSAGE_MAP() 成员方法 成员发法 DoDataExchange() CDictionDlg () OnInitDialog() OnSysCommand() Onpaint() OnQueryDragIcon() OnInsertButton1() OnInsertButton2() OnInsertButton3() 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 5、特色算法分析 在函数或成员方法里找出你认为比较有特色的1~2个算法。
1. Search_Seq方法
顺序查询算法,找到则返回在数组中的相应位置。
功能:英汉词典单词的检索和匹配,采用数组形式的数据结构进行存储单词和意思,根据顺序查询算法,找到则返回在数组中的相应位置,结束查询操作。本函数将作为Button 1和Button 3所调用的行为和判断,在Button 1中主要是用来进行相关的判断,即Search_Seq(DicObject,m_EDIT1)是否为零,若查询结果为零说明找不到相应的单词,此时进行下一步的操作;在Button 3中主要作为被调用行为,即Search_Seq(DicObject,m_EDIT1)的值赋予所查单词在数组中的相应位置变量index。
算法思路:
(1)构造词典检索算法前分析如下: ? 词典检索算法的性能评价
? 时间复杂度 ? 空间复杂度 ? 检索方式
? 直接用词语检索
? 检索句子中某个位置开始的所有词 ? 检索句子中某个位置开始的最长词 ? 模糊检索 ? ……
? 增量式索引
- 15 -
? 两个问题
? 索引结构 ? 查找算法
? 一种索引结构可以对应不同的查找算法 (2)构造词典检索算法具体情形如下: ①词典顺序索引
②词典顺序索引的查找算法 ? 整词二分查找
? 时间复杂度O(log2N) ? 无法按前缀查找
? 改进的整词二分查找
? 时间复杂度O(log2N) ? 可以实现按前缀查找 流程图:
- 16 -
函数入口 接收词典类对象和待查询的单词 类对象数组首地址的单词成员初始化为待查询的单词 将类对象的数组长度赋给整型变量j 整型变量j自减1 j位置对应的单词是否跟待查询的单词一样? 是 返回j 函数出口
图5-1 顺序查询流程图
从流程图可以看出当j=0找到单词时返回值为零,即初始化的值,此时可以说明没有找到单词,因此区别有没找着单词在于返回值是否为零。
代码:
int Search_Seq(Dictionary DicObject,CString key) {//顺序查询算法,找到则返回在数组中的相应位置
DicObject.ArrayContent[0].WordStr=key; //否则返回0 for(int j=DicObject.length;DicObject.ArrayContent[j].WordStr!=key;--j); }
return j;
- 17 -
6、功能测试
下面通过查询单词、插入单词以及清除窗口显示内容进行测试。
图6-1 单词查询测试图
图6-2 单词窗口清除测试图
- 18 -