改进的折半查找算法在充电管理中的应用方法

文档序号:7336842阅读:167来源:国知局
专利名称:改进的折半查找算法在充电管理中的应用方法
技术领域
本发明涉及一种数据查找算法,特别是涉及一种改进的折半查找算法在充电管理中的应用方法。
背景技术
折半查找算法主要是查找有序表中的某个元素,如果找到,则查找成功,并返回该元素的位序,如果没找到,则查找不成功。该算法的优点是 查找效率高,时间复杂度是O(IogN),N为有序表的长度,空间复杂度是0(1);缺点是待查找表必须是有序的,而且不能查找该元素在有序表的哪个区间(即哪两个相邻元素之间)。现有的充电管理功能只能表示手机正在充电,但不能实时数字显示充电进度,SP充电已完成多少,只是在充电完成后会弹出一个提示框提示充电已完成。而有时用户为了后续使用方便,是希望知道手机充了多少电,这样从用户体验的角度,人机界面就不是很友好。

发明内容
本发明要解决的技术问题是为了克服现有的充电管理功能不能实时数字显示充电进度的缺陷,提供一种改进的折半查找算法在充电管理中的应用方法。本发明是通过下述技术方案来解决上述技术问题的一种改进的折半查找算法在充电管理中的应用方法,其特点在于,该方法包括以下步骤=S1、根据电池充电曲线得到一个静态的充电电压表;s2、在对电池充电时,启动一个实时任务,周期地读取该电池的充电电压;S3、在所述充电电压表中用折半查找算法去查找所述电池的充电电压,若查找成功,则执行步骤S4,否则执行步骤S5 ;s4、返回所述电池的充电电压在所述充电电压表中的位序;s5、让查找指针回溯,得知所述电池的充电电压在相应的区间。较佳地,所述静态的充电电压表是一个二维有序表。较佳地,所述步骤S3包括以下步骤S31、设置三个查找指针,分别为一有序表低位指针low、一有序表中位指针mid、一有序表高位指针high,并让low值为0、high值为N-1,其中N为有序表的长度;S32、利用所述的三个查找指针在所述充电电压表中采用所述折半查找算法查找所述电池的充电电压值;S33、若查找成功,则执行步骤S4,否则执行步骤S5。较佳地,所述步骤S4之后还包括将所述位序值在有序表中对应的充电进度数值返回给上层使用。较佳地,所述步骤S5包括以下步骤=S51、使所述有序表低位指针low值减一,然后使所述有序表中位指针mid值为所述有序表高位指针high值与所述有序表低位指针low值之和的一半;S52、比较所述有序表中位指针mid所指示元素值与所述电池的充电电压值的大小,若所述有序表中位指针mid所指示元素值大于所述电池的充电电压值,则执行步骤S53,否则执行步骤S54 ;S53、使所述有序表中位指针mid值减一然后将所述有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用;S54、将所述有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用。本发明的积极进步效果在于本发明通过对折半查找算法进行改进,使改进后的折半查找算法不仅可以查找有序表中的某个元素(如果该元素存在),而且可以查找该元素在有序表中的某个区间(如果该元素不存在);进而,将改进后的折半查找算法用于充电管理中,使在充电过程中可以实时数字显示充电进度,这样就方便了用户的使用,拥有了更友好的人机界面。


图I为本发明较佳实施例的流程图。图2为本发明的折半查找算法的流程图。
具体实施方式
·
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。图I为本发明一较佳实施方式运用折半查找算法在充电管理中的流程图。步骤100,根据电池充电曲线得到一个静态的充电电压表。通常,该充电电压表为一个二维且单增的有序表。其中N为这个电压有序表的长度,batt_adc[N]为电压 ADC 值表,vbatt 为当前充电电压 ADC 值,batt_volt [i] [O] (i = O,
1,2,. . . N-1)为电池在各个时间节点的电压,batt_volt[i] [I] (i = 0,1,2,· . . N-1)为当前充电进度数值,返回给上层使用,比如返回10,代表当前充电已完成10%。一个充电电压表的不例为#define N 20 ;intl6 batt_volt[N] [2] = {{3500,5}, {3580,10}, {3600,15}, {3620,20}, {3640,25}, {3660,30}, {3667,35}, {3674,40},{3682,45}, {3690,50}, {3700,55}, {3739,60}, {3759,65}, {3776,70}, {3787,75}, {3800,80}, {4009,85}, {4138,90}, {4194,95}, {4227,100}}。程序初始化时先将这个表中电压转化成ADC值,这些ADC值存放在数组batt_adc [N]中,batt_adc[N]的值如下batt_adc[N] = {153,193,204,214,224,234,238,241,245,249,255,274,285,293,299,306,412,478,506,510}步骤101,启动一个实时任务,周期地读取当前电池的充电电压ADC值。步骤102,在充电电压表中用改进的折半查找算法查找电池的充电电压。其中,改进的折半查找算法的流程图为图2所示。该流程开始于步骤200。步骤201,设置3个有序表指针,分别为高位指针high、低位指针low、中位指针mid,并使有序表低位指针low值为0,高位指针high值为N-I。步骤202,判断有序表低位指针low值是否小于或者等于高位指针high值,若是,则执行步骤203,否则执行步骤206。步骤203,使有序表中位指针mid值为有序表高位指针high值与有序表低位指针low值之和的一半。步骤204,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否等于当前充电电压ADC值vbatt,若是,则执行步骤205,否则执行步骤210。步骤205,返回有序表中位指针mid值。
步骤206,有序表低位指针low值减I然后使有序表中位指针mid值为有序表闻位指针high值与有序表低位指针low值之和的一半。步骤207,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否小于或者等于当前充电电压ADC值vbatt,若是,则执行步骤209,否则执行步骤208。步骤208,返回有序表中位指针mid值减I之后的值。步骤209,返回有序表中位指针mid值。步骤210,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否大于当前充电电压ADC值vbatt,若是,则执行步骤211,否则执行步骤212。步骤211,使有序表闻位指针high值等于有序表中位指针mid值减I之后的值,然 后返回至步骤202之前。步骤212,使有序表低位指针low值等于有序表中位指针mid值加I之后的值,然后返回至步骤202之前。步骤213,该流程图结束。步骤103,判断查找是否成功,若是,则执行步骤104,否则执行步骤105。步骤104,返回所述电池的充电电压在所述充电电压表中的位序。其中,步骤104之后还包括将所述位序值在有序表中对应的充电进度数值返回给上层使用。步骤105,让查找指针回溯,得知所述电池的充电电压在相应的区间。其中,步骤105包括S51、使有序表低位指针low值减一,然后使有序表中位指针mid值为有序表高位指针high值与有序表低位指针low值之和的一半;S52、比较有序表中位指针mid所指示元素值与所述电池的充电电压值的大小,若有序表中位指针mid所指示元素值大于所述电池的充电电压值,则执行步骤S53,否则执行步骤S54 ;S53、使有序表中位指针mid值减一然后将该有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用;S54、将该有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用。以下通过一具体用户实际查看充电进度案例进一步说明本发明的技术方案例如首先,在数组batt_adc [N]中,为了便于对照数据,下面列了两行数据,第一行数据为数组batt_adc的元素的下标,第二行数据为数组batt_adc的元素。第一行0I 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1718 19第二行153193 204 214 224 234 238 241 245 249 255 274 285 293 299306412 478 506 510然后,在此分两种情况加以讨论。情况I :即当前读到的充电电压在电压有序表中能找到(查找成功)。假设我们当前读到的电池电压ADC值为285,即vbatt = 285,然后我们去查batt_adc [N] ο首先设两个指针low和high,并让low = O, high = N-I = 19。然后进入一个while O 循环。进入该循环后,mid = (low+high) /2 = (0+19)/2 = 9, vbatt = 285 >batt_adc [9] = 249,因而,low = mid+1 = 9+1 = 10,high = 19,mid = (low+high) /2 =(10+19)/2 = 14,vbatt = 285 < batt_adc [14] = 299,因而,low = 10,high = mid-1 =14-1 = 13, mid = (low+high)/2 = (10+13)/2 = 11, vbatt = 285 > batt_adc[11]=274,因而 low = mid+1 = 11+1 = 12,high = 13,mid = (low+high) /2 = (12+13)/2 = 12,vbatt = batt_adc [12] = 285,查找成功,返回 12。然后将 batt_volt [12] [I]这个值返回给上层,表示当前充电已完成65%。情况2 :即当前读到的充电电压在电压有序表中不能找到(查找不成功)。假设我们当前读到的电池电压ADC值为2 87,即vbatt = 287。然后我们去查表batt_adc[N],方法同上。首先设两个指针low和high,并让low = O, high = N-I = 19。然后进入一个 while O 循环。进入该循环后,mid = (low+high) /2 = (0+19)/2 = 9, vbatt =285 > batt_adc [9] = 249,因而,low = mid+1 = 9+1 = 10, high = 19,mid = (low+high) /2=(10+19)/2 = 14,vbatt = 285 < batt_adc[14] = 299,因而 low = 10,high = mid-1=14-1 = 13, mid = (low+high) /2 = (10+13)/2 = 11, vbatt = 285 > batt_adc [11]=274,因而 low = mid+1 = 11+1 = 12,high = 13,mid = (low+high) /2 = (12+13)/2 = 12,vbatt = 287 > batt_adc [12] = 285,因而 low = mid+1 = 12+1 = 13,high = 13,mid
.............1 = (13+13)/2 = 13, vbatt = 287 < batt_adc[13] = 293,因而 low = 13,
high = mid-1 = 13-1 = 12。此时,low > high,退出 while ()循环,查找不成功。退出while ()循环后,让指针 low 回溯,即 low = Iow-I = 13-1 = 12, high =12,mid = (low+high)/2 = (12+12)/2 = 12, vbatt = 287 > batt_adc[12] = 285。因此,vbatt e (batt_adc [12], batt_adc[13]),返回 12,然后将 batt_volt [12] [I]这个值返回给上层,表示当前充电已完成65%。最后,综合上述两种情况,通常待查找的vbatt e [batt_adc[i], batt_adc[i+l]),在该区间对应了相应的充电进度数值。该结论表明,如果当前充电电压落在上述右开区间,那么将相应的充电进度数值batt_volt[i] [I]返回给上层显示(其中i = 0,
1,2,. . . , N-1)。对于边界值,如果vbatt < batt_adc
,则返回O给上层,表示当前充电已完成0%;如果vbatt >= batt_adc[N_l],贝U返回100给上层显示,表示当前已充满。上述实例增量为5%,即、15%、...这样显示。如果为了提高充电数字显示精度,可以定义N的值为100,这样可以1%、2%、3%、...这样显示。综上所述,将上述方法运用在充电管理中,能高效查找当前电池充电电压在充电电压表中的相应区间。从而,可以实时地数字显示当前充电已完成多少,这样就拥有了更友好的人机界面。虽然以上描述了本发明的具体实施方式
,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
权利要求
1.一种改进的折半查找算法在充电管理中的应用方法,其特征在于,该方法包括以下步骤 S1、根据电池充电曲线得到一个静态的充电电压表; S2、在对电池充电时,启动一个实时任务,周期地读取该电池的充电电压; S3、在所述充电电压表中用折半查找算法去查找所述电池的充电电压,若查找成功,则执行步骤s4,否则执行步骤S5 ; S4、返回所述电池的充电电压在所述充电电压表中的位序; S5、让查找指针回溯,得知所述电池的充电电压在相应的区间。
2.如权利要求I所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述静态的充电电压表是一个二维有序表。
3.如权利要求I所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S3包括以下步骤 S31、设置三个查找指针,分别为一有序表低位指针low、一有序表中位指针mid、一有序表高位指针high,并让low值为O、high值为N-I,其中N为有序表的长度; S32、利用所述的三个查找指针在所述充电电压表中采用所述折半查找算法查找所述电池的充电电压值; S33、若查找成功,则执行步骤S4,否则执行步骤S5。
4.如权利要求I所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S4之后还包括将所述位序值在有序表中对应的充电进度数值返回给上层使用。
5.如权利要求3所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S5包括以下步骤 S51、使所述有序表低位指针low值减一,然后使所述有序表中位指针mid值为所述有序表高位指针high值与所述有序表低位指针low值之和的一半; S52、比较所述有序表中位指针mid所指示元素值与所述电池的充电电压值的大小,若所述有序表中位指针mid所指示元素值大于所述电池的充电电压值,则执行步骤S53,否则执行步骤S54 ; S53、使所述有序表中位指针mid值减一然后将所述有序表中位指针mid所指不的位序值在有序表中对应的充电进度数值返回给上层使用; S54、将所述有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用。
全文摘要
本发明公开了一种改进的折半查找算法在充电管理中的应用方法,该方法包括以下步骤S1、根据电池充电曲线得到一个静态的充电电压表;S2、在对电池充电时,启动一个实时任务,周期地读取该电池的充电电压;S3、在所述充电电压表中用折半查找算法去查找所述电池的充电电压,若查找成功,则执行步骤S4,否则执行步骤S5;S4、返回所述电池的充电电压在所述充电电压表中的位序;S5、让查找指针回溯,得知所述电池的充电电压在相应的区间。本发明通过对折半查找算法进行改进,并将改进后的算法运用在充电管理中,可以实时地数字显示当前充电已完成多少,这样就拥有了更友好的人机界面。
文档编号H02J7/00GK102957178SQ20111024773
公开日2013年3月6日 申请日期2011年8月24日 优先权日2011年8月24日
发明者张海斌 申请人:上海晨兴希姆通电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1