- android - AmazonSNS - AwsCredentials.properties - NullPointerException
- android - ListView invalidate() 与 invalidateViews() 之间的区别?
- android - 获取上下文的问题
- Android M 权限模型
我试图比较这 3 种搜索算法,起初我使用 time.h 库但没有任何反应,输出始终是 0.00000 秒。现在我试图在循环中使用一些计数器。但我在这里也有问题, 任何人都可以帮我处理代码吗?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
void binarySearch(int a[],int,int,int*);
int interpolationSearch(int [],int,int,int*);
int linearSearch(int a[],int,int,int*);
int main()
{
int size=10;
int a[size],i,search,pos,pos2;
double extime1,extime2,extime3;
int t=0,b=0,c=0;
int *counter1,*counter2,*counter3;
counter1=&t;
counter2=&b;
counter3=&c;
for(i=0;i<size;i++)
{
a[i]=i;
}
printf("ENTER A NUMBER TO FIND\n");
scanf("%d",&search);
//BINARY SEARCH
clock_t start1,end1;
start1=clock();
binarySearch(a,size,search,counter1);
end1=clock();
extime1=(double)(end1-start1)*100000/CLOCKS_PER_SEC;
printf("EXECUTION TIME FOR THE BINARY SEARCH IS %f SECONDS:\n\n",extime1);
//LINEAR SEARCH
clock_t start2,end2;
start2=clock();
pos=linearSearch(a,size,search,counter2);
if(pos==-1)
{
printf("%d IS NOT PRESENT IN ARRAY.\n",search);
}
else
{
printf("%d IS PRESENT AT LOCATION %d.\n",search,pos+1);
}
end2=clock();
extime2=(double)(end2-start2)*100000/CLOCKS_PER_SEC;
printf("EXECUTION TIME FOR THE LINEAR SEARCH IS %f SECONDS:\n\n",extime2);
//INTERPOLATION SEARCH
clock_t start3,end3;
start3=clock();
pos2=interpolationSearch(a,size,search,counter3);
if(pos2==-1)
{
printf("ELEMENT %d NOT FOUND\n",search);
}
else
{
printf("ELEMENT %d FOUND AT POSITION %d\n",search,pos2+1);
}
end3=clock();
extime3=(double)(end3-start3)*100000/CLOCKS_PER_SEC;
printf("EXECUTION TIME FOR THE INTERPOLATION SEARCH IS %f SECONDS:\n\n",extime3);
//COUNTERS
printf("%d\n",t);
printf("%d\n",b);
printf("%d\n",c);
return 0;
}
void binarySearch(int a[],int size,int search,int *counter1)
{
int first=0;
int last=size-1;
int middle=(first+last)/2;
while(first<=last)
{
*counter1++;
if(a[middle]<search)
{
first=middle+1;
}
else if(a[middle]==search)
{
printf("%d FOUND AT LOCATION %d.\n",search,middle+1);
break;
}
else
{
last=middle-1;
}
middle=(first+last)/2;
}
if(first>last)
{
printf("NOT FOUND.%d IS NOT PRESENTED INT THE LIST.\n",search);
}
}
int linearSearch(int a[],int size,int search,int *counter2)
{
int i;
for(i=0;i<size;i++)
{
*counter2++;
if(a[i]==search)
{
return i;
}
}
return -1;
}
int interpolationSearch(int a[],int n,int k,int *counter3)
{
int low=0,up=n-1,pos;
while(low<=up)
{
*counter3++;
if((k<a[low])||(k>a[up]))
{
return -1;
}
pos=low + (int) ((double) (up - low))*(((double) (k - a[low])) / ((double) (a[up] - a[low])));
if(a[pos]==k)
{
return pos;
}
else if(a[pos]>k)
{
up=pos-1;
}
else
{
low=pos+1;
}
}
return (-1);
}
最佳答案
你可以这样做:
#define MAX_ITER_COUNT 1000000
...
clock_t start1,end1;
start1=clock();
for(iteration = 0; iteration < MAX_ITER_COUNT; ++iteration) {
binarySearch(a,size,search,counter1);
}
end1=clock();
extime1=(double)(end1-start1)*100000/CLOCKS_PER_SEC/MAX_ITER_COUNT;
printf("EXECUTION TIME FOR THE BINARY SEARCH IS %f SECONDS:\n\n",extime1);
这将重复搜索一百万次以使时间可测量。尽管使用这种方法您最终也会增加调用开销。为避免这种情况,您可能希望将循环放在要分析的函数内。
检查 this使用 gettimeofday
和 timersub
关于c - c语言搜索算法执行时间(精度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29278831/
关于这个话题已经说了很多,但是我找不到我的问题的确切答案。 JavaScript 无法准确表示 0.1 等小数,这是可以理解的。 例如,由于乘法运算期间发生舍入误差,这是正确的: 0.1 * 3 ==
在 zig 中,可以使用“{d}”以十进制表示法打印浮点值。这将自动以全精度打印该值。有没有办法指定位数?是针对每个值,还是作为某种全局设置? 最佳答案 这将限制小数点后的位数,四舍五入和零填充: f
我正在进行的项目需要高精度。减法时我遇到的问题在这里说明: >> 1-0.9999999999999999 ans = 1.1102e-16 >> 1-0.99999999999999999 ans
是否可以使变量本身的精度成为将在运行时定义的变量? 说,如果我尝试编译: SUBROUTINE FOO( VARIABLE, PRECISION_VALUE ) IMPLICI
我正在查询 SQLite 数据库以获取纬度/经度详细信息。 SELECT * FROM tblMain where latitude > -33.866 and latitude 151.20
我一直使用下划线将整数定义为 Fortran 中的特定类型。 下面是一段代码,用于演示 1_8 的含义,例如: program main implicit none integer(2)
我正在寻找一种方法来告诉 pint 要打印多少个有效数字。例如,当我输入以下内容时: import pint ureg = pint.UnitRegistry() print(3*ureg.m /9)
我正在从事一个项目,目标是从山上追踪动物。在第一个实地考察季中,我们使用了 OpenTags 和经过校准的摄像头,虽然可以正常工作,但需要大量的处理/校准,而且至关重要的是,当系统出现问题时无法提供任
在 JavaScript 中有没有一种方法可以确定一个数除以另一个数是否会得到整数?就像 18.4/0.002 给我们 9200,但是 18.4/0.1 给我们 183.99999999999997。
我正在尝试使用 Big.js 在 javascript 中完成此计算 r = (a * b)/ sqrt( ( a*sin(θ) )^2 + ( b*cos(θ) )^2 ) 我也试过 math.js
我有这个片段着色器代码,它在 iOS 模拟器(非视网膜)和 iPad2(非视网膜)之间显示不同: highp vec2 textCoord; textCoord.x = gl_Fr
这个问题在这里已经有了答案: C++ calculating more precise than double or long double (2 个答案) 关闭 6 年前。 是否有任何浮点类型在小
我似乎一直困惑的三个问题: 为什么代码是 x & ~077比这行代码 x & 0177700 更好。是因为精度损失较小吗? 为什么此代码对于设置数字中的第 5 位不正确? num = num + 0x
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Precision of Floating Point 我正在尝试使用一些 float 来计算概率,但我的最
由于微 Controller 的精度,我定义了一个包含两个 float 比率的符号,而不是直接写结果。 #define INTERVAL (0.01F/0.499F) 代替 #defi
我试图比较这 3 种搜索算法,起初我使用 time.h 库但没有任何反应,输出始终是 0.00000 秒。现在我试图在循环中使用一些计数器。但我在这里也有问题, 任何人都可以帮我处理代码吗? 这是我的
char buf[10]; int counter, x = 0; snprintf (buf, sizeof buf , "%.100d%n", x, &counter); printf("Coun
我注意到在评估向量时对我来说是不可预测的行为。直接执行它与在循环中进行索引似乎是完全不同的。谁能帮我解决这个问题?我知道可能在它如何进行每个操作中都有解释,所以我需要一些关于如何查找它的键 多谢指教提
我想在我的应用程序中使用精确的 gps 定位。所以我遵循了一个简单的教程(LocationManager 的基本用法,明确要求 GPS 提供商,要求更新 0 ms,0 m)并创建了一个应用程序。我对更
float 在 1.0f 和 0.0f 之间有多少位精度,这样每个值都可以唯一表示? 例如,如果第一个小数 float 不能表示 0.13f,答案就是 float 只有一位精度。 最佳答案 std::
我是一名优秀的程序员,十分优秀!