您的位置:首页 > 编程语言

编程珠玑笔记-第13章习题

2012-11-13 17:32 148 查看
1,通过不断向intSet插入元素判断是否重复

stl::set使用二叉查找树,在当m=maxval时有最差情况

2,增加个bool find(int t)?,想不到怎么再让它更强壮了

3,无论是数组,链表,向量,insert要比find快一点点,但是都是同一个数量级的

4,减少了函数调用的开销,这是巨大的优化,而且不会栈溢出

5,一次分配,重复使用,类似的东西还有对象池,线程池等各种池

6,此时数组,链表,位向量,桶会达到最优情况,二叉查找树会达到最差情况

7,使用标记元素,插入时删除

8,不大理解,怎么"同时在许多位上"进行并行操作?

9,使用移位进行除法,这样每个桶都必须装2n个元素

10,没看懂题目

11,在基于集合的算法中,使用位向量+floyd的算法无疑是最快的

补充问题:spell程序

spell程序的作用是进行拼写检查,即检查某单词是否在词典中

首先,程序剥去前后缀,使75000个单词减少为30000个

然后,建立227位的散列表(合适的散列函数很重要),每个单词仅存储一位,总共有大概13000万位,但是只有3万个单词,这样单词已经相当稀疏了,某个单词不幸命中的概率为1/4000,也就是每4000个错误单词就会判断错一个,但是由于错误单词

出现的概率很低了,因此出错的概率可以接受,

最后,进行压缩,30000*27位有800k之多,压缩之后不到64k,而且存储了数百个单词的位置来加速查找,现在字典已经相当快了

不过具体是怎么压缩的?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: