cocos脏话过滤_字符串多模式精确匹配(脏字/敏感词汇/关键字过滤算法)——TTMP算法 之实战F模式...

本文介绍了TTMP算法在Cocos脏话过滤中的F模式应用,强调了算法的效率和代码优化。文章通过介绍FastDict、FastList等核心数据结构,阐述了算法如何提高关键字过滤的查找速度。虽然简化后的代码降低了可读性,但作者提到可以通过优化进一步提升性能。文中还探讨了哈希表的原理和冲突解决,为理解算法提供了帮助。
摘要由CSDN通过智能技术生成

前面那么多篇文章都太抽象,这次来一个稍微实际一点的。F模式是我实际上选用的模式,对该模式我做了不少实际的测试,因此代码也算是比较稳定的。不过由于实际上为了得到该算法的效率,算法本身做了一些优化,对于初学者,理解起来可能会有点困难,因此不适合直接贴原始代码。为了便于大家理解,这里出示的代码会比较好读,但是并不能取得我宣称的效果。大家可以在此基础上进行一定的优化,以便达到你所想要的性能。我目前版本的性能大约是:

T2080 1.73GHz(双核) 笔记本 1.5GB 内存 Vista Ultra 特性全开(集成显卡)

15M字符/秒

不过即便经过精简,这个算法的代码也还是比一般的算法要复杂:除了算法本身所在的类,它还需要5个额外的数据结构,以及一个特殊枚举的支持。这几个额外的数据结构包括:

FastDict

FastList

FastQueue

FastWorkItem

FastScanResult

一个额外的枚举是

CharacterType

其中前面四个数据类,以及那个枚举对于本算法是至关重要的。下面首先讲解一下这几个数据结构和枚举:

731655954c7be9d8835ece551b5385f8.png//hashcode对应字符串列表的字典731655954c7be9d8835ece551b5385f8.pngpublicclassFastDict : Dictionary24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.png//该hashcode对应的字符串最大长度是多少1408c5260b2f05e450dee929db9be5f7.pngpublicintMaxCharacterLength;

f466905a3bcb5dcef110eab799825254.png    }731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png//相同hashcode都有哪些字符串731655954c7be9d8835ece551b5385f8.pngpublicclassFastList : List24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png222530190136c9c4cfd237cc0d5cff99.png{

f466905a3bcb5dcef110eab799825254.png    }731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png//一个起始字符记录(也就是可能需要处理的数据)731655954c7be9d8835ece551b5385f8.pngpublicclassFastWorkItem

24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.pngpublicFastWorkItem(intindex,intmaxEndIndex,uintlowPartDelta)

715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.png222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.png            Index=index;

1408c5260b2f05e450dee929db9be5f7.png            MaxEndIndex=maxEndIndex;

1408c5260b2f05e450dee929db9be5f7.png            LowPartDelta=lowPartDelta;

5bcb1807ee3e00d2b3c225f0b3f5c751.png        }1408c5260b2f05e450dee929db9be5f7.png//起始字符在待检文本中的位置1408c5260b2f05e450dee929db9be5f7.pngpublicintIndex;

1408c5260b2f05e450dee929db9be5f7.png//该起始字符所对应的关键字条目的最远结束位置1408c5260b2f05e450dee929db9be5f7.pngpublicintMaxEndIndex;

1408c5260b2f05e450dee929db9be5f7.png//该记录所对应的(与前一条记录的)hashcode差值1408c5260b2f05e450dee929db9be5f7.pngpublicuintLowPartDelta;

f466905a3bcb5dcef110eab799825254.png    }731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png//待处理数据队列731655954c7be9d8835ece551b5385f8.pngpublicclassFastQueue:Queue24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png222530190136c9c4cfd237cc0d5cff99.png{

f466905a3bcb5dcef110eab799825254.png    }731655954c7be9d8835ece551b5385f8.png

731655954c7be9d8835ece551b5385f8.png//扫描结果731655954c7be9d8835ece551b5385f8.pngpublicclassFastScanResult

24a924a57ba6b3f2b51fc9edb7ea4186.png

9310e85a14af99de4811ff4c77f1f911.png222530190136c9c4cfd237cc0d5cff99.png{

1408c5260b2f05e450dee929db9be5f7.pngpublicFastScanResult(stringword,intindex)

715f2d05503b99d41f3b6ba2cdccc84d.png

e083dfde5a91f50979fe8979b4012b9d.png222530190136c9c4cfd237cc0d5cff99.png{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值