CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

字典搜索,急需,请尽快!

楼主songhtao(三十年孤独)2001-07-11 10:49:44 在 C++ Builder / 基础类 提问

有一英文字典文件,单词按字母排序以纯文本方式储存,请问有什么好的方法,搜索到指定词条。请注意字典非常庞大——600万单词、每个单词一行,不能使用数据库。请提出详细算法,并比较若干算法优劣。急需,请尽快。 问题点数:300、回复次数:29Top

1 楼iamxia()回复于 2001-07-11 10:52:27 得分 0

用二分查找试试Top

2 楼songhtao(三十年孤独)回复于 2001-07-11 10:53:13 得分 0

说过了,但经理不满意。要求节省内存,速度快。Top

3 楼wjzhuang(程序猪)回复于 2001-07-11 10:57:47 得分 150

分级存储Top

4 楼iamxia()回复于 2001-07-11 10:58:57 得分 50

试试分块查找怎么样Top

5 楼songhtao(三十年孤独)回复于 2001-07-11 11:01:41 得分 0

分块多级索引查找提过了,但经理未置可否。  
  要求考虑到内存碎片,和速度,另外请注意词条很多,不能一次输入内存。Top

6 楼iamxia()回复于 2001-07-11 11:05:52 得分 0

如果不行,那我得想想。Top

7 楼wjzhuang(程序猪)回复于 2001-07-11 11:14:13 得分 0

不用一次输入内存,分级的话还要有一个index文件,存储词条位置Top

8 楼iamxia()回复于 2001-07-11 11:15:17 得分 0

wjzhuang(醉里挑灯看剑--程序猪,说的对Top

9 楼songhtao(三十年孤独)回复于 2001-07-11 11:20:46 得分 0

怎么分级呀?详细点好吗?Top

10 楼gqxs(我心㊣飞翔)回复于 2001-07-11 11:24:25 得分 0

关注Top

11 楼iamxia()回复于 2001-07-11 11:24:58 得分 0

可以26字母分级,也可以按单词量来分级,方法很多。Top

12 楼iamxia()回复于 2001-07-11 11:27:11 得分 0

只要保证后面分级的都比排在前面的小或大(指ASCII)Top

13 楼luhongjun(过江项羽)回复于 2001-07-11 11:29:21 得分 100

使用流的方式,然后建立索引。索引文件非常小,全部掉入掉入内存也不是很站地方。  
  Top

14 楼iamxia()回复于 2001-07-11 11:32:56 得分 0

附,定义,希望对你有帮助。  
  分块查找是把表分成若干块,每块中的记录顺序是任意的,但块与块之间必须按照关键码有序,即第一块中任意一条记录的关键码都小于第二块中记录的关键码,而第三块中的小于第二......。  
  Top

15 楼songhtao(三十年孤独)回复于 2001-07-11 11:38:14 得分 0

单词长度不一致,建索引有困难。请教具体怎么建呀。Top

16 楼wjzhuang(程序猪)回复于 2001-07-11 11:53:17 得分 0

以字母分级,然后再比较多的字母,比如:a,b,c,d,e,p,这些字母还可以再次分级  
  具体要以何种标准来分级和分级的临界点你看看你的功能需要  
   
  使用链表或者哈希表可以解决长度问题  
   
  我以前好像有建过一个,就是几个数据结构的全套,具体的结构我现在记不得了Top

17 楼songhtao(三十年孤独)回复于 2001-07-14 14:42:46 得分 0

我是这样回答的,经理没说什么,要我参加项目,请大家帮我分析一下看看有什么问题。  
  字典搜索软件概要设计  
  1.引言  
  1.1   项目名称:  
  项目名称:字典搜索。  
  1.2   项目背景和内容概要:  
  1. 负   责   人:宋红涛  
  2. 内容概要:英文字典文件,单词按字母排序以纯文本方式储存。字典非常庞大——600                                            
                        万单词、每个单词一行,不能使用数据库。  
  1.3   项目目的:  
  从大英文字典文件中快速搜索到指定单词  
  2.概要设计  
  2.1基本设计概念和处理流程  
  1.数据分块法。  
  1. 内存中建立若干固定大小数组,数组元素为指向单词字符串的指针。  
  2. 从文件拷贝单词到数组。  
  3. 采用分块查找法——块内无需有序,因为单词按字母排序,所以块内单词有序。块  
  内按二分法查找。  
  4. 块间有序,待查字符串与最后块最后一条记录比较,在块中,再匹配各块查找。否则,内存中无待查单词,从文件读入后续数据到内存。  
  5. 重复2-4直到单词查到或查找失败。  
  优点:算法简单,有一定效率。  
  缺点:可能造成内存碎片。但可通过定期内存重组解决。有一定磁盘访问次数,可能降低效率,但可通过调整分块数和分块大小优化。  
  2.   分级索引法  
  1. 为英文字典建立索引文件  
  2. 索引文件格式:  
  单词(定长字符串)                       单词偏移量(长整数)  
  3. 读索引到内存一个表中  
  4. 查找索引,找到单词在文件中存在范围。  
  5. 直接在文件中查找单词是否存在。  
  6. 可采用多级索引,把索引存到内存,提高效率,尽量减少访问磁盘次数。  
  优点:效率高,速度快。  
  缺点:需要进行索引维护,索引的建立方式对性能影响较大,需要着重考虑。  
  3.   局部缓存法  
  1. 建立一小文件缓存经常访问的单词  
  2. 利用高速缓存匹配算法查找单词。  
  优点:20%的单词访问概率为80%极大的提高访问速度  
  缺点:高速缓存算法有多种,需要适当选择,建议采用自组织线性表法(1.移至顶端、2.交换、3.频率计数(不推荐)),实践证明简单、有效。  
  补充:最好和其他算法综合使用,以便一旦高速缓存未命中,也能较快的查找或证明查找失败。  
  4.查找树法  
  1. 建立B/B+树。  
  2. 叶为单词在文件中的偏移量,分子节点存储关键字。  
  优点:适合大量数据的快速查找,尤其是数据库。  
  缺点:算法较复杂,关键字的选择特别重要。  
  5.散列表法  
        优点:精确匹配效率高  
        缺点:不改变字典文件结构,我不知道实现。拟单词定长,因为是根据单词找地址,因此查找效率高,但插入删除涉及到大量磁盘i/o效率会极低,只能在后台进行。最后散列函数的选择是一个重点。  
  3.说明  
  时间仓促,来不及仔细考虑,也未涉及到具体实现。只是一个不完善的思路。  
  Top

18 楼songhtao(三十年孤独)回复于 2001-07-16 12:30:16 得分 0

请大家帮我看看呀。Top

19 楼wjzhuang(程序猪)回复于 2001-07-16 14:19:04 得分 0

写得很好呀~~~~~~~~  
  我乱说一些自己的看法,当成抛砖引玉就是了  
   
  方法1:我觉得比较笨重  
  方法2:应该和方法3结合使用  
  方法4:很不错的想法,关键字不知道使用字典的可以吗(就是出现在页右上角的那个)  
  方法5:文件存储结构就不能像你描述的那样了  
   
   
  大家快来看,这个题目很好的  
  Top

20 楼songhtao(三十年孤独)回复于 2001-07-16 15:24:44 得分 0

wjzhuang(醉里挑灯看剑--程序猪)  
  方法5:文件存储结构就不能像你描述的那样了  
  你是指我算法中的,还是指:  
  2.         内容概要:英文字典文件,单词按字母排序以纯文本方式储存。字典非常庞大——600       万单词、每个单词一行,不能使用数据库。  
  呀  
  Top

21 楼wjzhuang(程序猪)回复于 2001-07-16 15:37:44 得分 0

我是指  
  "英文字典文件,单词按字母排序以纯文本方式储存。字典非常庞大——600     万单词、每个单词一行"  
  这里内存结构应该是和文件一样的,不然又要建立一个index文件,这里用index不划算Top

22 楼sephil(NAILY Soft 【哈里波特大】)回复于 2001-07-16 15:48:07 得分 0

sephil无精打采的走了进来  
  有气无力的抬头看了看  
  又垂着头,无精打采的出去了  
  众人回头看时  
  依稀见他肩头扛着一块大木牌  
  上面似乎写着:  
           
            心情不好         无心答题Top

23 楼songhtao(三十年孤独)回复于 2001-07-16 16:18:41 得分 0

wjzhuang(醉里挑灯看剑--程序猪  
  同意Top

24 楼songhtao(三十年孤独)回复于 2001-07-18 20:40:18 得分 0

抛出了一块砖头,请大家来指正。Top

25 楼wjzhuang(程序猪)回复于 2001-07-19 09:29:46 得分 0

我来提提,这个问题很值得讨论Top

26 楼songhtao(三十年孤独)回复于 2001-07-20 20:58:30 得分 0

还请指点Top

27 楼wjzhuang(程序猪)回复于 2001-07-20 23:24:27 得分 0

up!Top

28 楼wjzhuang(程序猪)回复于 2001-07-20 23:25:36 得分 0

好的建议和说明我另加300分  
   
  另:孤独兄,刷新一下,有人找你Top

29 楼mailprint1()回复于 2002-06-20 08:47:13 得分 0

每行定长  
  单词排序  
  用TFileStream  
  用   Position   2分查找Top

相关问题

  • 字典搜索算法,急需,请尽快!
  • 急需搜索算法
  • 急!!!急需网站内文字搜索的查询代码!!!
  • 急需!!!!!!
  • 急需
  • 急需DreamWeaver4,FLASH5,FIREWORK4的序列号,请尽快发给我,不胜感激!
  • 数据字典
  • 求字典表!
  • 数据字典 ?
  • 字典维护

关键词

  • 文件
  • 内存
  • 算法
  • 字母
  • 排序
  • 文本
  • 单词
  • 字典
  • 查找
  • 索引

得分解答快速导航

  • 帖主:songhtao
  • wjzhuang
  • iamxia
  • luhongjun

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo