二分法的简单正确实现
2010-08-26 10:37
246 查看
二分法的思想很简单,应用很强大,但是如果没有注意,在平常实现的时候(特别是第一次实现),很容易出问题。似乎某本书上说过能够一次正确实现二分法的程序员不多。
其实我第一次写的时候也没正确实现。后来被指点了一个简单的实现方法。
就以我为例。写二分是这样的
遇到的问题就是死循环。l是不包括正确解得左端(其本身一定不是正确解,正确解在其右边)。r是包含正确解得右端(正确解是其本身或在其左边)。
根据这个定义来看我的代码,循环只有在l>=r的时候结束,但是怎么可能l=r呢?并且根据以上的代码,l不可能大于r
当l = 3,r = 4的时候,mid = 3;结果 l 始终为3,r始终为4
正确的解法就是把判断条件改成 l+1 < r。表示 l 就在 r 的左边一个,那么正确解就是r了。
代码:
其实我第一次写的时候也没正确实现。后来被指点了一个简单的实现方法。
就以我为例。写二分是这样的
int l = 0,r = top,mid; while( l < r ) { mid = ( l + r ) / 2; if( judge( mid ) ) r = mid; else l = mid; }
遇到的问题就是死循环。l是不包括正确解得左端(其本身一定不是正确解,正确解在其右边)。r是包含正确解得右端(正确解是其本身或在其左边)。
根据这个定义来看我的代码,循环只有在l>=r的时候结束,但是怎么可能l=r呢?并且根据以上的代码,l不可能大于r
当l = 3,r = 4的时候,mid = 3;结果 l 始终为3,r始终为4
正确的解法就是把判断条件改成 l+1 < r。表示 l 就在 r 的左边一个,那么正确解就是r了。
代码:
int l = 0,r = top,mid; while( l + 1 < r ) { mid = ( l + r ) / 2; if( judge( mid ) ) r = mid; else l = mid; } return r;
相关文章推荐
- 实现简单的输入编辑,录入正确的字符串,出现‘$’,表示撤销前一个输入,发现连续的‘$’,表示连续撤销前面的输入;发现‘%’,表示放弃前面所有录入;生成最终结果。
- 二叉搜索树应用-判断一个单词是否拼写正确,实现简单字典
- 实现简单的输入编辑,录入正确的字符串,出现‘$’,表示撤销前一个输入, 发现连续的‘$’,表示连续撤销前面的输入;发现‘%’,表示放弃前面所有录入; 生成最终结果。
- 冒泡排序、二分法查找基于Java的简单实现
- 搜索二叉树应用---判断单词正确与否,简单字典的实现,出现ip次数的统计
- Java实现简单的二分法查找int数组中的某值
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- 2012年11月19日 ---利用wifiap简单实现Wifi无线Web认证
- 图片跑马灯抽奖,本地图片变换简单实现
- 简单工厂实现
- JAVAEE中用Session简单实现购物车功能示例代码
- 简单实现大方接地气的五角星评分
- 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行
- 蚁群算法的简单实现
- CSDN简单安卓客户端实现
- 记录我的第一个用ssh框架开发的web项目——实现简单的登录注册以及增删查改(一)
- HASH算法的简单实现及测试
- 简单的计算器的实现
- 简单的内容加密解密,在嵌入式上实现
- 简单Python脚本实现数据导出Excel格式的尝试