###对数器的作用
验证算法是否正确
###何时适合使用对数器
数据集量巨大(千万级)
时间紧迫,并想验证算法的正确性
情况复杂
###对数器的概念
有一个你想测试的算法a
实现一个绝对正确但复杂度高的算法b
实现一个随机样本产生器
实现比对算法a和b的方法
多次(100000+)比对a和b来验证a是否正确
如果有样本出错,则打印出来分析
当对此对比测试都正确时,可以判断算法a正确
//求数组长度
template <class T>
int len(T& arr){
int length = (int)sizeof(arr)/sizeof(arr[0]);
return length;
}
//产生随机数组
int* generateRandomArr(int maxSize,int maxValue){
int size = (int)((maxSize+1) * (rand()%10/10.0));
int* array = new int[size];
for(int i =0 ;i < size;i++){
array[i] = (int)((maxValue +1) * (rand()%10/10.0)) - (int)((maxValue +1) * (rand()%10/10.0));
}
return array;
}
//复制数组
int* arrayCopy(int oldArray[]){
if (oldArray == NULL) {
return nullptr;
}
int length = len(oldArray);
int* newArray = new int[length];
for (int i = 0; i<length;i++) {
newArray[i] = oldArray[i];
}
return newArray;
}
//对比两个数组是否一样
bool isEqual(int firstArr[],int Second[]){
if ((firstArr == nullptr && Second != nullptr) ||(firstArr != nullptr && Second == nullptr)) {
return false;
}
if (firstArr == nullptr && Second == nullptr) {
return true;
}
if (len(firstArr) != len(Second)) {
return false;
}
for (int i ; i< len(firstArr); i++) {
if (firstArr[i] != Second[i]) {
return false;
}
}
return true;
}
//对数器
bool testFunction(int maxSize,int maxValue,int time){
bool flag = true ;
for (int i = 0; i<time; i++) {
int* array = generateRandomArr(maxSize, maxValue);
int* arraySame = arrayCopy(array);
//复杂函数对array操作
//*****
//简单函数对arraycopy操作
//*****
if (!isEqual(array, arraySame)) {
flag = false;
break;
}
}
return flag;
}