利用随机化的思想比较两个字符串是否相等
2013-11-12 23:42
465 查看
对于一般情况,只需利用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值随机选择,使得错判概率成为小概率事件。具体代码如下:
任一字符串均可转化为二进制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); } }
相关文章推荐
- Java中,比较两个字符串引用变量是否相等
- c语言比较两个字符串是否相等strcmp
- shell比较两个字符串是否相等
- c\c++中比较两个字符串或string对象是否相等
- 比较输入的两个字符串是否相等(c++ 11)
- Java 比较两个对象是否相等【含字符串,区分与不区分大小写】
- shell比较两个字符串是否相等
- c\c++中比较两个字符串或string对象是否相等
- 比较两个字符串是否相等?
- Java中比较两个字符串是否相等的问题
- 比较两个字符串是否相等
- c\c++中比较两个字符串或string对象是否相等
- 在IE下 javascript比较两个字符串(包括中文汉字)是否相等
- shell比较两个字符串是否相等
- c语言比较两个字符串是否相等strcmp
- 转:shell比较两个字符串是否相等
- c\c++中比较两个字符串或string对象是否相等
- Gson:比较两个JSON字符串是否完全相等
- 比较两个字符串是否相等
- PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法