A. 各类场景应用中涉及的AI算法汇总
整理了各类场景应用中AI算法
一、图像CV
内容安全,目标检测,图像识别,智能视觉生产,图像搜索,图像分割,物体检测,图像分类,图像标签,名人识别,概念识别,场景识别,物体识别,场景分析,智能相册,内容推荐,图库管理,网红人物识别,明星人物识别,图像搜索,商品图片搜索,版权图片搜索,通用图片搜索,车牌识别,垃圾分类,车辆检测,菜品识别,车型识别,犬类识别,实例分割,风格迁移,智能填充,智能识图,拍照搜商品,精准广告投放,电商导购,图像分析,图像理解,图像处理,图像质量评估,场景识别,物体识别,场所识别,图像自训练平台,图像分类,目标检测,图像分割,关键点检测,图像生成,场景文字识别,度量学习,图像识别,图像比对,图像分类使用手册,图像分类API文档目标检测使用手册,目标检测API文档Logo检测使用手册,Logo检测API文档,通用图片搜索,车牌识别,垃圾分类,车辆检测,车型识别,犬类识别,实例分割,风格迁移,智能填充,车牌识别,相册聚类,场景与物体识别,无限天空,图像识别引擎,黄色图片识别,暴力图像识别,工业轮胎智能检测,肋骨骨折识别,显微识别,图像处理,广告识别,人脸算法,人体算法,图像识别,图像增强,OCR,图像处理,ZoomAI,智能贴图,智能制作,质量评价,图像识别,智能鉴黄,图像识别,实时手写识别,唇语识别,通用文字识别,手写文字识别,图像技术,图像识别,图像审核,图像搜索,图像增强,图像特效,车辆分析,图像生成,绘画机器人独家,动漫化身独家,像素风独家,超清人像独家,图像融合,换脸技术,神奇变脸,图像风格化,证件照生成,线稿图像识别,宝宝检测,图像分类,圉像深度估计,天空分割,食物分割,猫狗脸技术,食物识别独家,图像美学评分,车辆分析,车型识别,车型识别(含指导价),车型识别(含配置参数),车标识别,人脸识别(活体),车牌识别,表情识别,安全帽识别,计算机影像,计算机视觉,聚焦光学字符识别、人脸识别、质检、感知、理解、交互,图像视频分析,Logo检测,内容审核,智能批改,笔记评估,思维导图评估,物体检测,物体识别。
二、人脸、体态、眼瞳、声音、指纹
人脸分割人脸识别,无,人体分析HAS,识别人的年龄,性别,穿着信息,客流统计分析,智能客服,热点区域分析,人体检测,人脸口罩识别,人脸对比,人脸搜索,人脸检测与属性分析,人脸活体检测,人体关键点检测,行人重识别,细粒度人像分割,人像分割,人脸解析,3D人体姿态估计,人脸融合,人脸识别,换脸甄别,人脸支付,人脸核身,人像变换,人脸试妆,人脸融合,人体分析,手势识别,人脸验证与检索,人脸比对,人脸比对sensetime,人脸水印照比对,静默活体检测,静默活体检测sensetime,人脸检测和属性分析,人脸特征分析tuputech,配合式活体检测,人脸安防,计算机视觉,智能应用服务,人脸查询人脸分析人脸统计名单库管理人脸布控,人脸应用,人体应用,人体查询,车辆查询车辆分析车辆统计车辆布控车辆名单库管理,车辆应用,人脸图像识别人体图像识别车辆图像识别,图像识别,图像比对,人脸比对,人体检测,人脸口罩识别,人脸对比,人脸搜索,人脸检测与属性分析,人脸活体检测,人体关键点检测,行人重识别,细粒度人像分割,人像分割,人脸解析,3D人体姿态估计,人脸融合,人脸识别,人脸检测,人脸比对,人脸搜索,人脸关键点,稠密关键点,人脸属性,情绪识别,颜值评分,视线估计,皮肤分析,3D人脸重建,面部特征分析人体识别,人体检测,人体关键点,人体抠像,人体属性,手势识别人像处理,美颜美型,人脸融合,滤镜,声纹识别支付,语音合成,语音合成,声纹识别,语音唤醒,人脸识别引擎,摄像头人脸识别,图片人脸检测,身份识别,人脸识别,人脸属性,人体识别,声纹识别,衣服检索及聚类,语音分析,声纹识别,说话人归档,人脸和人体识别,人脸检测,手势识别,人脸与人体识别,人脸识别云服务,人脸识别私有化,人脸离线识别SDK,人脸实名认证,人像特效,人体分析,人脸技不,皮肤分析独家,头部分割,宏观人脸分析,人脸关键点检测,微观人脸分析独家,头发分析独家,五官分割,头发分割人体技术,人体外轮廓点检测独家,精细化人像抠图,人体框检测,肢体关键点检测,人像分割,服饰识别,手势识别,皮肤分割,人脸,说话人识别,人脸检测识别,人脸1:1比对,人脸检测,AI人脸/人形车辆,大数据人像图片防伪,QoS保障,CDN,表情识别,举手动作识别,人脸检测,网络切片,边缘计算,人脸分析,人脸检测,人脸搜索,人体分析,手势识别,着装检测,人脸识别,行为检测,人脸识别,人形检测,行为分析,人脸检测,人脸跟踪,人脸比对,人脸查找,人脸属性分析,活体检测,声音指纹,声纹识别。
三、视频
视频分割、视频处理、视频理解、智能视觉、多媒体,视频内容分析,人体动作监控,视频分类,智能交通,人/动物轨迹分析,目标计数,目标跟踪,视频编辑-,精彩片段提取,新闻视频拆分,视频摘要,视频封面,视频拆条,视频标签-,视频推荐,视频搜索,视频指纹-,数字版权管理,广告识别,视频快速审核,视频版权,视频查重,视频换脸,车辆解析, 体育 视频摘要,视频内容分析,颜色识别,货架商品检测, 时尚 搭配,危险动作识别,无,无,视频,视频换脸,车辆解析, 体育 视频摘要,视频内容分析,颜色识别,货架商品检测, 时尚 搭配,危险动作识别,菜品识别,视频识别引擎,结肠息肉检测,胃镜评估系统,视频标签,场景识别,客流分析,手势识别,视频技术,短视频标签,视觉看点识别,动态封面图自动生成,智能剪辑,新闻拆条,智能插帧,视频技术,多模态媒资检索公测中,媒体内容分析,媒体内容审核,视频生成,视频动作识别,
四、ocr文字识别
手写识别,票据识别,通用文档,通用卡证,保险智能理赔,财税报销电子化,证照电子化审批,票据类文字识别,行业类文字识别,证件类文字识别,通用类文字识别,通用文字识别,驾驶证识别,身份证识别,增值税发票识别,行驶证识别,营业执照识别,银行卡识别,增值税发票核验,营业执照核验,智能扫码,行业文档识别, 汽车 相关识别,票据单据识别,卡证文字识别,通用文字识别,手写文字识别,印刷文字识别,银行卡识别,名片识别,身份证识别intsig,营业执照识别intsig,增值税发票识别intsig,拍照速算识别,公式识别,指尖文字识别,驾驶证识别JD,行驶证识别JD,车牌识别JD,身份证识别,增值税发票识别,营业执照识别,火车票识别,出租车发票识别,印刷文字识别(多语种),印刷文字识别(多语种)intsig内容审核,色情内容过滤,政治人物检查,暴恐敏感信息过滤,广告过滤,OCR自定义模板使用手册,OCR自定义模板API文档,通用文字识别,驾驶证识别,身份证识别,增值税发票识别,行驶证识别,营业执照识别,银行卡识别,身份证识别,驾驶证识别,行驶证识别,银行卡识别,通用文字识别,自定义模板文字识别,文字识别引擎,身份证识别,图片文字识别,通用文字识别,身份证识别,名片识别,光学字符识别服务,通用文字识别,手写体文字识别,表格识别,整题识别(含公式),购物小票识别,身份证识别,名片识别,自定义模板文字识别,文字识别,通用文字识别,银行卡识别,身份证识别,字幕识别,网络图片识别, 游戏 直播关键字识别,新闻标题识别,OCR文字识别,通用场景文字识别,卡证文字识别,财务票据文字识别,医疗票据文字识别, 汽车 场景文字识别,教育场景文字识别,其他场景文字识别,iOCR自定义模板文字识别,通用类OCR,通用文本识别(中英)通用文本识别(多语言)通用表格识别,证照类OCR,身份证社保卡户口本护照名片银行卡结婚证离婚证房产证不动产证,车辆相关OCR,行驶证驾驶证车辆合格证车辆登记证,公司商铺类OCR,商户小票税务登记证开户许可证营业执照组织机构代码证,票据类OCR,增值税发票增值税卷票火车票飞机行程单出租车发票购车发票智能技术,票据机器人证照机器人文本配置机器人表格配置机器人框选配置机器人,文字识别,行驶证识别,驾驶证识别,表单识别器,通用文本,财务票据识别,机构文档识别,个人证件识别,车辆相关识别,通用表格,印章识别,财报识别,合同比对,识别文字识别,签名比对,OCR识别,教育OCR,印刷识别,手写识别,表格识别,公式识别,试卷拆录
五、自然语言NPL
文本相似度,文本摘要,文本纠错,中心词提取,文本信息抽取,智能文本分类,命名实体,词性标注,多语言分词,NLP基础服务,地址标准化,商品评价解析智能短信解析,机器阅读理解,金融研报信息识别,法律案件抽取,行业问答推理,行业知识图谱构建,文本实体关系抽取,搜索推荐,知识问答,短文本相似度,文本实体抽取, 情感 倾向分析,兴趣画像匹配,文本分类-多标签,文本分类-单标签,定制自然语言处理,语言生成,语言理解,自然语言处理基础,文本摘要,数据转文字,文本生成,智能问答系统,内容推荐,评价分析,文本分类,对话理解,意图理解, 情感 分析,观点抽取,中文分词,短文本相似度,关键词提取,词向量,命名实体,识别依存,句法分析, 情感 分析,评论观点抽取,短文本相似度,机器翻译,词法分析,词义相似度,词向量,句法分析,文本分类,短语挖掘,闲聊,文本流畅度,同义词,聚类,语言模型填空,新闻热词生成,机器阅读理解,商品信息抽取,词法分析, 情感 分析,关键词提取,用户评论分析,资讯热点挖掘,AIUI人机交互,文本纠错,词法分析,依存句法分析,语义角色标注,语义依存分析(依存树),语义依存分析(依存图), 情感 分析,关键词提取,NLP能力生产平台,NLP基础技术,中文词法分析-LAC,词向量—Word2vec,语言模型—Language_model,NLP核心技术, 情感 分析、文本匹配、自然语言推理、词法分析、阅读理解、智能问答,信息检索、新闻推荐、智能客服, 情感 分析、文本匹配、自然语言推理、词法分析、阅读理解、智能问答,机器问答、自然语言推断、 情感 分析和文档排序,NLP系统应用,问答系统对话系统智能客服,用户消费习惯理解热点话题分析舆情监控,自然语言处理,文本分类使用手册,文本分类API文档, 情感 分析,评论观点抽取,短文本相似度,机器翻译,词法分析,词义相似度,词向量,句法分析,文本分类,短语挖掘,闲聊,文本流畅度,同义词,聚类,语言模型填空,新闻热词生成,机器阅读理解,商品信息抽取智能创作,智能写作,搭配短文,种草标题,卖点标题,社交电商营销文案,自然语言处理能力,基础文本分析,分词、词性分析技术,词向量表示,依存句法分析,DNN语言模型,语义解析技术,意图成分识别, 情感 分析,对话情绪识别,文本相似度检测,文本解析和抽取技术,智能信息抽取,阅读理解,智能标签,NLG,自动摘要,自动写文章,语言处理基础技术,文本审核, 情感 分析,机器翻译,智能聊天,自然语言,基于标题的视频标签,台词看点识别,意图识别,词法分析,相关词,舆情分析,流量预测,标签技术,自然语言处理,语义对话,自然语言处理,车型信息提取,关键词提取,语义理解,语义相似度,意图解析,中文词向量,表示依存,句法分析,上下文理解,词法分析,意图分析,情绪计算,视觉 情感 ,语音 情感 , 情感 分析,沉浸式阅读器,语言理解,文本分析,自然语言处理,在线语音识别,自然语言理解火速上线中, 情感 判别,语义角色标注,依存句法分析,词性标注,实体识别,中文分词,分词,
6、知识图谱
知识图谱,药学知识图谱,智能分诊,腾讯知识图谱,无,药学知识图谱,智能分诊,知识理解,知识图谱Schema,图数据库BGraph,知识图谱,语言与知识,语言处理基础技术,语言处理应用技术,知识理解,文本审核,智能对话定制平台,智能文档分析平台,智能创作平台,知识图谱,实体链接,意图图谱,识别实体,逻辑推理,知识挖掘,知识卡片
7、对话问答机器人
智能问答机器人,智能语音助手,智能对话质检,智能话务机器人,无,电话机器人,NeuHub助力京东智能客服升级,腾讯云小微,智能硬件AI语音助手,对话机器人,无,问答系统对话系统智能客服,Replika对话技术,客服机器人,智能问答,智能场景,个性化回复,多轮交互,情绪识别,智能客服,金融虚拟客服,电话质检,AI语音交互机器人,中移云客服·智能AI外呼,人机对话精准语义分析
8、翻译
协同翻译工具平台,电商内容多语言工具,文档翻译,专业版翻译引擎,通用版翻译引擎,无,机器翻译,无,机器翻译,音视频字幕平台,机器翻译,机器翻译niutrans,文本翻译,语音翻译,拍照翻译,机器翻译,机器翻译,文本翻译,语音翻译,通用翻译,自然语言翻译服务,文本翻译,图片翻译,语音翻译,实时语音翻译,文档翻译(开发版,机器翻译,文本翻译,语音翻译,拍照翻译,机器翻译实时长语音转写,录音文件长语音转写,翻译工具,机器翻译火速上线中
9、声音
便携智能语音一体机,语音合成声音定制,语音合成,一句话识别,实时语音识别录音文件识别,客服电话,语音录入,语音指令,语音对话,语音识别,科学研究,安防监控,声音分类,语音合成,语音识别,实时语音转写,定制语音合成,定制语音识别,语音合成,语音合成声音定制,离线语音合成,短语音识别,录音文件识别,声纹识别,离线语音识别,实时语音识别,呼叫中心短语音识别,呼叫中心录音文件识别,呼叫中心实时语音识别,语音识别,语音合成,声纹识别,语音识别,语音听写,语音转写,实时语音转写,语音唤醒,离线命令词识别,离线语音听写,语音合成,在线语音合成,离线语音合成,语音分析,语音评测,性别年龄识别,声纹识别,歌曲识别,A.I.客服平台能力中间件,语音识别,语音交互技术,语音合成,语音合成声音定制,离线语音合成,短语音识别,录音文件识别,声纹识别,离线语音识别,实时语音识别,呼叫中心短语音识别,呼叫中心录音文件识别,呼叫中心实时语音识别,远场语音识别,语音识别,一句话识别,实时语音识别,录音文件识别,语音合成,实时语音识别,长语音识别,语音识别,语音合成,波束形成,声源定位,去混响,降噪,回声消除,分布式拾音,语音识别,语音唤醒,语音合成,声纹识别,智能语音服务,语音合成,短语音识别,实时语音识别,语音理解与交互,离线唤醒词识别,语音识别,一句话识别,实时语音识别,录音文件识别,电话语音识别,语音唤醒,离线语音识别,离线命令词识别,远场语音识别,语音合成,通用语音合成,个性化语音合成,语音技术,短语音识别,实时语音识别,音频文件转写,在线语音合成,离线语音合成,语音自训练平台,语音交互,语音合成,语音识别,一句话识别,实时短语音识别,语音合成,语音唤醒,本地语音合成,语音翻译,语音转文本,短语音听写,长语音转写,实时语音转写,语音内容审核,会议超极本,语音交互技术,语音识别,语义理解,语音合成,音频转写,音视频类产品,语音通知/验证码,订单小号,拨打验证,点击拨号,数据语音,统一认证,语音会议,企业视频彩铃,语音识别,语音文件转录,实时语音识别,一句话语音识别,语音合成,通用语音合成,个性化语音合成,语音评测,通用语音评测,中英文造句评测,在线语音识别,语音识别,语音唤醒,语音合成,语音合成,语音识别,语音听写,语音转写,短语音转写(同步),语音识别,语音 情感 识别
十、数据挖掘AI硬件
算法类型:包括二分类、多分类和回归,精准营销,表格数据预测,销量预测,交通流量预测,时序预测,大数据,无,机器学习使用手册,机器学习API文档,大数据处理,大数据传输,数据工厂,大数据分析,数据仓库,数据采集与标注,数据采集服务,数据标注服务,AI开发平台,全功能AI开发平台BML,零门槛AI开发平台EasyDL,AI硬件与平台,GPU云服务器,机器人平台,度目视频分析盒子,度目AI镜头模组,度目人脸应用套件,度目人脸抓拍机,人脸识别摄像机,昆仑AI加速卡,智能预测,购车指数,数据科学虚拟机,平台效率,云与AI,抗DDoS,天盾,网站漏洞扫描,网页防篡改,入侵检测防护,弹性云服务器,对象存储服务,云专线(CDA,AI计算机平台—360net深度学习基础模型,AI算法训练适配主流AI框架
十一、其他
内容审核,智能鉴黄,特定人物识别,通用图片审核,文本智能审核,广告检测,Logo检测,商品理解,拍照购,商品图片搜索,通用商品识别,疫情物资识别,酒标识别,细分市场划分,品牌竞争力分析,老品升级,新品定制,商品竞争力分析,商品销量预测,商品营销,用户评论占比预测,商品命名实体识别,商品颜色识别,强化学习,智能地图引擎,内容审核,智能鉴黄,特定人物识别,通用图片审核,文本智能审核,广告检测,Logo检测商品理解,拍照购,商品图片搜索,通用商品识别,疫情物资识别,酒标识别,细分市场划分,品牌竞争力分析,老品升级,新品定制,商品竞争力分析,商品销量预测,商品营销,用户评论占比预测,商品命名实体识别,商品颜色识别,个性化与推荐系统,推荐系统,舆情分析,舆情标签,智慧教育,智能语音评测,拍照搜题,题目识别切分,整页拍搜批改,作文批改,学业大数据平台,文档校审系统,会议同传系统,文档翻译系统,视频翻译系统,教育学习,口语评测,朗读听书,增强现实,3D肢体关键点SDK,美颜滤镜SDK,短视频SDK,基础服务,私有云部署,多模态交互,多模态 情感 分析,多模态意图解析,多模态融合,多模态语义,内容审查器,Microsoft基因组学,医学人工智能开放平台,数据查验接口,身份验证(公安简项),银行卡验证,发票查验,设备接入服务Web/H5直播消息设备托管异常巡检电话提醒,音视频,视频监控服务云广播服务云存储云录制,司乘体验,智能地图引擎,消息类产品,视频短信,短信通知/验证码,企业挂机彩信,来去电身份提示,企业固话彩印,模板闪信,异网短信,内容生产,试卷拆录解决方案,教学管理,教学质量评估解决方案,教学异常行为监测,授课质量分析解决方案,路况识别,人车检测,视觉SLAM,高精地图,免费SDK,智能诊后随访管理,用药管家,智能预问诊,智能导诊,智能自诊,智能问药,智能问答,裁判文书近义词计算,法条推荐,案由预测,
B. 那些经典算法:AC自动机
第一次看到这个名字的时候觉得非常高级,深入学习就发现,AC就是一种多模式字符串匹配算法。前面介绍的BF算法,RK算法,BM算法,KMP算法都属于单模式匹配算法,而Trie树是多模式匹配算法,多模式匹配算法就是在一个主串中查找多个模式串,举个最常用的例子,比如我们在论坛发表评论或发帖的时候,一般论坛后台会检测我们发的内容是否有敏感词,如果有敏感词要么是用***替换,要么是不让你发送,我们评论是通常是一段话,这些敏感词可能成千上万,如果用每个敏感词都在评论的内容中查找,效率会非常低,AC自动机中,主串会与所有的模式串同时匹配,这时候就可以利用AC自动机这种多模式匹配算法来完成高效的匹配,
AC自动机算法是构造一个Trie树,然后再添加额外的失配指针。这些额外的适配指针准许在查找字符串失败的时候进行回退(例如在Trie树种查找单词bef失败后,但是在Trie树种存中bea这个单词,失配指针会指向前缀be),转向某些前缀分支,免于重复匹配前缀,提高算法效率。
常见于IDS软件或病毒检测软件中病毒特征字符串,可以构建AC自动机,在这种情况下,算法的时间复杂度为输入字符串的长度和匹配数量之和。
假设现有模式字符串集合:{abd,abdk, abchijn, chnit, ijabdf, ijaij} 构建AC自动机如下:
说明:
1)当前指针curr指向AC自动机的根节点:curr=root。
2)从文本串中读取(下)一个字符。
3)从当前节点的所有孩子节点中寻找与该字符匹配的节点:
4)若fail == null,则说明没有任何子串为输入字符串的前缀,这时设置curr = root,执行步骤2.
若fail != null,则将curr指向 fail节点,指向步骤3。
理解起来比较复杂,找网上的一个例子,假设文本串text = “abchnijabdfk”。
查找过程如下:
说明如下:
1)按照字符串顺序依次遍历到:a-->b-->c-->h ,这时候发现文本串中下一个节点n和Trie树中下一个节点i不匹配,且h的fail指针非空,跳转到Trie树中ch位置。
注意c-->h的时候判断h不为结束节点,且c的fail指针也不是结束节点。
2)再接着遍历n-->i,发现i节点在Trie树中的下一个节点找不到j,且有fail指针,则继续遍历,
遍历到d的时候要注意,d的下一个匹配节点f是结束字符,所以得到匹配字符串:ijabdf,且d的fail节点也是d,且也是结束字符,所以得到匹配字符串abd,不过不是失败的匹配,所以curr不跳转。
先将目标字符串插入到Trie树种,然后通过广度有限遍历为每个节点的所有孩子节点找到正确的fail指针。
具体步骤如下:
1)将根节点的所有孩子节点的fail指针指向根节点,然后将根节点的所有孩子节点依次入队列。
2)若队列不为空:
2.1)出列一个字符,将出列的节点记为curr,failTo表示curr的
fail指针,即failTo = curr.fail 。
2.2) 判断curr.child[i] == failTo.child[i]是不是成立:
成立:curr.child[i].fail = failTo.child[i]
因为当前字符串的后缀和Tire树的前缀最长部分是到fail,
且子字符和failTo的下一个字符相同,则fail指针就是
failTo.child[i]。
不成立: 判断failTo是不是为null是否成立:
成立: curr.child[i].fail = root = null。
不成立: failTo = failTo.fail 继续2.2
curr.child[i]入列,再次执行步骤2)。
3)队列为空结束。
每个结点的fail指向的解决顺序是按照广度有限遍历的顺序完成的,或者说层序遍历的顺序进行,我们根据父结点的fail指针来求当前节点的fail指针。
上图为例,我们要解决y节点的fail指针问题,已经知道y节点的父节点x1的fail是指向x2的,根据fail指针的定义,我们知道红色椭圆中的字符串序列肯定相等,而且是最长的公共部分。依据y.fail的含义,如果x2的某个孩子节点和节点y表示的表示的字符相等,y的fail就指向它。
如果x2的孩子节点中不存在节点y表示的字符。由于x2.fail指向x3,根据x2.fail的含义,我们知道绿色框中的字符序列是相同的。显然如果x3的某个孩子和节点y表示字符相等,则y.fail就指向它。
如果x3的孩子节点不存在节点y表示的字符,我们重复这个步骤,直到xi的fail节点指向null,说明我们达到顶层,只要y.fail= root就可以了。
构造过程就是知道当前节点的最长公共前缀的情况下,去确定孩子节点的最长公共前缀。
下图中,每个节点都有fail虚线,指向根节点的虚线没画出,求图中c的孩子节点h的fail指向:
原图中,深蓝色的框出来的是已经确定fail指针的,求红色框中h节点的fail指针。
这时候,我们看下h的父亲节点c的fail指针指向,为ch中的c(这表示abc字符串的所有后缀bc和c和Trie树的所有前缀中最长公共部分为c),且这个c节点的孩子节点中有字符为h的字符,所以图中红色框中框出的h节点的fail指针指向 ch字符串中的h。
求红色框中i的fail指针指向,上图中,我们可以看到i的父亲节点h的指向为ch中的h,(也就是说我们的目标字符串结合中所有前缀和字符序列abch的所有后缀在Trie树中最长前缀为ch。)我们比较i节点和ch中的h的所有子节点,发现h只有一个n的子节点,所以没办法匹配,那就继续找ch中h的fail指针,图中没画出,那么就是它的fail指针就是root,然后去看root所有子节点中有没有和i相等的,发现最右边的i是和我们要找的i相等的,所以我们就把i的fail指针指向i,如后面的图。
C. 公众号文章违规检测的工具有哪些
我现在在用的是西瓜助手,里面有文章违规检测工具,我觉得还不错,直接拿文章链接进去检测就可以了,如果文章有违规的话,马上就可以检测出来,及时删除可以避免公众号被封。
D. 字符串匹配算法的使用(未完待整理)
字符串的匹配在Java中都知道使用indexOf函数来实现,那么其匹配算法是怎么样的呢?
单模式和多模式的区别就是一次遍历主串能否将多个模式的字符串都查找出来。
英文全称为Brute Force,暴力匹配算法,匹配字符串的方法比较暴力,也比较简单易懂。其大概的思路就是:
我们可以看到,在极端情况下,在主串 aaaa...aab 中寻找模式串 aab ,那么总共需要寻找(n-m+1)次,且每次都需要比对m次,那么时间复杂度将是 (n-m+1)*m ,即 O(n*m) ;但实际上并不会这么低效,因为我们的使用场景中主串和模式串都不会太长,而且在每个子串和模式串进行比对时,只要中途有一个不匹配,那么当前比对就会提前结束,因此大部分情况下,时间复杂度都会比 O(n*m) 要好。
我们在BF算法的基础上引入哈希算法,我们不需要将每个子串与模式串逐个字符地进行比较,而是计算得出每个子串的hash值,然后和模式串的hash值进行比较,如果有相等的,那就说明有子串和模式串匹配上了。
虽然我们只需要比对模式串和子串的hash值就能得到匹配结果,次数为(n-m+1),但是对每个子串进行hash计算的时候,是要遍历每个字符的,因此次数也是m,那么总的时间复杂度还是 O(n*m) ,并没有明显地提升。
那么我们该如何想出一个办法,使得每个子串hash值的计算时间得到提升呢?这就是RK算法的精髓,假设子串包含的字符集中元素个数为k,那么就用k进制数来代表这个子串,然后hash的过程就是将这个k进制的数转换为十进制的数,这个十进制的数就是该子串的hash值。
相邻子串的hash值计算是有规律的,我们只需要遍历一次主串就能得到所有子串的hash值,算法复杂度为O(n),而不是像原先一样,每个子串都需要O(m)的时间复杂度。
然后将模式串的hash值和所有子串的hash值进行比较,每次比较的时间复杂度是 O(1) ,总共比较(n-m+1)次,所以RK算法的总的时间开销为 O(n)+O(1)*O(n-m+1) ,即为 O(n) ,时间复杂度比BF算法更加高效。
当然,有hash的地方就有可能会存在hash冲突,有可能子串和hash值和模式串的hash值是一样的,但内容就是不一样,此时怎么办呢?其实很简单,对于hash值一样的子串,我们增加双保险,再比较一下这m个字符是否都一样即可,总的时间开销为 O(n)+O(1)*O(n-m+1)+O(m) ,即为 O(n) 。
如果极端情况下出现了很多hash冲突呢?我们对于每个和模式串相同hash值的子串都需要逐一再进行比较,那么总的时间开销就会为 O(n)+O(1)*O(n-m+1)+O(m)*O(n-m+1) ,即为 O(n*m) ,不过这种概率太小了,大部分情况下都不会这样。
在真正的文本编辑器中查找和替换某个字符串时,使用的算法既不是上述的BF算法,也不是RK算法;BF算法只适合不是很长的主串,RK算法则要设计一个冲突概率很低的hash算法,这个比较困难,所以实际使用的是BM算法,它是工程中非常常用的一种字符串匹配算法,效率也是最高的。
算法的思想和过程有些复杂,待以后整理。
KMP算法在本质上是和BM算法一样的。算法的思想和过程有些复杂,待以后整理。
浏览器输入框中的智能输入匹配是怎么实现的,它是怎么做动态字符串匹配查找的呢?这就用到了Trie树。
又名字典树,是一种专门用来快速查找字符串前缀匹配结果的树形结构,其本质就是将所有字符串的重复的前缀合并在一起,构造一个多叉树。
其中,根节点不包含任何信息,每个节点表示一个字符,从根节点到红色节点的一条路径表示存储的一个字符串。当我们在如上Trie树中查找"he"时,发现"he"并非是一个字符串,而是"hello"和"her"的公共前缀,那么就会找到这两个字符串返回。
Trie树在内存中是如何存储的呢?因为每一个节点都可能是包含所有字符的,所以每一个节点都是一个数组(或者散列表),用来存储每个字符及其后缀节点的指针。
使用Trie树,最开始构建的时候,时间复杂度为 O(n) ,其中n为所有字符串长度之和,但是一旦构建完成,频繁地查询某个字符串是非常高效的,时间复杂度为 O(k) ,其中k为查找字符串的长度。
Trie树虽然查询效率很高,但是比较浪费内存,每一个节点都必须维护一个数组存放所有可能的字符数据及其指向下一个节点的指针,因此在所有字符串公共前缀并不多的时候,内存空间浪费地就更多了。这种问题其实也有对应的解决办法,我们可以不使用数组,而是使用有序数组、散列表、红黑树来存放,可以相应地降低性能来节省内存空间。
Trie树除了可以实现浏览器动态输入内容查找候选项的功能外,还可以实现多模式地敏感词匹配功能。假设我们需要对用户输入的内容进行敏感词检查,将所有的敏感内容用***代替,那么该如何实现呢?
首先我们可以维护一个敏感词字典,使用上述四种单模式匹配算法也可以实现,但是需要遍历N次用户输入的内容,其中N是所有敏感词的模式串,显得非常低效。但是我们如果将敏感词字典维护为一个Trie树,然后将用户输入的内容从位置0开始在Trie树中进行查询,如果匹配到红色节点,那么说明有敏感词;如果没有匹配到红色节点,就从用户输入内容的下一个位置开始继续在Trie树中查询,直至将用户输入内容遍历完,因此我们只是遍历了一遍主串。
然而更高效的多模式字符串匹配使用地更多的是如下的AC自动机。
如果把Trie树比作BF算法,KMP算法是BF算法的改进,那么AC自动机就是利用同样的思想改进了Trie树。
算法的思想和过程有些复杂,待以后整理。