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

标签 java algorithm list bioinformatics

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

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

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

最佳答案

一个选择是:

  1. 在一个 BED 文件中创建区域的一维 R 树。为每个外显子插入一个范围。
  2. 对于另一个 BED 文件中的每个区域,在 R 树中搜索 该区域每个外显子的交叉点。

对于 Java,R 树有多种实现。我用过的支持一维范围的是 SIRtree , 在图书馆 JTS .它提供了插入范围和搜索交集的简单方法。

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

关于java - 检查重叠基因组区域的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31321993/

相关文章:

用于删除最少边缘以强制增加未加权无向图中最短路径长度的算法

c# - 对重新排列的问题进行排序的算法,知道新位置和旧位置

algorithm - 在图中找到最小瓶颈路径

java - 责任链与类列表相比有哪些优势?

java - 从 GUI 创建对象 - Java

java - 在 Java/Spring 中,如何优雅地处理缺失的翻译值?

java - 使用 java 流将数组拆分为子数组 - 有状态映射器

list - 如何从列表中获取除与某些字符串相关的数字之外的所有数值

C 为什么要循环第一项?

java - 键盘输入的最高性能