散列表:WORD文档中如何检测单词的拼写错误

散列表:WORD文档中如何检测单词的拼写错误

散列表用的是数组支持按照下标随机访问数据的特性,所以散列其实是数组的一种扩展,由数组演化而来。

散列表(哈希表 Hash Table):由散列函数(哈希函数)和数组构成,底层存储数据的是数组。

散列函数(键转化为散列值即数组下标)的设计:

  1. 散列值是非负整数;
  2. if key1 = key2, then hash(key1) == hash(key2);
  3. if key1 != key2, then hash(key1) != hash(key2).

散列冲突:即使著名的MD5、SHA、CRC等哈希算法也无法完全避免散列冲突。

常用散列冲突解决办法,分为两类:

  1. 开放寻址法

    • 线性探测(Linear Probing):步长为1的顺序遍历数组,寻找空闲空间(为了不破坏原来的散列算法,被删除的元素的空闲空间标记为deleted,然后继续往下寻找非deleted空闲空间)
    • 二次线性探测(Quadratic Probing):步长位($n^2$),线性遍历数组,寻找空闲空间
    • 二重散列(Double Hashing):键值依次输入散列函数组,直到找到空闲空间

    尽可能保证散列表中空闲元素的比例,空闲越少越容易冲突

    装载因子:散列表的装载因子 = 填入表中的元素个数 / 散列表的长度

  2. 链表法:在散列表中,每个散列值对应一个桶(bucket)或者槽(slot)散列值,每个桶或者槽对应一条链表。

WORD文档中单词拼写的检测:常用的英文单词20w个左右,假设每个单词的平均长度为10,平均一个单词占用10个byte的内存空间,那20w个单词占用2MB内存空间,即使扩大10倍,也只是20MB内存空间,以目前计算机设备的内存空间,是完全可以hold住的。将单词作为键,查找哈希表,如果返回值大于0,则存在,否则判断为拼写错误。

思考:

  1. 10w条URL访问记录,如何按照访问次数排序;
  2. 两个字符串数组,每个数组存放10w个字符串,如何寻找两个数组中相同的字符串。

思考1:将url作为key,次数作为value,同时记录最大次数max,时间复杂度O(n);只要最大次数不是特别大的值,例如,极端情况超过10w,可以采用桶排序O(n),否则采用快排,时间复杂度O(nlog n);

思考2:将一个数组存放进hash表,字符串作为key,value为出现次数;遍历另外一个数组的字符串作为key值去查找,如果有返回正值,则相同,否则,没有。时间复杂度O(n);

原文:大专栏  散列表:WORD文档中如何检测单词的拼写错误

原文地址:https://www.cnblogs.com/petewell/p/11601667.html

时间: 2024-10-02 18:18:50

散列表:WORD文档中如何检测单词的拼写错误的相关文章

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

把word文档中的所有图片导出

把word文档中的所有图片导出 end

利用POI操作不同版本word文档中的图片以及创建word文档

我们都知道要想利用java对office操作最常用的技术就应该是POI了,在这里本人就不多说究竟POI是什么和怎么用了.先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写入数据和向外导出数据并且保存到数据库中这些类似的操作,由于业务上的需要需要利用POI去读取word中的图片,并且去把图片去保存为一个file文件.查了Apache公司提供的api帮助文档,再网友的一些线索,本人也总结了几中对不同word版本(.doc或者是.docx结尾)对于文件中所含图片的操作方式,希望

利用POI操作不同版本号word文档中的图片以及创建word文档

我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写入数据和向外导出数据而且保存到数据库中这些类似的操作,因为业务上的须要须要利用POI去读取word中的图片,而且去把图片去保存为一个file文件.查了Apache公司提供的api帮助文档,再网友的一些线索,本人也总结了几中对不同word版本号(.doc或者是.docx结尾)对于文件里所含图片的操作方

Aspose.Words:如何添加另一个WORD文档中的Node对象

原文:Aspose.Words:如何添加另一个WORD文档中的Node对象 首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾: 1 var table = (Table)docSource.GetChild(NodeType.Table, 0, true); 2 docTarget.FirstSection.Body.ChildNodes.Add(table); 这段代码会抛出异常:“The newChild was created from a

C# 在Word文档中生成条

简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书还是各种商品上都随处可见,扫描条形码就可以查询这个商品的信息,非常方便. 生成 生成条形码分为两步,第一步需要先下载并在系统上安装条形码字体,安装条形码字体的步骤如下: 1.条形码的字体有很多种,如code39,code128等,网上有很多条形码字体,根据自己的需要选择条形码字体下载,然后在开始->运行里输入C:\Windows\F

使用Java POI来选择提取Word文档中的表格信息

通过使用Java POI来提取Word(1992)文档中的表格信息,其中POI支持不同的ms文档类型,在具体操作中需要注意.本文主要是通过POI来提取微软2003文档中的表格信息,具体code如下(事先需要导入POI的jar包): public static void testWord2() { try { FileInputStream in = new FileInputStream("july 2005 1.doc");// 载入文档 // FileInputStream in

如何在word文档中添加mathtype加载项

MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtype并没有加载到word文档中,本教程将教您解决如何手动添加mathtype加载项.        原因分析        这是因为word文档中缺少startup文件,只需要在word文档的安装目录下手动添加一个startup文件夹即可解决.        解决方案        步骤一 将安装好的

ASP.Net控制不同的人编辑word文档中不同的可编辑区域

ASP.Net控制不同的人编辑word文档中不同的可编辑区域的完整示例 2010-10-15 11:43238人阅读评论(0)收藏举报 网页来源:http://blog.csdn.net/coco99/article/details/5942895 本文演示了如何使用C#在ASP.NET里调用Word限制用户只能编辑word文档中自己有权编辑的区域. 1.项目目的 演示使用不同的用户登录系统,打开同一个文件(不必同时打开),可以编辑的区域不一样,每个人都有属于自己的编辑区域. 2.解决思路 利用