ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-09-28 10:03:57  阅读:191  来源: 互联网

标签:WORD 列表 单词 拼写错误 文档 数组 hash 散列 空闲


散列表: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文档中如何检测单词的拼写错误


标签:WORD,列表,单词,拼写错误,文档,数组,hash,散列,空闲
来源: https://www.cnblogs.com/chinatrump/p/11601666.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有