package com.test.study;
/** 
 * @filename package com.test.study; 
 * @author 赵岩
 * @version 2015年11月19日
 * @classDescription:Levenshtein Distance 算法实现 
 * 可以使用的地方:DNA分析   拼字检查   语音辨识   抄袭侦测 
 */
public class myLevenshtein {
	public static void main(String[] args) {  
        //要比较的两个字符串  
        String str1 = "今天星eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee期四";  
        String str2 = "今天是dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd星期五";  
        long start=System.currentTimeMillis();
        levenshtein(str1,str2);
        long time = System.currentTimeMillis() - start;
        System.out.println("运行耗时= "+time+" 毫秒");
    }  
  
    /** 
     *   DNA分析   拼字检查   语音辨识   抄袭侦测 
     *  
     * @createTime 2012-1-12 
     */  
    public static void levenshtein(String str1,String str2) {  
        //计算两个字符串的长度。  
        int len1 = str1.length();  
        int len2 = str2.length();  
        //建立上面说的数组,比字符长度大一个空间  
        int[][] dif = new int[len1 + 1][len2 + 1];  
        //赋初值,步骤B。  
        for (int a = 0; a <= len1; a++) {  
            dif[a][0] = a;  
        }  
        for (int a = 0; a <= len2; a++) {  
            dif[0][a] = a;  
        }  
        //计算两个字符是否一样,计算左上的值  
        int temp;  
        for (int i = 1; i <= len1; i++) {  
            for (int j = 1; j <= len2; j++) {  
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {  
                    temp = 0;  
                } else {  
                    temp = 1;  
                }  
                //取三个值中最小的  
                dif[i][j] = min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1,  
                        dif[i - 1][j] + 1);  
            }  
        }  
        System.out.println("字符串\""+str1+"\"与\""+str2+"\"的比较");  
        //取数组右下角的值,同样不同位置代表不同字符串的比较  
        System.out.println("差异步骤:"+dif[len1][len2]);  
        //计算相似度  
        float similarity =1 - (float) dif[len1][len2] / Math.max(str1.length(), str2.length());  
        System.out.println("相似度:"+similarity);  
    }  
  
    //得到最小值  
    private static int min(int... is) {  
        int min = Integer.MAX_VALUE;  
        for (int i : is) {  
            if (min > i) {  
                min = i;  
            }  
        }  
        return min;  
    }  
}
最近下载更多
2196316269  LV10 2021年2月25日
whfuai  LV14 2021年2月1日
yuqm  LV17 2020年4月10日
xuxiaojie  LV1 2019年8月14日
WASDZZ  LV13 2018年12月29日
848581720  LV10 2018年4月16日
ewfasdfa  LV1 2017年11月29日
rongshuang  LV2 2017年5月22日
zx6262509  LV1 2017年5月3日
1q1111  LV1 2017年5月3日
最近浏览更多
炫瓶百事可乐  LV1 2022年12月1日
公共分类  LV1 2022年10月18日
zinshao  LV12 2022年7月21日
微信网友_5992582549164032  LV6 2022年6月29日
myh7719  LV2 2022年6月13日
张洪  LV1 2021年11月25日
xiaoluoaaa  LV8 2021年10月13日
happyYang 2021年7月15日
暂无贡献等级
1005948011  LV7 2021年5月10日
482286353  LV3 2021年4月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友