跳转到内容

序列、字符串与坐标系统

快速概览

生物序列(DNA, RNA, 蛋白质)在计算层面上被抽象为有限字母表上的字符串。理解这一抽象以及随之而来的坐标系统约定,是所有后续算法(如比对、组装)的物理基础。

  • 掌握 DNA 的四字符字母表 {A, C, G, T} 及其双链互补特性
  • 理解"反向互补" (Reverse Complement) 在测序数据处理中的核心地位
  • 区分 0-based 与 1-based、半开区间与闭区间等坐标约定
  • 理解字符串抽象与坐标约定如何为后续比对、组装等核心方法提供物理基础

在计算机眼里,复杂的生物大分子被简化为线性排列的字符。这一抽象是生物信息学所有后续计算的基础——比对、组装、变异检测、Motif 搜索,归根结底都是字符串操作。

DNA 字符串
字母表 $Sigma = {A, C, G, T}$。长度可从几百 bp(Reads)到几百 Mb(染色体)。人类基因组约 $3 imes 10^9$ bp。
RNA 字符串
字母表 $Sigma = {A, C, G, U}$。RNA 中的 U(尿嘧啶)取代了 DNA 中的 T(胸腺嘧啶)。通常代表转录后的信息片段,如 mRNA、tRNA、rRNA。
蛋白质字符串
字母表 $Sigma$ 包含 20 种标准氨基酸(单字母编码:A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y)。蛋白质的性质很大程度上取决于氨基酸序列。

生物序列并非均匀的同质字符串,而是具有内部层次结构的:

基因组(Genome, ~3 Gb)
└── 染色体(Chromosome, ~50-250 Mb)
└── 基因(Gene, ~1-100 kb)
└── 外显子(Exon, ~50 bp - 几 kb)
└── 密码子(Codon, 3 bp)
└── 碱基(Nucleotide, 1 bp)

理解这种层次结构对于设计高效的索引和搜索算法至关重要。例如,在进行全基因组比对时,通常先在染色体级别定位,再在基因级别精细比对,而非直接在碱基级别进行暴力搜索。

DNA 和 RNA 链具有极性(Polarity)。核苷酸通过磷酸二酯键连接,化学方向决定了信息流的走向:

  • 5' 端:磷酸基团端,通常写在序列的左侧。
  • 3' 端:羟基端,通常写在序列的右侧。

在生物信息学中,除非特别说明,字符串默认按 5' 端到 3' 端的顺序存储。这一约定是所有比对算法和搜索算法的隐含前提。

DNA 聚合酶只能沿 5' 到 3' 方向合成新链,这一生物学事实深刻影响了测序技术的设计和数据处理的方式。

由于 DNA 是双链且反向平行的,理解反向互补操作是处理测序数据的基本功。

对于序列 S=5’-ATGC-3’S = \text{5'-ATGC-3'}

  1. 互补(Complement):按 A-T, G-C 配对规则得到 3'-TACG-5'
  2. 反向(Reverse):将字符串前后颠倒,得到 5'-GCAT-3'

用数学符号表示:给定序列 S=s1s2snS = s_1 s_2 \cdots s_n,其反向互补序列 SrcS^{rc} 为:

Src=snsn1s1S^{rc} = \overline{s_n} \cdot \overline{s_{n-1}} \cdots \overline{s_1}

其中 si\overline{s_i} 表示 sis_i 的互补碱基(A=T\overline{A}=T, T=A\overline{T}=A, G=C\overline{G}=C, C=G\overline{C}=G)。

在搜索 Motif 或比对 Reads 时,必须同时考虑原始序列及其反向互补链,因为测序仪可能从任何一条链上读取信息。这意味着:

  • 双链搜索:在参考基因组上搜索时,通常需要同时搜索正链和反链(反向互补),然后将结果合并。
  • Read 比对:比对器(如 BWA、Bowtie2)会自动尝试将 Read 同时比对到正链和反链,取得分更高的结果。
  • k-mer 索引:构建 de Bruijn 图或 k-mer 索引时,通常约定使用字典序较小的 k-mer 作为规范形式(Canonical k-mer),以避免正反链的重复计数。

在实际的测序数据中,并非所有位置都能被明确识别为 A、C、G 或 T。IUPAC(国际纯粹与应用化学联合会)定义了一套扩展编码来表示不确定的碱基:

| 符号 | 含义 | 说明 | | :--- | :--- | :--- | | A | A | 腺嘌呤 | | C | C | 胞嘧啶 | | G | G | 鸟嘌呤 | | T | T | 胸腺嘧啶 | | N | A/C/G/T | 任意碱基(Unknown) | | R | A/G | 嘌呤(Purine) | | Y | C/T | 嘧啶(Pyrimidine) | | S | G/C | 强氢键(3 个氢键) | | W | A/T | 弱氢键(2 个氢键) | | K | G/T | 酮基(Keto) | | M | A/C | 氨基(Amino) | | B | C/G/T | 非 A | | D | A/G/T | 非 C | | H | A/C/T | 非 G | | V | A/C/G | 非 T |

在参考基因组中,N 通常表示未测序或无法确定的区域(如着丝粒、端粒等高度重复区域)。

3. 坐标系统:生物信息学的"巨坑"

Section titled “3. 坐标系统:生物信息学的"巨坑"”

不同工具和文件格式对位置的计数规则不同,这常导致 Off-by-one(差一) 错误。坐标系统的混淆是生物信息学初学者最常遇到的陷阱之一。

维度 0-based (零基) 1-based (一基)
**起始编号** 从 0 开始计算 从 1 开始计算
**区间表示** 通常为半开区间 $[start, end)$ 通常为闭区间 $[start, end]$
示例格式 BED, BAM (内部), Python 索引 VCF, GFF, SAM (文本列), R (Bioconductor)
**长度计算** $end - start$ $end - start + 1$

除了起始编号的差异,区间端点的包含性也不同:

  • 半开区间 [start,end)[start, end):包含 startstart,不包含 endend。Python 风格,BED 格式使用。
  • 闭区间 [start,end][start, end]:同时包含 startstartendend。VCF、GFF 格式使用。

对于序列 ACTG

  • 0-based 半开区间 系统中:
    • 第一个碱基 A 的位置是 0
    • 区间 [0, 2) 代表 AC(位置 0 和 1)
    • 区间长度为 20=22 - 0 = 2
  • 1-based 闭区间 系统中:
    • 第一个碱基 A 的位置是 1
    • 区间 [1, 2] 代表 AC(位置 1 和 2)
    • 区间长度为 21+1=22 - 1 + 1 = 2

注意:同一个生物学区间在这两种系统中的数值表示不同。BED 格式中的 [0, 100) 和 GFF 格式中的 [1, 100] 实际上代表的是同一个区域。

| 文件格式 | 坐标系统 | 区间类型 | 说明 | | :--- | :--- | :--- | :--- | | BED | 0-based | 半开 [start,end)[start, end) | UCSC 系列工具使用 | | GFF/GTF | 1-based | 闭 [start,end][start, end] | 基因注释标准格式 | | VCF | 1-based | 单点 | 变异位点坐标 | | SAM | 1-based | 闭(文本列) | POS 列从 1 开始 | | BAM | 0-based | 半开(内部) | BAM 二进制内部使用 0-based | | GenBank | 1-based | 闭 [start,end][start, end] | NCBI 序列格式 |

在编写脚本处理不同格式的数据时,坐标转换是几乎不可避免的。以下是常见的转换规则:

  • BED 到 GFFstartGFF=startBED+1start_{GFF} = start_{BED} + 1endGFF=endBEDend_{GFF} = end_{BED}
  • GFF 到 BEDstartBED=startGFF1start_{BED} = start_{GFF} - 1endBED=endGFFend_{BED} = end_{GFF}
  • SAM POS 到 BAM 0-basedpos0based=posSAM1pos_{0based} = pos_{SAM} - 1

许多数据处理事故(如提取了错误的基因组区域、统计了错误长度的区间)都可以追溯到坐标系统的混淆。建议在项目中统一使用一种坐标约定,并在格式转换时显式处理差异。

本页建立的字符串抽象和坐标系统约定,是后续核心方法的物理基础。编辑距离(Edit Distance)与序列比对的完整算法将在编辑距离与比对中展开;k-mer 分析、子串索引与基因组组装所需的数据结构则在 k-mer 与子串分析中详细讨论。建议在进入这些页面之前,确保对本页的反向互补操作和坐标转换规则已经熟悉。