键级保守的诱导式最大公共子图搜索(贪心下界 + 带预算回溯)
McsSearch
01 Syntax
SMRUCC.genomics.Model.Metabolic.RouterAdapter.McsSearch
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| Greedy | 1 | 贪心:优先取"不引入键变化"的配对,其次取变化最少的,得到下界 |
| ChangeCount | 1 | 计算把 (ai,bj) 加入映射会引入多少处"键不一致"(键级改变 / 断键 / 成键); 返回 -1 表示超过容忍上限,该配对不可用。 与严格的诱导式 MCS(要求键完全一致)不同,这里允许少量键发生变化:反应中心 本来就靠键级/断键/成键来定义,若强制完全一致,反应中心处的原子会被挤出映射, 规则就会退化成"删掉一个原子 / 凭空造一个原子",… |
| Invariants | 1 | Morgan 型迭代不变量(两侧同一套编码,可跨分子比较) |
| BuildOrder | 1 | 原子遍历序:以度降序为根做 BFS,保证除根之外的原子都有前驱相邻 |
| BuildCandidates | 1 | 候选对:同元素同电荷,按不变量匹配度排序(越像越先试) |
03 Members
Greedy
贪心:优先取"不引入键变化"的配对,其次取变化最少的,得到下界
ChangeCount(
Int32, Int32, List(Of ValueTuple(Of Int32, Int32)))计算把 (ai,bj) 加入映射会引入多少处"键不一致"(键级改变 / 断键 / 成键); 返回 -1 表示超过容忍上限,该配对不可用。
与严格的诱导式 MCS(要求键完全一致)不同,这里允许少量键发生变化:反应中心 本来就靠键级/断键/成键来定义,若强制完全一致,反应中心处的原子会被挤出映射, 规则就会退化成"删掉一个原子 / 凭空造一个原子",逆推时产生游离碎片(实测会把 分支酸逆推成一堆碎片,路径永远无法收敛到汇集合)。
Invariants(
Molecule, Int32[0:,0:])Morgan 型迭代不变量(两侧同一套编码,可跨分子比较)
BuildOrder
原子遍历序:以度降序为根做 BFS,保证除根之外的原子都有前驱相邻
BuildCandidates
候选对:同元素同电荷,按不变量匹配度排序(越像越先试)