资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
对半查表法 有序表的数据排列有一定规律,不必像无序表那样逐个查表,可以采用对半查表法亦称二分查表法)。对半查表就是每次截取表的一半,确定查表元素在哪一部分,逐步细分,缩小检索范围,从而大大加快查表速度。对半查表法的基本思想是:对半查表时,设置两个指针 L0 和 Hi,分别保存表的下限值和上限值的序号,开始查表时设置 Lo=0,Hi=N-1。设 N 个元素按照从小到大的顺序排列,则中心元素的序号为:式中, 表示小于等于(Lo+Hi )/2 的最大整数。由此将表分为前半部分和后半部分。然后计算中心元素的地址: 式中,i 为数据元素的字节数。根据中心元素的位置找出中心元素,并和查表的元素进行比较,若中心元素大于查表的元素,则选取表的前半部分,修改上限指针 Hi :(下限指针Lo 不变) MiH若中心元素小于查表的元素,则选取表的后半部分,修改下限指针 Lo:(上限指针 Hi 不变) iLo若中心元素等于查表的元素,则查表成功.例 52 单片机温度控制系统中,利用 K 分度号热电偶进行温度检测,现假设热电偶输出信号经信号处理后在单片机中的电压代码值为 u1,要求利用对半查表法对被测电压代码查 K 分度表,得到相应的温度值并存入变量 var 中。为了方便查表,将 K 分度表 01300C 范围的 131 个电压值(每隔 10C 对应一个电压值)放大 1000 倍,构成一张表存放在程序存储器中备查。利用对半查表法原理将被测电压代码和表中电压代码比较,找出相等或最接近的元素,最后经计算得到相应的温度值。对半查找程序流程如图 5.1 所示。查表子程序清单如下: unsigned char u1;unsigned int var;/*01300C 范围的 K 分度表,每隔 10C 对应一个电压值*/unsigned char code K_TABLE131=0,397,798,1203,1611,2022,2436,2850,3266,3681,4095,4508,4919,5327,5733,6137,6539,6939,7338,7738,8137,8537 ;void ser2 (void)unsigned int da=0,max ,min,mid;da=u1*1000; /*u1 扩大 1000 倍 */max=130;min=0 ;while(1) mid=(max+min)/2; /*中心元素位置*/if(K_TABmidda) max=mid;)1.5(2/)0(HiLMi )2.5AdmiM表 首 地 址图 5.1 对半查找程序框图else min=mid;if(max-min)10)pid_val_mid=100;return;else if(Error+100) j=j/100; /PID 参数放大了 100 倍,所以要减小 100 倍if(j100)pid_val_mid=100;/全开else if(j0)pid_val_mid=0;/全关else pid_val_mid=j; /计算值
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号