博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分讲解
阅读量:4205 次
发布时间:2019-05-26

本文共 1219 字,大约阅读时间需要 4 分钟。

二分概述

12.2.1 基本定义

二分法又称分半法,或对分法,是一种方程式根的近似值求法.一般在计算机竞赛中经常使用,为基础算法。二分法有经常做为许多算法的优化途径,可以使一些0(n)的算法优化成0(log(n))

12.2.2 基本思想

二分法的思想:分而治之。将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同,(如果子问题的规模仍然不够小,则再划分为k个子问题), 然后递归的求解这些子问题,最后用适当的方法将各子问题的解合并成原问题的解。

 

12.2.3 基本特征

二分法所能解决的问题一般具有以下几个特征:

(1)该问题的规模缩小到一定的程度就可以容易地解决

(2)该问题可以分解为若干个规模较小的相同问题

(3)该问题所分解出的各个子问题是相互独立的

(4)利用分解出的子问题的解可以合并为该问题的解

12.2.4 二分搜索算法介绍

前提条件:有一组数已经按从小到大(或从大到小)排序

目标:输入一个数x,在这组数查找是否有x

 

二分搜索的步骤:

确定三个关键下标的初值:bott=0, top=8, mid=(bott+top)/2;

判断要找的数x是否等于a[mid] 

x==a[mid]   找到,结束

x<a[mid]   a[bott]—a[mid-1]之间继续查找x

                top=mid-1;  mid=(bott+top)/2;

③ x>a[mid]  a[mid+1]—a[top]之间继续查找x

                bott=mid+1;  mid=(bott+top)/2; 

二分实例介绍:设在数组a中顺序放了以下9个元素:

 

检索x=9Left=0,right=8,mid=(left+right)/2=4;

 

 9==a[4], 一次比较就成功, 最好情况。

检索x=-15Left=0,right=8,mid=(left+right)/2=4;

 

 -15<a[4],right=mid-1=3,mid=(left+right)/2=1;

 

 -15<a[1]Left=0,right=mid-1=0,mid=(left+right)/2=0;

 

 -15==a[0], 3次比较, 成功

二分查找代码:

#include
#define N 10int a[N];int find(int x, int left, int right){ while(left<=right) { int mid=(left+right)/2; if(a[mid]==x) return mid; else if(a[mid]>x) right=mid-1; else left=mid+1; } return -1;}int main( ){ int x,index; printf("请从小到大输入10个数\n"); for(int i=0;i

转载地址:http://tsali.baihongyu.com/

你可能感兴趣的文章
adb常用命令
查看>>
通过LR监控Linux服务器性能
查看>>
通过FTP服务的winsockes录制脚本
查看>>
LRwinsocket协议测试AAA服务器
查看>>
Net远程管理实验
查看>>
反病毒专家谈虚拟机技术 面临两大技术难题
查看>>
几种典型的反病毒技术:特征码技术、覆盖法技术等
查看>>
性能测试一般过程与LR性能测试过程
查看>>
Software Security Testing软件安全测试
查看>>
SQL注入漏洞全接触--进阶篇
查看>>
SQL注入漏洞全接触--高级篇
查看>>
SQL注入法攻击一日通
查看>>
菜鸟入门级:SQL注入攻击
查看>>
用vbs来写sql注入等80端口的攻击脚本
查看>>
C# 检查字符串,防SQL注入攻击
查看>>
关于对SQL注入80004005 及其它错误消息分析
查看>>
即时通软件性能测试(与宴宾的对话)
查看>>
应用软件性能测试的艺术(翻译)——序
查看>>
高级性能测试(翻译)
查看>>
Web安全测试解决方案
查看>>