当前位置: 首页 > news >正文

非法词判断

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一个大文件,里面存储了一批非法词,每行一个词。

需求是,我随便给你一句话,能快速的判断出这句话是否包含了非法词,具体哪些非法词? 

第一个关注点->算法

//

这个问题,常规的做法

1:逐行读文件,写到HashSet

2:forHashSet,对于每个word进行sentence.indexOf(word)>-1判断

通过循环Set的方式提取出句子中的非法词。

时间复杂度很容易得到:O(n),得留意下这里说的是大文件,这个n很大。能不能快一点呢?

//

使用Trie树

1:把文件中所有的非法词遍历出来,构建一颗Trie树

2:利用Trie树对sentence做分词处理("正向/反向最大匹配", "长词优先" 等策略),分得出来的词,则说明该sentence含有对应的非法词

Trie树查询时间复杂度O(1),这里忽略分词算法时间复杂度

这里真的就完美了吗?注意大文件Trie树利用HashMap做节点,巨耗空间,等于是在用空间换时间,可以考虑改进为DoubleArrayTrie树。有没有更好的方案?

//

使用BloomFilter

把字典压入BloomFilter

跟Trie树做分词差不多,只不过BloomFilter能更高效的利用空间。但是有小概率出现误判,在大数据面前无所谓了

检查时间复杂度依然是O(1),但空间的话可以省很多,即便是怕hash冲突,做多个BloomFilter

第二个关注点->如何加速文件读取速度,如果10GB怎么办?

这个方向我确实没有什么特别好的策略

唯一我知道的,能用文件内存映射技术实现IO加速

原理是,JVM要把文件读取到堆,一般情况下会经过文件->内核内存->JVM工作内存,中间存在一个数据拷贝的过程。

现代操作系统都使用虚拟内存,可以把多个虚拟地址可以映射到相同的物理地址,省去内核和用户空间之间的拷贝。

另外一种思路就是,把这个文件的信息,写入到HDFS上面去。加载的时候从HDFS上面拿,因为数据被打散到多台节点,我想读取的时候速度应该会快些。


转载于:https://my.oschina.net/u/236994/blog/534644

相关文章:

  • 教你爱上Blocks(闭包)
  • 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
  • 导出excel
  • Oracle坑爹入门踩坑篇
  • GPU大百科全书索引(有助于理解openGL工作流程)
  • 数据结构实例参考——“查找”的原理
  • git clone Gtk-WARNING **: cannot open display
  • 利用MAVEN打包时,如何包含更多的资源文件
  • js ajax 1
  • Linux git 文档
  • SQL2005SP4补丁安装时错误: -2146233087 MSDTC 无法读取配置信息。。。错误代码1603的解决办法...
  • 如何对DevExpress ASPxGridView进行分组排序?
  • EXECUTORSERVICE线程池讲解
  • iOS-技巧性总结
  • svn安装--linux环境
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android框架之Volley
  • Linux快速复制或删除大量小文件
  • Unix命令
  • yii2中session跨域名的问题
  • 聚类分析——Kmeans
  • 力扣(LeetCode)56
  • 微信小程序开发问题汇总
  • 我的zsh配置, 2019最新方案
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #QT(TCP网络编程-服务端)
  • #Z0458. 树的中心2
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (HAL库版)freeRTOS移植STMF103
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (补)B+树一些思想
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)计算机毕业设计高校学生选课系统
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net mvc总结
  • @基于大模型的旅游路线推荐方案
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ABC294Ex] K-Coloring
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [c]扫雷
  • [c++] 自写 MyString 类
  • [CTO札记]如何测试用户接受度?
  • [C语言]一维数组二维数组的大小
  • [English]英语积累本
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [git]git命令如何取消先前的配置
  • [HUBUCTF 2022 新生赛]