Skip to content

Reads 重排

重排是“全局相似性”与“块内压缩”之间的桥梁。 fq-compressor 不一定按原始 FASTQ 顺序存储 reads,而是先把相似的短读长数据放到相邻位置,再记录一个可逆映射。

在 fq-compressor 中的角色

全局分析器会为每条 read 提取 minimizer,按 minimizer 哈希对桶项排序,并据此决定 archive 顺序。 最终得到的是 original read ID 到 archive ID 的正向映射,以及用于恢复输出顺序的反向映射。 后续压缩阶段使用 archive 顺序,而恢复原始顺序或对外报告时则依赖这组映射。

核心机制

  1. 建桶: 每条 read 提供若干 canonical minimizer,作为粗粒度的相似性键。
  2. 邻居搜索: 从当前 archive 尾部出发,分析器在共享 minimizer 的桶中寻找尚未使用的近邻,并用贪心的近似 Hamiltonian path 策略挑选下一个 read。
  3. 形成 block: 完成重排后,连续的 archive 区间就成为压缩 block。
  4. 映射存储: 正向与反向 map 会用 delta 编码加 varint 序列化,因此可逆性的成本远低于原始整数数组。

对压缩与访问的影响

重排会在构建共识之前先提高局部匹配密度。 这样更容易形成 contig,错配载荷更小,块内编码器看到的也更像一段连续区域,而不是许多互不相关的 reads。 显式 reorder map 保证了完全可逆,因此压缩收益并不需要牺牲原始输出顺序。

当前边界

重排目前是一个短读长优化步骤。 实现上选择了受内存约束的实用型贪心搜索,而不是代价更高的精确路径求解,这与项目“块导向、可随机访问”的设计目标保持一致。