Java实例9 - 汉明距离 Hamming Distance

/**在信息理论中,两个等长字符串之间的汉明距离
 * 是两个字符串对应位置上不同字符的个数,
 * 换句话说,汉明距离就是将一个字符串替换成另外一个字符串所需要替换的字符长度。
 *例如,1011101和1001001之间的汉明距离是2,
 *toned和roses之间的汉明距离是3.
 *汉明重量是字符串相对于同样长度的零字符串的汉明距离,
 *也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,
 *所以 11101 的汉明重量是 4。
 *下面的代码展示了在Java中如何计算汉明距离和汉明重量。
 */
package re;
public class HammingDistance {
	public static void main(String[] args) {
		String str1 = "abcdefg";
		String str2 = "aacceeg";
		HammingDistance hd = new HammingDistance();
		int distance = hd.getDistance(str1, str2);
		System.out.println("distance is " + distance);
		int weight = hd.getWeight(255);
		System.out.println("weight is " + weight);
	}
	/**
	 * calculate Hamming Distance between two strings
	 * 
	 * @author 
	 * @param str1 the 1st string
	 * @param str2 the 2nd string
	 * @return Hamming Distance between str1 and str2
	 */
	public int getDistance(String str1, String str2) {
		int distance;
		if (str1.length() != str2.length()) {
			distance = -1;
		} else {
			distance = 0;
			for (int i = 0; i < str1.length(); i++) {
				if (str1.charAt(i) != str2.charAt(i)) {
					distance++;
				}
			}
		}
		return distance;
	}
	/**
	 * calculate Hamming weight for binary number
	 * @author 
	 * @param i the binary number
	 * @return Hamming weight of the binary number
	 */
	public int getWeight(int i) {
		int n;
		for (n = 0; i > 0; n++) {
			i &= (i - 1);
		}
		return n;
	}
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值