英语词典的维护和识别 题集P168,课本P249 问题描述:

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

一、页面设置:版心和页边距 1 、版心: 宽度 —— 版面中文字部分的宽度。(纸张宽度 — 左右页边距) 高度 —— 版面中文字部分的高度。(纸张高度 — 上下页边距) 2 、页边距:纸张边缘与文字之间的距离。
市直单位财务明细信息表 填报说明 珠海市财政局 2013年12月 1.
第5章 排版的高级应用.
通用技术教学与实践 常德市鼎城区第八中学 刘启红.
创业计划书的编写 白城师范学院创业教育 与文化研究中心 陆东辉.
生物学 新课标.
AI人工智慧報告 黑白棋 班級:資工四乙 學號:498G0009 姓名:盧冠妤.
第三章 鏈結串列 Linked List.
經濟部文書作業實務 報告人:何國金.
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
2010年高考语文《考试大纲》对本考点的要求是:“正确使用标点符号。”能力层级为D(表达应用)。
崇右技術學院 電子公文線上簽核系統教育訓練
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
注重物理基本思想和方法教学 讲究实效 ——2012年高考物理复习备考建议
經國管理學院 電子公文線上簽核系統教育訓練
第九章 字符串.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Linked List Operations
單向鏈結串列 Singly Linked Lists.
其他类型的链表主要内容 静态链表 循环链表 双向链表.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
C#程序设计基础 $5 流程控制.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第七章 搜索结构 静态搜索结构 二叉搜索树 AVL树.
第12章 樹狀搜尋結構 (Search Trees)
辅导课程六.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第3章 栈和队列(一).
第二章 Java语言基础.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
SOA – Experiment 2: Query Classification Web Service
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
國有公用財產管理簡介 總 務 處 保管組 104年04月07日.
顺序表的删除.
英 语 26 个 字母 的 复习训练.
第二章 Java基本语法 讲师:复凡.
单链表的基本概念.
第 四 讲 线性表(二).
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
功能表的建立 製作.
3.16 枚举算法及其程序实现 ——数组的作用.
树和图 tree and graph 蔡亚星.
進階資料結構(2) Disjoint Sets
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Topic 1 Welcome to China! Section A.
第七、八次实验要求.
大学计算机基础——周口师范学院 第3章 Word字处理软件 3.8页眉与页脚.
#define RBTREE_RED 0 #define RBTREE_BLACK 1 typedef int dataType; typedef struct treeNode{ dataType key; int color; //red:0.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
顺序查找与二分查找复习.
Chapter 2 Entity-Relationship Model
本节内容 1. 平衡二叉树的定义 2.平衡化旋转 3.平衡二叉排序树的插入操作 昆山爱达人信息技术有限公司
最小生成树 最优二叉树.
走讀台灣旅遊計畫範本.
第三章 图形的平移与旋转.
Presentation transcript:

英语词典的维护和识别 题集P168,课本P249 问题描述: Trie树通常作为一种索引树,这种结构对于大小变化很大的关键字特别有用。利用Trie树实现一个英语单词辅助记忆系统,完成相应的建表个查表程序。

【基本要求】 不限定Trie树的层次,每个叶子结点只含一个关键字,采用单字符逐层分割的策略。实现Trie树的插入、删除和查询的算法,查询可以有两种方式:查询一个完整的单词或者查询以几个字母开头的单词。 【测试数据】 自行设定。 【实现提示】 以实习三中已实现的串类型或C语言中提供的长度不限的串类型表示关键字,叶子结点内应包括英语单词。 【选作内容】 限定Trie树的层次,每个叶子结点可以包含多个关键字。

Trie树的定义 Trie树是一棵度 m ≥ 2 的树,它的每一层分支不是靠整个关键码的值来确定,而是由关键码的一个分量来确定。 如下图所示Trie树,关键码由英文字母组成。它包括两类结点:元素结点和分支结点。元素结点包含整个key数据;分支结点有27个指针,其中有一个空白字符‘b’,用来终结关键码;其它用来标识‘a’, ‘b’,..., ‘z’等26个英文字母。 在第0层,所有的关键码根据它们第0位字符, 被划分到互不相交的27个类中。 因此,root→brch.link[i] 指向一棵子Trie树,该子Trie树上所包含的所有关键码都是以第 i 个英文字母开头。 若某一关键码第 j 位字母在英文字母表中顺序为 i ( i = 0, 1, ?, 26 ), 则它在Trie树的第 j 层分支结点中从第 i 个指针向下找第 j+1 位字母所在结点。当一棵子Trie树上只有一个关键码时,就由一个元素结点来代替。在这个结点中包含有关键码,以及其它相关的信息,如对应数据对象的存放地址等。

Trie树的三个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 。 每个节点的所有子节点包含的字符都不相同。

例子: 这是一个Trie结构的例子: 在这个Trie结构中,保存了t、to、te、tea、ten、i、in、inn这8个字符串,仅占用8个字节(不包括指针占用的空间)。

void Insert(string str, Word *info) //插入 在Trie树上的插入和删除: void Insert(string str, Word *info) //插入     {         int len = str.length();         Node *p = root;         for (int i = 0; i < len; i++)         {             p->cnt++;             int now = str[i] - 'a';             if (NULL == p->next[now])                 p->next[now] = new Node();             p = p->next[now];         }         p->cnt++;         p->info = info;     }

void DeleteSubtree(Node *p) //删除     {         for (int i = 0; i < MAX_SIGMER; i++)             if (NULL != p->next[i])                 DeleteSubtree(p->next[i]);         delete p;     }     ~Trie()     {         DeleteSubtree(root);     }

stack<Node*> q; Node *p = root; int len = str.length();   bool Delete(string str) { stack<Node*> q; Node *p = root; int len = str.length(); //find the node, or exit the function for (int i = 0; i < len; i++) int now = str[i] - 'a'; if (NULL == p->next[now]) return false; q.push(p); p = p->next[now]; } if (p->info==NULL) delete p->info; p->info = NULL; //delete the node which is needn't while (!q.empty()) p = q.top(); q.pop(); p->cnt--; if (0 >= p->cnt) delete p; return true;

Word* Find(string str)//搜索 { Node *p = root; int len = str.length(); for (int i = 0; i < len; i++) int now = str[i] - 'a'; if (NULL == p->next[now]) return NULL; p = p->next[now]; } return p->info;

算法的特色: 在程序中用了析构, 作用相当于free, 把不用的数组或指针释放, 节省空间。

谢谢观赏