对数器的概念
1,有一个你想要测的方法a。
2,有一个绝对正确且容易实现,但复杂度不好的方法b。
3,实现一个随机样本产生器。
4,把方法a和方法b跑相同的随机样本,看看得到的结果是否一样。
5,如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,对方法a进行修改。
6,当样本数量足够多时,比对测试依然正确,可以确定方法a已经正确。
对数器的使用
知道了对数器的概念后,下面以插入排序为例子,来看一下对数器如何使用。
import random
def insertSort(arr): #插入排序,要测试的方法a
if(len(arr) == 0 or len(arr)<2):
return ;
for i in range(1,len(arr)):
j=i-1
while j>=0 and arr[j+1]<arr[j]: #看第i个数,当前数往左换到不能交换时停
arr[j],arr[j+1]=arr[j+1],arr[j]
j-=1
def compator(arr): #绝对正确的方法b,这里采用内置函数
list.sort(arr)
def copyArray(arr): #复制一个数组
arr2=[]
for i in range(0,len(arr)):
arr2.append(arr[i])
return arr2
def generateRandomArray(maxSize,maxValue): #用于产生随机数组
arr=[]
for i in range(0,maxSize):
arr.append(random.randint(0,maxValue))
return arr
if __name__ == '__main__':
testTime = 500000; #测试的次数
maxSize=8; #数组的长度
maxValue=100; #产生随机数的最大值
succeed = True;
a=generateRandomArray(10,100)
for i in range(0,testTime):
arr1=generateRandomArray(maxSize,maxValue)
arr2=copyArray(arr1)
insertSort(arr1) #要测的方法
compator(arr2) #绝对正确的方法
if(arr1!=arr2):
succeed=False
print(arr1)
print(arr2)
break
if(succeed):
print("Nice!,算法测试成功!")