函数查找数组中与给定值最接近的数字(C)
我的任务是找到数组中最接近给定值t的值。我们考虑绝对值 我在C中提出了以下函数:函数查找数组中与给定值最接近的数字(C),c,complexity-theory,C,Complexity Theory,我的任务是找到数组中最接近给定值t的值。我们考虑绝对值 我在C中提出了以下函数: struct tuple { int index; int val; }; typedef struct tuple tuple; tuple find_closest(int A[], int l, int r, int t) { if(l == r) { tuple t1; t1.val = abs(A[l] - t); t1.i
struct tuple
{
int index;
int val;
};
typedef struct tuple tuple;
tuple find_closest(int A[], int l, int r, int t)
{
if(l == r)
{
tuple t1;
t1.val = abs(A[l] - t);
t1.index = l;
return t1;
}
int m = (l+r)/2;
tuple t2, t3;
t2 = find_closest(A, l, m, t);
t3 = find_closest(A, m+1, r, t);
if(t2.val < t3.val)
{
return t2;
}
else
{
return t3;
}
}
int main()
{
int A[] = {5,7,9,13,15,27,2,3};
tuple sol;
sol = find_closest(A, 0, 7, 20);
printf("%d", sol.index);
return 0;
}
struct元组
{
整数指数;
int-val;
};
typedef结构元组;
元组查找最接近(int A[],int l,int r,int t)
{
如果(l==r)
{
元组t1;
t1.val=abs(A[l]-t);
t1.index=l;
返回t1;
}
int m=(l+r)/2;
元组t2,t3;
t2=找到最近的(A,l,m,t);
t3=找到最近的(A,m+1,r,t);
如果(t2.val
我们学习了分而治之的方法,这就是我递归实现它的原因。我试图计算我的解的渐近复杂性,来说明函数的效率。有人能帮忙吗?我不认为我的解决方案是最有效的。代码精确地执行数组值的n-1比较(这很容易用几种方法证明,例如归纳法,或者注意到每次比较都会拒绝一个元素为最佳元素,然后进行比较,直到只剩下一个索引)。递归的深度为ceil(lg(n))
归纳证明是这样的:假设C(n)是执行(t2.val
m
,只要l代码对数组值执行n-1次比较,此证明都是相同的(这很容易用几种方法证明,例如归纳法,或者注意到每次比较都会拒绝一个元素成为最佳元素,然后进行比较,直到只剩下一个索引)。递归的深度是ceil(lg(n))
归纳证明是这样的:假设C(n)是在n=r-l+1时执行(t2.val
的次数,那么C(1)=0,对于n>1,对于一些a+b=n,a,b>0,C(n)=C(a)+C(b)+1=a-1+b-1+1=a+b-1=n-1.QED。请注意,无论您如何选择m
,只要l code-likeabs(a[l]-t)
可能溢出,这个证明都是相同的。这是一个问题吗?code-likeabs(a[l]-t)
可能溢出。这是一个问题吗?