博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA相似算法的运用
阅读量:5122 次
发布时间:2019-06-13

本文共 1262 字,大约阅读时间需要 4 分钟。

今天要处理问题是把一个产品的名字按照其内容对比文档转换出它的中文名。

但是这个文档感觉不全,产品种类有多又杂。

如果像这样写的话

if(xxx.contains())

else if()

...

不知要写多久,错误率也高,后期也没法维护。

其中文档有产品的通配文件名称

我就考虑到了相似算法,直接比对产品通配名称,那个相似度高,就能决定产品中文名

下面直接上代码

/**** 完全相似=1.0* 完全不相似=0.0*/public static float getSimilarityRatio(String str, String target) {return 1 - (float) compare(str, target) / Math.max(str.length(), target.length());}private static int compare(String str, String target) {int d[][]; // 矩阵int n = str.length();int m = target.length();int i; // 遍历str的int j; // 遍历target的char ch1; // str的char ch2; // target的int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1if (n == 0) {return m;}if (m == 0) {return n;}d = new int[n + 1][m + 1];for (i = 0; i <= n; i++) { // 初始化第一列d[i][0] = i;}for (j = 0; j <= m; j++) { // 初始化第一行d[0][j] = j;}for (i = 1; i <= n; i++) { // 遍历strch1 = str.charAt(i - 1);// 去匹配targetfor (j = 1; j <= m; j++) {ch2 = target.charAt(j - 1);if (ch1 == ch2) {temp = 0;} else {temp = 1;}// 左边+1,上边+1, 左上角+temp取最小d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);}}return d[n][m];}private static int min(int one, int two, int three) {return (one = one < two ? one : two) < three ? one : three;}

转自:https://blog.csdn.net/JavaReact/article/details/82144732

转载于:https://www.cnblogs.com/zyrush/p/10102244.html

你可能感兴趣的文章
如何在Access2007中使用日期类型查询数据
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
autopep8
查看>>