打印

存储和查找算法问题求助

[复制链接]
799|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyq165|  楼主 | 2015-1-5 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       最近在做一个类似门禁的项目,要求将10万张ID卡号(4字节)存到外部Flash内,要求添加,查找和删除的速度够快。原来的要求只是存1万张,我采用了比较笨的办法:
     
1.  一万个卡号存到10个扇区(flash扇区有4K byte)保存,每个每个扇区存1000个记录,外加该扇区所存的记录的数目,占两个字节。
2. 添加 : 从第一个扇区开始填充,每添加一次记录。将该扇区内的记录添加到末尾,然后将该扇区内的记录从小到大排序。 第一个扇区添加满了,放到第二个扇区,用同样的方法。
3. 查找: 将有记录保存的扇区数据读出,用二分法查找。 删除: 将有记录保存的扇区数据读出,用二分法查找,找到以后将该位置的记录全部置F,然后重新排序,回写到该扇区。

上述笨办法,3到4万个记录的保存和查找都很快,但是要求到10万个以上估计就比较慢了。没学过数据结构和算法之类的,感觉有些茫然。
目前的想法:  
          用哈希算法 哈希函数使用ID卡号做KEY,重叠求和取余 得到卡号需要保存到的扇区 , 卡号数据存到100个扇区。 冲突解决是 :当同义冲突保存满某一个扇区(这个扇区内的数据还是排序好),在该扇区的最后一条记录 后保存溢出的第一条记录的指针(目的是溢出区的记录 采用拉链法将所有溢出的记录连接起来,方便查找)再开辟一个3万记录的溢出区域,保存溢出的记录。

问:是否可行?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

358

帖子

7

粉丝