最近在做一个类似门禁的项目,要求将10万张ID卡号(4字节)存到外部Flash内,要求添加,查找和删除的速度够快。原来的要求只是存1万张,我采用了比较笨的办法:
1. 一万个卡号存到10个扇区(flash扇区有4K byte)保存,每个每个扇区存1000个记录,外加该扇区所存的记录的数目,占两个字节。
2. 添加 : 从第一个扇区开始填充,每添加一次记录。将该扇区内的记录添加到末尾,然后将该扇区内的记录从小到大排序。 第一个扇区添加满了,放到第二个扇区,用同样的方法。
3. 查找: 将有记录保存的扇区数据读出,用二分法查找。 删除: 将有记录保存的扇区数据读出,用二分法查找,找到以后将该位置的记录全部置F,然后重新排序,回写到该扇区。
上述笨办法,3到4万个记录的保存和查找都很快,但是要求到10万个以上估计就比较慢了。没学过数据结构和算法之类的,感觉有些茫然。
目前的想法:
用哈希算法 哈希函数使用ID卡号做KEY,重叠求和取余 得到卡号需要保存到的扇区 , 卡号数据存到100个扇区。 冲突解决是 :当同义冲突保存满某一个扇区(这个扇区内的数据还是排序好),在该扇区的最后一条记录 后保存溢出的第一条记录的指针(目的是溢出区的记录 采用拉链法将所有溢出的记录连接起来,方便查找)再开辟一个3万记录的溢出区域,保存溢出的记录。
问:是否可行?
|