第二章作业

1、对二分法思想的体会

二分法看似简单,却可以解决许多难题,例如分派问题等等。它是运用分治策略的一个例子,其基本思想就是将n个元素分成个数大致相同的两半,取a[n / 2]与x作比较。如果x = a[n / 2],则找到x,算法终止;如果x < a[n /2],则只在数组a的右半边继续搜索x。整个算法时间复杂度为O(logn)。

该代码为记录次数的二分查找(循环):

int BS(int a[],int x, int n){
    int l = 0;
    int r = n - 1;
    int count = 0;
    while(l <= r){
    count ++;
    int m =(l + r) / 2;
    if(x == a[m]) {
        cout << m <<endl << count;
        return m;
    }
    if(x > a[m]){
        l = m+1;
        }
    else {
        r = m-1;
    }
    }

    cout << "-1" <<endl << count;
    return -1;
}
View Code

该代码为记录次数的二分查找(递归):

int BS(int a[], int x, int l, int r, int &count){
    count ++;
    if(l == r){
        if(x == a[l])
            return l;
        else
            return -1;
    while(l < r){
        int m = (l + r) / 2;
        if(x == a[m])
            return m;
        if(x < a[m]) 
            return BS(a, x, l, m-1, count);
        if(x > a[m])
            return BS(a, x, m+1, r, count);
    }
    }
}
View Code

对于其他的二分法的变形,有可能有难度,但是只要掌握了原理最后都会迎刃而解。

2、结对编程情况汇报

我与我的小伙伴詹泽伟同学在编程中相处融洽,有时我想破脑壳都没debug,他一眼就看出来了,团队的力量还是强大的,为我的小伙伴点赞!下次还可以一起打更难的题!

posted @ 2019-10-08 19:21  杨玉翔  阅读(143)  评论(1编辑  收藏  举报