【问题标题】:hash table suffix tree explanation哈希表后缀树解释
【发布时间】:2014-11-19 15:52:47
【问题描述】:

我在这里问这个是因为我在其他地方找不到我正在寻找的答案,我不知道我还能在哪里问这个。我希望有人可以回答,不要说这个问题与论坛无关。我有生物学背景,目前正在使用生物信息学。我需要了解外行语言哈希表和后缀树。一些简单的事情,我不明白 O(n) 概念和所有这些东西,我认为它们都是一样的:一种存储字符串数据的方法?但我想更好地理解这些差异。这将极大地帮助像我这样的其他人。我们现在在这个领域很多!

提前致谢。

【问题讨论】:

  • 您是否有兴趣进一步了解这些数据结构的工作原理、它们的用例,或两者兼而有之?

标签: hashtable bioinformatics suffix-tree


【解决方案1】:

好的,让我们使用生物信息学来帮助说明差异。

假设您有几个相当长的 DNA 序列。如果我们想将这些序列存储在数据结构中。

如果我们想使用哈希表

Hashtable 是存储一堆对象的有用方法,但可以非常快速地搜索数据结构以查看我们是否已经包含特定对象。

我们可以使用哈希表解决的一个生物信息学用例是对大型序列集进行重复数据删除。假设我们有一个庞大的下一代测序数据数据集,我们想在组装之前对其进行重复数据删除。我们可以使用哈希表来存储唯一序列。在将任何序列插入哈希表之前,我们可以首先检查它是否已经存在于哈希表中,如果存在,我们跳过该读取。只有当它还没有在哈希表中时,我们才会添加它。然后当我们完成后,哈希中的元素将是唯一的序列。

Hashtables 基本上是一个 LinkedLists 的数组。我们将数组中的每个单元格称为“bin”。当我们在哈希表中插入或搜索某些东西时,我们首先要知道它在哪个 bin 中。我们确定使用哪个 bin 的方式是通过哈希算法。

  1. 我们必须想出一个哈希算法。将我们的序列转换为数字的东西。该等式的要求是相同的序列必须始终计算为相同的数字。如果不同的序列评估为相同的数字(这称为哈希冲突)也没关系,因为有无限数量的可能序列,而我们的哈希中可能的数字值范围有限。

一个简单的哈希算法是为每个碱基分配一个值 A =1 G =2 C = 3 T =4(假设没有歧义)然后我们可以将序列中的碱基相加。这意味着任何具有相同数量的 As、Cs Gs 和 Ts 的序列都将具有相同的哈希值。如果我们愿意,我们还可以有一个更复杂的算法,该算法也考虑位置,因此要获得相同的数字,我们还必须具有相同顺序的相同序列。

  1. 一旦我们有了哈希算法。我们可以通过按哈希值对序列进行分箱来制作哈希表。我们表中的 bin 越多,每个 bin 的哈希值就越少。哈希表通常由一组 LinkedLists 实现。这是一个非常快速的查找,因为要查看一个序列是否在我们的哈希表中或向我们的哈希表添加一个新序列,我们只需计算该序列的哈希值以查看它在哪个 bin 中,然后我们只需要查看在该箱内的值。我们可以忽略其余的垃圾箱。

后缀树

Suffix Tree 是一个不同的数据结构,它是一个图,其中每个节点(在这种情况下)是我们序列中的一个残差。图中的边将指向下一个节点等。例如,如果我们的序列是 ACGT,那么图中的路径将是 A->C->G->T->$。如果我们有另一个序列ACTT,路径将是A->C->T->T->$。

如果只有 1 个路径,我们可以组合连续的节点,所以在前面的例子中,因为两个序列都以 AC 开头,那么路径将是 AC->G->T->$ 和 AC->T->T-> $。

在生物信息学中,这对于子字符串匹配(例如查找重复区域或引物结合位点等)非常有用,因为我们可以很容易地看到图中与我们的主题匹配的子路径的位置。

希望有帮助

【讨论】:

  • 太棒了!!我没想到会得到如此快速而简洁的答案,我很高兴我揭开了这个谜团。当我阅读您的哈希表示例时,我想,这听起来像是我在 python 中编写的字典,我有时会从中提取唯一条目信息。我查了一下,宾果游戏! python dicts 是哈希表。太感谢了。我相信很多生物学家-生物信息学家会在这里登陆。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2016-10-03
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2011-11-10
  • 2010-10-23
  • 2011-05-06
相关资源
最近更新 更多