一、工作原理 拼写纠错 这是一个单词拼写纠错程序。分为客户端与服务端。
客户端使用select多了IO实现,轮询监听用户输入
与服务端socketfd的输入。
服务端使用线程池实现。服务端主线程负责接收用
客户端请求,将客户端请求词封装成任务,再用锁机制
将任务添加到线程池中的任务队列中。工作线程通过互
斥量和条件变量访问任务队列,实现线程同步,使得线
程池有序工作。
每个工作线程独立完成自己的任务:到索引中查询
包含构成该单词的所有字母的单词的下标。为了避免重
复查询和计算,先将所用的字母对应的单词的下标集合
进行取交集,得到唯一的单词的下标的集合。再遍历集
合到词典中进行查找,同时计算单词与查询词的最小编
辑距离(Min Eidt Distance),将查找出的单词封装成
一个对象(包含单词、词频、最小编辑距离),放入优先
级队列中;
优先级队列的排序规则是:优先最小编辑距离
如果编辑距离相同则按词频大小,如果编辑距离,词频大
小相同则按照单词在字典中按照26个字母的大小。
二、项目目的 我们的目的是让服务器给客户端返回一个编辑距离 最小的单词。即,如果词典中包含查询词,则返回正确 的单词,如果词典中没有该单词,则返回与该单词最相 近的单词。
三、涉及知识 1、使用动态规划算法计算单词间的最小编辑距离 2、多了IO模型,考虑高并发,可选用epoll 3、线程,线程池,线程同步 4、STL 5、C++11 fuction_bind实现多态。 6、Socket网络编程
四、编译方式 项目使用GNU make进行编译,makefile文件放置src 子文件夹中,其余工作仅仅需要在shellscpt中进行。 脚本运行顺序为: 1、./compile.sh 编译 2、./install.sh 安装 3、./clean.sh 清理 4、./run.sh 运行
如果已经编译与安装之后,仅仅需要运行run.sh文件即可。