CN102957178A - 改进的折半查找算法在充电管理中的应用方法 - Google Patents
改进的折半查找算法在充电管理中的应用方法 Download PDFInfo
- Publication number
- CN102957178A CN102957178A CN2011102477365A CN201110247736A CN102957178A CN 102957178 A CN102957178 A CN 102957178A CN 2011102477365 A CN2011102477365 A CN 2011102477365A CN 201110247736 A CN201110247736 A CN 201110247736A CN 102957178 A CN102957178 A CN 102957178A
- Authority
- CN
- China
- Prior art keywords
- ordered list
- value
- charging voltage
- bit pointer
- battery
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Charge And Discharge Circuits For Batteries Or The Like (AREA)
- Secondary Cells (AREA)
Abstract
本发明公开了一种改进的折半查找算法在充电管理中的应用方法,该方法包括以下步骤:S1、根据电池充电曲线得到一个静态的充电电压表;S2、在对电池充电时,启动一个实时任务,周期地读取该电池的充电电压;S3、在所述充电电压表中用折半查找算法去查找所述电池的充电电压,若查找成功,则执行步骤S4,否则执行步骤S5;S4、返回所述电池的充电电压在所述充电电压表中的位序;S5、让查找指针回溯,得知所述电池的充电电压在相应的区间。本发明通过对折半查找算法进行改进,并将改进后的算法运用在充电管理中,可以实时地数字显示当前充电已完成多少,这样就拥有了更友好的人机界面。
Description
技术领域
本发明涉及一种数据查找算法,特别是涉及一种改进的折半查找算法在充电管理中的应用方法。
背景技术
折半查找算法主要是查找有序表中的某个元素,如果找到,则查找成功,并返回该元素的位序,如果没找到,则查找不成功。该算法的优点是查找效率高,时间复杂度是O(logN),N为有序表的长度,空间复杂度是O(1);缺点是待查找表必须是有序的,而且不能查找该元素在有序表的哪个区间(即哪两个相邻元素之间)。
现有的充电管理功能只能表示手机正在充电,但不能实时数字显示充电进度,即充电已完成多少,只是在充电完成后会弹出一个提示框提示充电已完成。而有时用户为了后续使用方便,是希望知道手机充了多少电,这样从用户体验的角度,人机界面就不是很友好。
发明内容
本发明要解决的技术问题是为了克服现有的充电管理功能不能实时数字显示充电进度的缺陷,提供一种改进的折半查找算法在充电管理中的应用方法。
本发明是通过下述技术方案来解决上述技术问题的:一种改进的折半查找算法在充电管理中的应用方法,其特点在于,该方法包括以下步骤: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所指示的位序值在有序表中对应的充电进度数值返回给上层使用。
本发明的积极进步效果在于:本发明通过对折半查找算法进行改进,使改进后的折半查找算法不仅可以查找有序表中的某个元素(如果该元素存在),而且可以查找该元素在有序表中的某个区间(如果该元素不存在);进而,将改进后的折半查找算法用于充电管理中,使在充电过程中可以实时数字显示充电进度,这样就方便了用户的使用,拥有了更友好的人机界面。
附图说明
图1为本发明较佳实施例的流程图。
图2为本发明的折半查找算法的流程图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
图1为本发明一较佳实施方式运用折半查找算法在充电管理中的流程图。
步骤100,根据电池充电曲线得到一个静态的充电电压表。
通常,该充电电压表为一个二维且单增的有序表。其中N为这个电压有序表的长度,batt_adc[N]为电压ADC值表,vbatt为当前充电电压ADC值,batt_volt[i][0](i=0,1,2,...N-1)为电池在各个时间节点的电压,batt_volt[i][1](i=0,1,2,...N-1)为当前充电进度数值,返回给上层使用,比如返回10,代表当前充电已完成10%。
一个充电电压表的示例为:#define N 20;int16 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-1。
步骤202,判断有序表低位指针low值是否小于或者等于高位指针high值,若是,则执行步骤203,否则执行步骤206。
步骤203,使有序表中位指针mid值为有序表高位指针high值与有序表低位指针low值之和的一半。
步骤204,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否等于当前充电电压ADC值vbatt,若是,则执行步骤205,否则执行步骤210。
步骤205,返回有序表中位指针mid值。
步骤206,有序表低位指针low值减1然后使有序表中位指针mid值为有序表高位指针high值与有序表低位指针low值之和的一半。
步骤207,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否小于或者等于当前充电电压ADC值vbatt,若是,则执行步骤209,否则执行步骤208。
步骤208,返回有序表中位指针mid值减1之后的值。
步骤209,返回有序表中位指针mid值。
步骤210,判断电压ADC有序表中位指针batt_adc[mid]所指的值是否大于当前充电电压ADC值vbatt,若是,则执行步骤211,否则执行步骤212。
步骤211,使有序表高位指针high值等于有序表中位指针mid值减1之后的值,然后返回至步骤202之前。
步骤212,使有序表低位指针low值等于有序表中位指针mid值加1之后的值,然后返回至步骤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的元素。
第一行:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1718 19
第二行:153 193 204 214 224 234 238 241 245 249 255 274 285 293 299 306412 478 506 510
然后,在此分两种情况加以讨论。
情况1:即当前读到的充电电压在电压有序表中能找到(查找成功)。
假设我们当前读到的电池电压ADC值为285,即vbatt=285,然后我们去查batt_adc[N]。首先设两个指针low和high,并让low=0,high=N-1=19。然后进入一个while()循环。进入该循环后,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][1]这个值返回给上层,表示当前充电已完成65%。
情况2:即当前读到的充电电压在电压有序表中不能找到(查找不成功)。
假设我们当前读到的电池电压ADC值为287,即vbatt=287。然后我们去查表batt_adc[N],方法同上。首先设两个指针low和high,并让low=0,high=N-1=19。然后进入一个while()循环。进入该循环后,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=(low+high)/2=(13+13)/2=13,vbatt=287<batt_adc[13]=293,因而low=13,high=mid-1=13-1=12。此时,low>high,退出while()循环,查找不成功。
退出while()循环后,让指针low回溯,即low=low-1=13-1=12,high=12,mid=(low+high)/2=(12+12)/2=12,vbatt=287>batt_adc[12]=285。因此,vbatt∈(batt_adc[12],batt_adc[13]),返回12,然后将batt_volt[12][1]这个值返回给上层,表示当前充电已完成65%。
最后,综合上述两种情况,通常待查找的vbatt∈[batt_adc[i],batt_adc[i+1]),在该区间对应了相应的充电进度数值。该结论表明,如果当前充电电压落在上述右开区间,那么将相应的充电进度数值batt_volt[i][1]返回给上层显示(其中i=0,1,2,...,N-1)。对于边界值,如果vbatt<batt_adc[0],则返回0给上层,表示当前充电已完成0%;如果vbatt>=batt_adc[N-1],则返回100给上层显示,表示当前已充满。上述实例增量为5%,即5%、10%、15%、...这样显示。如果为了提高充电数字显示精度,可以定义N的值为100,这样可以1%、2%、3%、...这样显示。
综上所述,将上述方法运用在充电管理中,能高效查找当前电池充电电压在充电电压表中的相应区间。从而,可以实时地数字显示当前充电已完成多少,这样就拥有了更友好的人机界面。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
Claims (5)
1.一种改进的折半查找算法在充电管理中的应用方法,其特征在于,该方法包括以下步骤:
S1、根据电池充电曲线得到一个静态的充电电压表;
S2、在对电池充电时,启动一个实时任务,周期地读取该电池的充电电压;
S3、在所述充电电压表中用折半查找算法去查找所述电池的充电电压,若查找成功,则执行步骤S4,否则执行步骤S5;
S4、返回所述电池的充电电压在所述充电电压表中的位序;
S5、让查找指针回溯,得知所述电池的充电电压在相应的区间。
2.如权利要求1所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述静态的充电电压表是一个二维有序表。
3.如权利要求1所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S3包括以下步骤:
S31、设置三个查找指针,分别为一有序表低位指针low、一有序表中位指针mid、一有序表高位指针high,并让low值为0、high值为N-1,其中N为有序表的长度;
S32、利用所述的三个查找指针在所述充电电压表中采用所述折半查找算法查找所述电池的充电电压值;
S33、若查找成功,则执行步骤S4,否则执行步骤S5。
4.如权利要求1所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S4之后还包括:将所述位序值在有序表中对应的充电进度数值返回给上层使用。
5.如权利要求3所述的一种改进的折半查找算法在充电管理中的应用方法,其特征在于,所述步骤S5包括以下步骤:
S51、使所述有序表低位指针low值减一,然后使所述有序表中位指针mid值为所述有序表高位指针high值与所述有序表低位指针low值之和的一半;
S52、比较所述有序表中位指针mid所指示元素值与所述电池的充电电压值的大小,若所述有序表中位指针mid所指示元素值大于所述电池的充电电压值,则执行步骤S53,否则执行步骤S54;
S53、使所述有序表中位指针mid值减一然后将所述有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用;
S54、将所述有序表中位指针mid所指示的位序值在有序表中对应的充电进度数值返回给上层使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110247736.5A CN102957178B (zh) | 2011-08-24 | 2011-08-24 | 改进的折半查找算法在充电管理中的应用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110247736.5A CN102957178B (zh) | 2011-08-24 | 2011-08-24 | 改进的折半查找算法在充电管理中的应用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102957178A true CN102957178A (zh) | 2013-03-06 |
CN102957178B CN102957178B (zh) | 2015-09-09 |
Family
ID=47765594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110247736.5A Active CN102957178B (zh) | 2011-08-24 | 2011-08-24 | 改进的折半查找算法在充电管理中的应用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102957178B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018049860A1 (zh) * | 2016-09-13 | 2018-03-22 | 华为技术有限公司 | 信息的显示方法和终端 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434603A (zh) * | 2002-01-23 | 2003-08-06 | 华为技术有限公司 | 一种查找表电路的实现方法及查找表电路 |
CN1529233A (zh) * | 2003-10-17 | 2004-09-15 | 清华大学 | 嵌入式实时操作系统的二分查找式任务调度方法 |
CN1873639A (zh) * | 2006-06-03 | 2006-12-06 | 中国科学技术大学 | 一种基于响应表的模拟电信号响应方法 |
US20100312651A1 (en) * | 2005-09-15 | 2010-12-09 | Microsoft Corporation | Truth Revealing Market Equilibrium |
-
2011
- 2011-08-24 CN CN201110247736.5A patent/CN102957178B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434603A (zh) * | 2002-01-23 | 2003-08-06 | 华为技术有限公司 | 一种查找表电路的实现方法及查找表电路 |
CN1529233A (zh) * | 2003-10-17 | 2004-09-15 | 清华大学 | 嵌入式实时操作系统的二分查找式任务调度方法 |
US20100312651A1 (en) * | 2005-09-15 | 2010-12-09 | Microsoft Corporation | Truth Revealing Market Equilibrium |
CN1873639A (zh) * | 2006-06-03 | 2006-12-06 | 中国科学技术大学 | 一种基于响应表的模拟电信号响应方法 |
Non-Patent Citations (2)
Title |
---|
方铖: "一种改进的折半查找算法", 《现代电子技术》 * |
王海涛等: "基于折半查找算法的研究与改进", 《计算机与数字工程》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018049860A1 (zh) * | 2016-09-13 | 2018-03-22 | 华为技术有限公司 | 信息的显示方法和终端 |
US10694020B2 (en) | 2016-09-13 | 2020-06-23 | Huawei Technologies Co., Ltd. | Information displaying method and terminal |
US10778832B2 (en) | 2016-09-13 | 2020-09-15 | Huawei Technologies Co., Ltd. | Information displaying method and terminal |
US11025768B2 (en) | 2016-09-13 | 2021-06-01 | Huawei Technologies Co., Ltd. | Information displaying method and terminal |
Also Published As
Publication number | Publication date |
---|---|
CN102957178B (zh) | 2015-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101436690B (zh) | 一种充电时间的确定方法、装置和终端设备 | |
CN104133822B (zh) | 一种对存储器上的文件进行扫描的方法及装置 | |
CN102929981B (zh) | 多媒体扫描文件索引方法及装置 | |
CN101853168A (zh) | 一种整理桌面图标的方法和装置 | |
CN102087585A (zh) | 触摸屏终端的解锁方法及触摸屏终端 | |
CN103678536A (zh) | 一种实现页面返回操作的方法及装置 | |
CN101901175A (zh) | 一种数据备份的方法及电子终端 | |
CN104321949B (zh) | 为电池充电 | |
CN106095615A (zh) | 应用数据还原方法及装置 | |
CN104505552A (zh) | 一种充电方法及充电装置 | |
CN103391362B (zh) | 一种基于功耗的应用分类方法及移动终端 | |
CN102937913B (zh) | 一种管理默认应用程序的方法及装置 | |
CN103198027A (zh) | 一种存储文件和提供文件的方法和装置 | |
CN104659881B (zh) | 移动终端的充电方法及装置 | |
CN106842042A (zh) | 一种对电量显示进行校准的方法、系统以及电子设备 | |
CN104166730A (zh) | 一种呈现搜索结果的方法及装置 | |
CN104333087A (zh) | 移动终端及其智能显示充电电量的方法 | |
CN106055404B (zh) | 一种清理后台应用程序的方法和装置 | |
CN104158962B (zh) | 移动终端显示屏控制方法及其系统 | |
CN101887310A (zh) | 一种输入状态及键盘样式的切换方法和装置 | |
CN103198157B (zh) | 一种大地电场数据的压缩存储处理方法 | |
CN103997557A (zh) | 一种通讯录管理方法及移动终端 | |
CN111025068B (zh) | 电表负荷曲线数据抄读方法、装置和电子设备 | |
CN102088635A (zh) | 网络电视机记录历史搜索关键字的方法 | |
CN103035968A (zh) | 一种移动终端充电方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200728 Address after: Location 6h3, No.17 plant, No.33 Xiya Road, Shanghai Pudong New Area Free Trade Zone, 200120 Patentee after: SHANGHAI MOBILETEK TELECOMMUNICATION Ltd. Address before: 201700 No. 888 Shengli Road, Qingpu District, Shanghai Patentee before: SHANGHAI SUNRISE SIMCOM ELECTRONIC TECHNOLOGY Co.,Ltd. |