0
点赞
收藏
分享

微信扫一扫

对数器的使用

闲云困兽 2022-03-10 阅读 37

对数器简单来说就是在面对同一个问题时,用一种暴力简单但效率不高的算法,来验证另外一种较为复杂的算法的正确性。emmmmm也有可能你写的两套算法都错的。

具体做法就是用一套随机生成器来生成输入,然后分别用两套算法来得到答案,最后将答案进行比对即可。

public static int[] generateRandomArray(int maxSize,int maxValue) {
		int[] arr = new int[(int)((maxSize+1)*Math.random())];
		for(int i=0;i<arr.length;i++) {
			arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue*Math.random());
			
		}
		
		return arr;
	}
	
	public static int[] copyArray(int[] arr) {
		if (arr == null) {
			return null;
		}
		int[] copyArr = new int[arr.length];
		for(int i=0;i<arr.length;i++) {
			copyArr[i] = arr[i];
		}
		return copyArr;
	}
	public static boolean isEqual(int[] arr1,int[] arr2) {
		if((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if(arr1 == null && arr2 == null) {
			return true;
		}
		if(arr1.length != arr2.length) {
			return false;
		}
		for(int i=0;i<arr1.length;i++) {
			if(arr1[i] != arr2[i]) {
				return false;
			}
		}
		
		return true;
	}

	public static void main(String[] args) {
		int testTime = 1000;
		int maxSize = 20;
		int maxValue = 100;
		boolean success = true;
		for(int i=0;i<testTime;i++) {
			
			int[] arr1 = generateRandomArray(maxSize, maxValue);
			int[] arr2 =copyArray(arr1);
			selectSort(arr1);
			insertSort(arr2);
			if(!isEqual(arr1, arr2)) {
				
				success = false;
				break;
				
			}
			
			
			
		}
		
		System.out.println(success?"nice":"No");
	}
举报

相关推荐

0 条评论