设想一种类似电力监控的应用,需要记录某个时刻的电网参数,比如三相电压、电流等,这些数据存放在产品模块的EEPROM或者FLASH中,在要记录的参数是固定的情况下,每组数据占用的空间大小是一致的,比如这样:
2008年7月1日18时30分20秒 电压x.x V 电流x.x A 频率x.x Hz
2008年7月10日15时10分06秒 电压x.x V 电流x.x A 频率x.x Hz
。。。
这里的时间和参数都有固定的字节数,这样任意时刻的测量数据顺序存在存储器中,问题是如果要查找某个时刻的对应数据怎么找最快?
最合适的算法自然是使用HashTable(哈希表),先介绍介绍其中的基本知识,所谓Hash,一般是一个整数,通过某种算法,可以把一个字符串"压缩" 成一个整数,这个数称为Hash,反之,一个32位整数是无法对应回一个字符串的,但在程序中,两个字符串计算出的Hash值相等的可能性非常小。
先根据要存储的数据量构造一个一定大小的哈希表,然后每产生一条上述格式的数据,把年月日时分秒对应的字符串进行压缩,得到的哈希值取模,找到哈希表的对应位置写入该数据的存储的首地址,这样随着测量数据的产生,哈希表就建立起来了。
关于哈希表的优化参见:http://shadowflare.samods.org/inside_mopaq/chapter2.htm
来自Blizzard的精妙算法
文章评论(0条评论)
登录后参与讨论