1. 程式人生 > >java 相似度計算

java 相似度計算

相似度計算的java程式碼: 

// 相似度計算
	public double xiangsidu(String a, String b) {
		// 相似度公式:1 - 最小編輯距離/兩個串中較長的長度
		int n = a.length();
		int m = b.length();
		if (n < 1 && m < 1)
			return 0; // 兩個空串

		return 1 - minEditDist(a, b) / Math.max(n, m);
	}

	// 最小編輯距離計算
	public double minEditDist(String a, String b) {
		int n = a.length();
		int m = b.length();
		if (n < 1 || m < 1)
			return (n + m) * 1.00; // 兩個空串

		double[][] d = new double[n + 1][m + 1];
		double cost;

		for (int i = 0; i <= n; ++i)
			d[i][0] = i;
		for (int i = 0; i <= m; ++i)
			d[0][i] = i;

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				if (a.charAt(i - 1) == b.charAt(j - 1))
					cost = 0;
				else
					cost = 1;
				d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1,
						d[i - 1][j - 1] + cost);
			}
		}
		return d[n][m];
	}

	private double Minimum(double a, double b, double c) {
		double mi = a;
		if (b < mi) {
			mi = b;
		}
		if (c < mi) {
			mi = c;
		}
		return mi;
	}