利用随机化的思想比较两个字符串是否相等

原创 2013年11月12日 23:42:37

对于一般情况,只需利用java中String类型数据的equal方法就可以实现。但对于两个非常长的位于信道两端的长串来说,要比较他们的大小,需要将一个串传至另一端,而将整个串传输不仅占用信道带宽且费时,故此采用随机化的思想对该问题加以阐述。

任一字符串均可转化为二进制01串,因此仅考虑二进制01串的情形。首先分别求A B两串对应的Int数,记为I(x) I(y),任取一素数p,分别用I(x) I(y) 对p取模得Ip(x) Ip(y) ,易知此时Ip(x) Ip(y) 均为小于p的整型数,将问题转化为比较Ip(x) Ip(y) 是否相等。若Ip(x) Ip(y) 不等,则x y必不等;若Ip(x) Ip(y) 相等,则x y可能相等也可能不等。原因在于,当|Ip(x)-Ip(y)|可被p整除时,即使x y不等,Ip(x) Ip(y) 也相等,为降低此种情况概率,循环执行该过程,每次循环的p值随机选择,使得错判概率成为小概率事件。具体代码如下:

public class CompareLongStrings {
	
	public CompareLongStrings() {
		// TODO Auto-generated constructor stub
	}
	
	public boolean CLongStrings(String a, String b) {
		boolean result = false;
		
		if(a.length() != b.length()){
			return result;
		}
		
		int aInt = Integer.parseInt(a);
		int bInt = Integer.parseInt(b);
		
		int iterator = 0;
		do {
			//随机产生一组素数
			int p = GenerateSuShu.suShu(0, 100);
			
			int aIntModeP = aInt % p;
			int bIntModeP = bInt % p;
			
			if(aIntModeP != bIntModeP)
				return result;
			
			if(aIntModeP == bIntModeP){
				if(iterator >= 3){
					result = true;
					return result;
				}
			}
			iterator++;
				
		} while (iterator <=3);
		
		return result;
	}
}

import java.util.ArrayList;
import java.util.Random;


public class GenerateSuShu {
	
	public GenerateSuShu() {
		// TODO Auto-generated constructor stub
	}
	
	public static int suShu(int x, int y) {
		
		if(x<2)
			x = 2;
		
		ArrayList<Integer> arrayList = new ArrayList<>();
		for(int i=x;i<=y;i++){
			int j=2;
			for(;j<i;j++){
				if(i%j == 0)
					break;
			}
			if(j>=i)
				arrayList.add(i);
		}
		
		Random random = new Random();
		int index = random.nextInt(arrayList.size()-1-0)+0;
		return arrayList.get(index);
	}
}


【StringUtils】判断字符串是否有值,判断多个字符串是否相等

package com.dream.makerspace.utils; import android.text.*; import android.text.style.CharacterStyl...
  • dodod2012
  • dodod2012
  • 2016年06月24日 17:36
  • 2132

脚本乐园 Shell字符串比较相等、不相等方法小结

#!/bin/sh    #测试各种字符串比较操作。 #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如...
  • skdkjxy
  • skdkjxy
  • 2015年01月04日 08:42
  • 3407

c语言比较两个字符串是否相等strcmp

C语言提供了几个标准库函数,可以比较两个字符串是否相同。以下是用strcmp()函数比较字符串的一个例子: #include #include int main(void) { cha...
  • Ctrl_qun
  • Ctrl_qun
  • 2017年03月27日 13:38
  • 38174

利用随机化的思想求n个元素当中第k小的元素

未完
  • lingzi_zhou
  • lingzi_zhou
  • 2013年11月12日 23:29
  • 614

shell比较两个字符串是否相等

http://linux.chinaunix.net/techdoc/develop/2008/12/31/1055895.shtml 比较两个字符串是否相等的办法是:  if [ "$test"...
  • lwpping
  • lwpping
  • 2011年11月24日 11:09
  • 338

Gson:比较两个JSON字符串是否完全相等

RT,比较两个JSON字符串是否完全相等,这里使用google贡献的Gson。
  • cleverlzc
  • cleverlzc
  • 2015年09月06日 10:37
  • 7143

shell比较两个字符串是否相等

比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一个空格:这是unix shel...
  • junmuzi
  • junmuzi
  • 2012年11月06日 10:16
  • 303

ORACLE中两个有可能都为NULL的字符串是否相等的比较

在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL。如此一来,在比较两个字符串的时候就会出现意外。请看以下的例子: DECLARE      i VARCHAR2(10...
  • majian_1987
  • majian_1987
  • 2013年01月28日 15:23
  • 3607

shell比较两个字符串是否相等

shell比较两个字符串是否相等 来源: ChinaUnix博客  日期:2008.12.31 11:03 (共有条评论) 我要评论 ...
  • DZtaopao
  • DZtaopao
  • 2013年07月05日 13:37
  • 526

shell比较两个字符串是否相等

比较两个字符串是否相等的办法是:     if [ "$test"x = "test"x ]; then     这里的关键有几点:     1 使用单个等号     2 注意...
  • adermxl
  • adermxl
  • 2014年11月20日 22:00
  • 357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用随机化的思想比较两个字符串是否相等
举报原因:
原因补充:

(最多只允许输入30个字)