从圈基算法路线进入。终结任务不是报一个“15”,而是交出四条实际圈、二元独立证据、两份算法轨迹,以及哪些检查可以证明基、哪些步骤负责最优性。
输入与第一份合法但较贵的答案
顶点0、1、2、3围成四边形,4在中心。外框边10=01、20=12、30=23、40=30,权均为1;辐条50=04、60=14、70=24、80=34,权依次2、1、1、2。等号右边是端点简写,边40的“30”表示顶点3和0,并非另一条边ID。
只读这份表,先算
| 弦ID | 基本圈边ID | 权 |
|---|---|---|
| 40 | 10,20,30,40 | 4 |
| 60 | 10,50,60 | 4 |
| 70 | 10,20,50,70 | 5 |
| 80 | 10,20,30,50,80 | 7 |
四个圈各自在弦坐标上有独占的1,所以确实是基;总权20。不能把“基本圈基”自动理解成“最小圈基”。
第一条路线:候选8条,消元接受4条
运行Horton算法时,边的第二权分量依次为1、2、4、8、16、32、64、128。这些数只用于平局;报出的目标仍是原权。
每个根建立完整最短路树,将两条根路径异或再加非树边,候选去重后如下。最后一列给出执行器保存的第一份“根、补边”生成见证;一个圈可能有多份生成方式。
| 原边ID | 原权 | 根、补边ID |
|---|---|---|
| 20,60,70 | 3 | 1、70 |
| 10,20,30,40 | 4 | 0、30 |
| 10,50,60 | 4 | 0、60 |
| 30,70,80 | 4 | 2、80 |
| 10,20,50,70 | 5 | 0、70 |
| 30,40,50,70 | 5 | 3、50 |
| 40,50,80 | 5 | 0、80 |
| 20,30,60,80 | 5 | 1、80 |
前四条被接受,后四条被拒绝。以内部第j边对应整数第j位,前四个原向量为98、15、49、196,主元位为6、3、5、7。第五条83满足
输出按原顶点写成
第二条路线:四次奇偶约束
de Pina算法初始化支撑{40}、{60}、{70}、{80}。四轮实际记录为:
| 轮次 | 使用时支撑 | 选中圈掩码 | 原权 | 后续变动 |
|---|---|---|---|---|
| 1 | 15 | 4 | 无 | |
| 2 | 98 | 3 | 第三支撑变为 | |
| 3 | 49 | 4 | 无 | |
| 4 | 196 | 4 | 无 |
请用模2内积逐项验证支撑更新,特别是圈98与{60,70}经过两条标记边,因此为偶。四圈还是同一组,顺序变为4、3、4、4;程序没有执行Horton候选排序。
每轮奇圈搜索对全部五个原顶点求双层最短路。仅列第一分量,五个目标距离分别为
第三轮全为4仍要保留确定的平局规则,不能由距离列表猜输出边。完整JSON同时保存获选根、状态路径及原边序列。第二轮选根1,状态编号约定为
三项迁移必须实际完成
零权与分离分量
改成五顶点图:7=01、19=12、31=20三边权全为0,90=34权2。
再试空图
从奇闭走提取圈
令7=01、19=12、31=20权均1,桥90=23权2。标记S={7},给出闭走3、2、0、1、2、3与边序列90、31、7、19、90,总权7。栈提取应返回{7,19,31},权3;并说明桥往返标记贡献为0,投影不是简单圈。
若把S改为{90},公共oracle应返回NONE。解释这不与主算法每轮成功冲突:主算法的支撑来自非树边空间,并持续保持非零限制;任取一座桥当支撑没有那项保证。
输入身份与证明边界
将边表重新排列但保留ID,结果不变;把ID换成另一组互异整数,最优原权不变,但平局时具体基可以改变。位掩码只对当前排序边表有效,不能跨边表直接重用。
执行器还实际拒绝14类输入,包括自环、平行端点、负权、浮点、重复ID、越界顶点、布尔冒充整数、越界支撑,以及偶闭走冒充奇闭走。任何拒绝都不能被改成空基,因为空基只对已通过输入检查且r=0的图正确。
可重跑交付与检查顺序
python algorithms-minimum-cycle-basis-check.py
python -O algorithms-minimum-cycle-basis-check.py
两次输出应相同;所有检查用显式异常,不依赖assert。Graph.make验证并正规化输入;horton和de_pina处理已正规化的图;odd_cycle提供含NONE出口的支撑查询;extract_odd_cycle另验证闭走与边身份。其他消元、森林及显示函数是这些入口的内部工具。
建议按以下顺序核验自己的记录:先验证图与边ID,再验证每个输出是简单圈,随后核r与二元秩,再对照候选完备性或支撑/最短路证明。只检查四条圈独立能接受前面的权20基,故还没有证明最优。反过来,报总权15却不给出边身份,无法确认该值由真实圈实现。
主脚本另外枚举本图13条简单圈核算最优值,是小例的交叉检查;正文的完备性和交换证明才覆盖任意合法输入。两页成本分析对大数操作、权值位长、日志与输出分别计费,这个几十行的运行记录不能代表大图性能评测。