使用ASCII字符和进行二进制搜索字符串?

时间:2011-10-08 03:16:22

标签: c algorithm search linked-list ascii

我正在做一个迷你项目 - 使用链表的学生数据库,这是我第一学期的一部分。规范是,用户应该能够使用名称首字母搜索记录,这是结构中的char [4]。

现在有两种搜索首字母的方法,一种是通过线性搜索确实是低效的(我实际上并不关心这一点,因为这不是一些公司的基本内容等)或二进制搜索

二进制搜索需要排序数组,所以我在想是否使用字符串的ASCII总和进行搜索会有意义吗?

例如,记录1具有initial =“AB”并且记录2具有“CD”。两者的ASCII和为65 + 66 = 131& 67 + 68 = 135,列表使用首字母排序(使用strcmp)。

因此,当用户输入“AB”时,我只会查找数字131,如果存在,则显示记录?

这可能是一个非常糟糕的主意,请不要激怒我,并解释为什么它是一个糟糕的。

4 个答案:

答案 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)

会有很多碰撞。选择Extendible Hashing:

Wikipedia

Algorithm explained

答案 3 :(得分:0)

如果你打算构建一个已排序的数组,那么计算这个(有损的,有偏见的)哈希值并在排序列表中搜索它是没有意义的 - 在它上面进行二进制搜索的速度也一样快。直接列出首字母。