/** * 倍率测试: 估计运行时间的增长数量级的方法,用于发现性能问题 * T(N) = a* N^b *lg N -> T(2N)/T(N) = 2^b * 一般地,数学模型中的对数项是不能忽略的,但在倍率假设中预测性能的公式并不那么重要 * 可选单次测试数或者大量重复测试数 */ void doubling_ratio(char *alg){ double prev=multitests(alg,125,20); int N=250; while(N <= 200000){ double cur=multitests(alg,N,20); //大量的重复测试数 printf("%8d %8.1f",N,cur); printf("%5.1f\n",cur/prev); prev=cur; N <<=1; } }
void compare_algo(int len,int tests){ item_t *arr=malloc(sizeof(item_t)*len); /*随机生成数据,并进行排序*/ random_array(arr,len,1000000); qsort(arr,len,sizeof(item_t),item_cmp); double total1=0.0; double total2=0.0; int i; for(i=0;i<len;i++){ total2 +=multitests("binsearch",arr,len,arr[i],tests); total1 +=multitests("bsearch",arr,len,arr[i],tests); } printf("bsearch = %.2f\n",total1/tests); printf("binsearch = %.2f\n",total2/tests); }