You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单词链可行性判断方案咨询:寻求替代哈密顿路径的高效解法

单词接龙全排列可行性的高效判定方案

不用纠结哈密顿路径的高复杂度问题,这个问题可以转化为有向图的欧拉路径判定问题,复杂度直接降到线性级别,完美适配大规模输入。

核心思路:模型转化

把问题从「找经过所有单词(节点)的哈密顿路径」,转成「找经过所有单词(边)的欧拉路径」:

  • 将每个英文字母(a-z)视为图的节点
  • 将每个单词视为一条有向边:从单词的首字母指向尾字母
  • 原问题等价于:这个有向图中是否存在一条能遍历所有边恰好一次的路径(欧拉路径)

有向图欧拉路径的判定规则

只要满足以下两个条件,就存在欧拉路径:

  1. 弱连通性:忽略边的方向后,所有有边关联的字母节点必须属于同一个连通分量(没有任何边连接的孤立字母可以忽略)
  2. 入度出度平衡:满足以下两种情况之一:
    • 所有节点的入度等于出度;
    • 恰好有一个节点的出度比入度大1(作为路径起点),恰好有一个节点的入度比出度大1(作为路径终点),其余所有节点的入度等于出度

具体实现步骤

  1. 统计入度出度:遍历所有单词,对每个单词的首字母start,出度+1;对尾字母end,入度+1
  2. 校验入度出度条件:
    • 统计「出度-入度=1」的节点数,记为start_cnt
    • 统计「入度-出度=1」的节点数,记为end_cnt
    • 其余节点必须满足入度=出度,且start_cnt和end_cnt只能同时为0,或者同时为1
  3. 校验弱连通性:
    • 使用并查集(Union-Find)结构,遍历每个单词,将首字母和尾字母所在的集合合并
    • 收集所有有入度或出度的字母节点,检查它们是否都属于同一个连通分量
  4. 以上条件全部满足则返回True,否则返回False

示例验证

拿你给出的例子:car、gear、rig、rez

  • 对应的有向边:c→r、g→r、r→g、r→z
  • 入度统计:c:0, r:2, g:1, z:1
  • 出度统计:c:1, r:2, g:1, z:0
  • 入度出度校验:start_cnt=1(c节点),end_cnt=1(z节点),其余节点入度出度相等,符合条件
  • 连通性校验:c、r、g、z通过边全部连通,符合条件 → 返回True

复杂度说明

整个流程的时间复杂度是O(n)(n为单词数量):统计入度出度是O(n),并查集的合并和查询操作是近似常数时间(α(n),阿克曼函数的反函数,增长极慢),完全能处理大规模输入。

内容的提问来源于stack exchange,提问作者JanSmutný

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:52:37