函数查找数组中与给定值最接近的数字(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

我的任务是找到数组中最接近给定值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.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的次数,其中n=r-l+1。然后C(1)=0,对于n>1,对于一些a+b=n,a,b>0,C(n)=C(a)+C(b)+1。然后根据归纳假设,C(n)=a-1+b-1+1=a+b-1=n-1。QED。请注意,无论您如何选择
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-like
abs(a[l]-t)
可能溢出,这个证明都是相同的。这是一个问题吗?code-like
abs(a[l]-t)
可能溢出。这是一个问题吗?