七月学习总结及对二分算法的部分心得

从实训正式开始的9号到现在25号的时间里,首先因为对c++语法的不熟悉以及太久没学c了,所以最开始是在洛谷上刷题(入门题目比较多),由于网课天然抗拒性,mooc网现在的进度在分治(摸鱼)。

主要还是讲讲自己对二分算法的主观心得。

首先二分算法也就是二分思想,其衍生出的二分查找在七大查找算法中位列第二,其相对于顺序查找能够减少程序的查找次数,加快运行时间,这是它的优势,但我们也知道,使用二分查找的先决条件是有序数组,并且在实际使用的过程中对左右边界的处理容易出错,这么看来,二分查找似乎成为了一种食之无味弃之可惜的工具,所以这时候我们就应该扩宽思路,二分查找是二分思想的典型,那么二分思想的本质是什么?

这里首先给出二分查找的基本模板:
 

public static int Method(int[] nums, int low, int high, int target)
        {
            while (low <= high)
            {
                int middle = (low + high) / 2;
                if (target == nums[middle])
                {
                    return middle;
                }
                else if (target > nums[middle])
                {
                    low = middle + 1;
                }
                else if (target < nums[middle])
                {
                    high = middle - 1;
                }
            }
            return -1;
        }

实现的过程是依靠找到数组下标后,其值与左右边界比较,再通过对target的比较,裁掉一块边界,然后重新找到新的中间数,然后循环。

再简化:

while(l < r){
    int mid = (l + r) / 2;
    // 如果 满足/不满足 性质
    if(check(mid)) 更新边界1
    else 更新边界2
}
/*
check函数用于判断mid位置的元素是否满足定义的性质
*/

其实这也挺好理解,比如一对有序数组

1 2 3 4 5 6 7 8 9
 

如果我们要找的数字是2,那么第一次二分mid的元素就是5,留下的数组就是

1 2 3 4 

那么这个裁掉右边这一部分的过程中就区分开了:

1 2 3 4                 5(检查是否是中间数若不满足则去掉)                            6 7 8 9     

 满足性质                                                                                                        不满足性质                       

 那么每一次二分的过程其实就是对整个数组左右边界的性质的检查,留下满足性质的,裁去不满足的。

显然,这个性质包含了有序数组且大于某一数这样的个例,也可以是其他的性质。

但实际上我还没找到比较典型的例题- -,所以只能留个坑,等以后再来填了。

                                                                                                                          by 树莓202 syh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值