# poc-dict
**Repository Path**: luccas/poc-dict
## Basic Information
- **Project Name**: poc-dict
- **Description**: 大二上《数据结构与算法》课设
迷你英汉电子词典 PocDIct
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-12-03
- **Last Updated**: 2022-12-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# PocDict
## 介绍
大二数据结构课设 - 迷你英汉电子词典 PocDIct
## 技术栈
编程语言:Java
版本管理:Git
IDE:Idea
## RELEASE1.0
### 数据结构(开散列表):
1. Record:单词及其翻译
2. SortedLinkedList:有序(字典序)双向链表,数据域为Record,满足基本CURD
3. Dictionary:字典,由开散列Hash表组成,满足基本CRUD
1. Hash数组大小26,对应26个字母
2. 数组存储对应SortedLinkedList;
4. ~~布隆过滤器(否决)~~
否决原因:不支持删除
> 使用布隆过滤器的初衷在于过滤单词访问,当遇到过滤器中不存在的单词不进行查询,直接驳回请求。
>
> 这也是布隆过滤器的主要适用场景之一,隔离数据源和请求(无效请求隔离)。
>
> 伴随着亿级数据过滤能力和空间占用少的强大优点的,是其存在误判和无法支持数据源进行数据删除的缺点。
>
> - 误判:由于生成hash是一种信息压缩算法,存在的hash冲突符合信息学中压缩导致的失真现象,所以对于存在hash冲突的结果会出现相同的判断,也就是误判。
>
> - 无法支持数据删除:与误判类似,由于过滤器中的结果是多方数据压缩后得到的结果,同样的结果可能来自不同的记录,如果删除数据的同时,删除其对应的hash,会导致与其存在hash冲突的记录全部被视为"删除",造成更严重的“误判”。
### 工具类:
1. Wordloader:单词加载类,配合多线程、文件IO实现字典数据初始化。
### 页面:
1. TranslationGui:翻译界面
2. CreateRecordGui:新增记录界面
3. DeleteRecordGui:删除记录界面
## RELEASE2.0
### 数据结构
#### 核心数据结构升级为前缀树
- TrieNode:前缀树节点
1. 使用数组存放当前前缀的下一位前缀索引
1. 如果从头到当前位是一个单词,则存储其翻译
- Dictonary:字典
1. 维护一个前缀树的根节点,支持基本CRUD
**优点**:
1. 减少了相同前缀单词的存储浪费
2. 支持动态查询(数据结构层面)
3. 不存在hash冲突,解决了hash表因大量hash冲突带来的性能下降
**缺点**:
1. 可能出现一个单词单独占用了一条分支,形成单支树,相比直接存,占用更多内存。
2. 增加和删除时的逻辑处理更麻烦,耗时更久
3. 采用数组存放后缀,因此只支持ASCII码大于等于0的字符存储,形如`'-'、'\'、'.'`存储不便
### 工具类
#### Wordloader:为支持新的数据结构做了一些优化
## RELEASE3.0
### 更新:
1. 核心数据结构升级为AVL树(一种平衡二叉查找树)