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


    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,而且存储了数百个单词的位置来加速查找,现在字典已经相当快了

    不过具体是怎么压缩的?

  • 相关阅读:
    C#连接Oracle数据库的连接字符串
    Oracle
    SQL 计算某月有多少天
    七牛开发者文档中心
    ocrstyle
    Linux的sys接口和proc接口创建
    BusHelper
    MeiTuanLocateCity
    Shop
    Win10预览版10162全新安装及激活全过程图解
  • 原文地址:https://www.cnblogs.com/mightofcode/p/2768400.html
Copyright © 2020-2023  润新知