2011-10-08 100 views
0

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

现在有两种方法来搜索首字母缩写,一种是线性搜索,其效率确实很低(我不关心这一点,因为这不会成为某些公司的基本内容等等),或者通过二进制搜索。

二进制搜索需要排序的数组,所以我想如果使用字符串的ASCII总和搜索会有什么意义?

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

所以当用户输入“AB”时,我只需要查找数字131,如果存在,显示记录?

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

+1

2011年,您不应该假定用户的名字可以用ASCII表示。我们有很长很长的unicode。 –

回答

1

对我来说这似乎是一个好开始。你将如何区分“TON”和“NOT”他们是否会将相同的值(“碰撞”)相加?你建议采用双层方法吗?首先用ascii-sum搜索,然后用一些方法来整理碰撞?似乎这里有一些关于散列的很好的信息:http://burtleburtle.net/bob/hash/index.html

+0

是的,我正在考虑两步搜索。散列对我们来说太过先进,实际上我们还没有教过任何与散列相关的东西 - 尽管我已经从互联网上学到了大部分编程知识,但这并不重要。 – Nilesh

1

如果我理解正确,那么这将是一个非常错误的方式来搜索首字母缩写。我看到的第一个问题是:

AD = 65+68 = 133 
BC = 66+67 = 133 

原来,他们确实无法区分。但是比较两个字母有什么不对,甚至可能只是连接ASCII值?

AD = 65.68 = 6568 
BC = 66.67 = 6667 

有没有睡过很多,也许我写的是全部关闭。

+0

正如@Mystical早些时候所说的那样,我要进行双层搜索。所以这不应该是一个问题。当我检测到两个数字相同的元素时,我会比较字符。虽然我不知道二进制搜索是否适用于它(我认为是,因为它不断增加),但连接似乎是一个更好的主意。 – Nilesh

0

如果你打算无论如何要构建一个有序数组,有一个在计算本(有损,偏置)的哈希值和搜索,在没有点排序列表 - 直接在列表中进行二进制搜索的速度会更快。