我正在做一个迷你项目 - 使用链表的学生数据库,这是我第一学期的一部分。规范是,用户应该能够使用名称首字母搜索记录,这是结构中的char [4]。
现在有两种搜索首字母的方法,一种是通过线性搜索确实是低效的(我实际上并不关心这一点,因为这不是一些公司的基本内容等)或二进制搜索
二进制搜索需要排序数组,所以我在想是否使用字符串的ASCII总和进行搜索会有意义吗?
例如,记录1具有initial =“AB”并且记录2具有“CD”。两者的ASCII和为65 + 66 = 131& 67 + 68 = 135,列表使用首字母排序(使用strcmp)。
因此,当用户输入“AB”时,我只会查找数字131,如果存在,则显示记录?
这可能是一个非常糟糕的主意,请不要激怒我,并解释为什么它是一个糟糕的。
答案 0 :(得分:1)
对我来说似乎是一个良好的开端。你如何区分“TON”和“NOT”它们会加总到相同的值(“碰撞”)吗?你建议采用两层方法吗?首先使用ascii-sum搜索,然后使用某种方法来解决碰撞问题?好像这里有关于散列的一些好信息:http://burtleburtle.net/bob/hash/index.html
答案 1 :(得分:1)
如果我理解正确,那么搜索首字母将是一种非常错误的方式。我看到的第一个问题是:
AD = 65+68 = 133
BC = 66+67 = 133
原来他们确实无法区分。但比较两个字母有什么问题,甚至可能只是连接ASCII值?
AD = 65.68 = 6568
BC = 66.67 = 6667
没有睡过很多,也许我写的都是关闭的。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果你打算构建一个已排序的数组,那么计算这个(有损的,有偏见的)哈希值并在排序列表中搜索它是没有意义的 - 在它上面进行二进制搜索的速度也一样快。直接列出首字母。