我在这里问这个问题是因为我无法找到我在其他地方寻找的答案,而且我也不知道我能在哪里问这个问题。我希望有人可以回答,而不是说这个问题与论坛无关。我有生物学背景,目前我正在使用生物信息学。我需要在lay语言哈希表和后缀树中理解。有点简单,我没有得到O(n)概念和所有这些东西,我认为它们都是一样的:存储字符串数据的方法?但我想更好地理解这些差异。这将对像我这样的其他人有很大帮助。我们现在在这个领域很多!
提前致谢。
答案 0 :(得分:3)
好的,让我们使用生物信息学帮助说明差异。
假设您有几个很长的DNA序列。如果我们想将这些序列存储在数据结构中。
如果我们想使用哈希表
Hashtable是存储一堆对象的有用方法,但可以非常快速地搜索数据结构以查看我们是否已经包含特定对象。
我们可以使用哈希表解决的一个生物信息学用例是对大型序列集进行重复数据删除。假设我们有一个庞大的下一代测序数据数据集,我们想在组装之前去重复它。我们可以使用哈希表来存储唯一序列。在将任何序列插入哈希表之前,我们可以首先检查它是否已经存在于哈希表中,如果是,我们就跳过该读取。只有当它还没有在哈希表中时才添加它。然后,当我们完成时,哈希中的元素将是唯一的序列。
Hashtables基本上是一个LinkedLists数组。我们将数组中的每个单元称为“bin”。当我们在哈希表中插入或搜索某些内容时,我们必须首先知道它所在的bin。我们通过哈希算法确定使用哪个bin的方式。
一个简单的哈希算法是为每个基数分配一个值A = 1 G = 2 C = 3 T = 4(假设没有歧义)然后我们可以总结我们序列中的基数。这将意味着具有相同数量的As,Cs Gs和Ts的任何序列将具有相同的散列值。如果我们想要的话,我们也可能有一个更复杂的算法也考虑到位置,所以为了获得相同的数字,我们必须以相同的顺序具有相同的序列。
后缀树
Suffix Tree是一个不同的数据结构,它是一个图形,其中每个节点(在这种情况下)是我们序列中的残差。图中的边缘将指向下一个节点等。因此,例如,如果我们的序列是ACGT,则图中的路径将是A-> C-> G-> T-> $。如果我们有另一个序列ACTT,则路径将是A-> C-> T-> T-> $。
如果在前面的例子中只有1个路径,我们可以组合连续节点,因为两个序列都以AC开始,那么路径将是AC-> G-> T-> $和AC-> T- > T-> $
在生物信息学中,这对于子串匹配非常有用(比如找到重复区域或引物结合位点等),因为我们可以很容易地看到图中的子路径与我们的主题相匹配。
希望有所帮助