检查重叠基因组区域的算法

时间:2015-07-09 15:31:55

标签: java algorithm list bioinformatics

我有两个床文件形式的两大基因组区域列表,有很多工具可以帮助我检查两个列表的重叠。

任何给定的区域(列表A中的一个,列表B中的另一个),只要它们在任何坐标中重叠,它们就称为重叠。有可用的工具来做到这一点。但我希望编写一个有效的算法,我可以在列表A中维护类似哈希表的结构,然后迭代列表B中的所有区域,并且对于列表中的每个区域,BI可以使用快速算法来判断是否有些列表A中的区域与列表B中的特定区域重叠。

我特别需要一个有效的解决方案,因为两个列表都非常大。非常感谢。

1 个答案:

答案 0 :(得分:1)

一种选择是:

  1. 在一个BED文件中创建区域的一维R树。为每个外显子插入一个范围。
  2. 对于另一个BED文件中的每个区域,搜索R树 该地区每个外显子的交叉点。
  3. 对于Java,有多种R树实现。我在库SIRtree中使用的支持1维范围的JTS。它提供了插入范围和搜索交叉点的简单方法。

    内存中表示的任何数据结构都将成为足够大的BED文件的可扩展性问题。您可以通过增加VM可用的内存量(硬件和-Xmx设置)或通过在磁盘上表示数据结构来解决此问题。