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

Python列表重复模式识别:网络确定性游走的瞬态与周期检测

确定性游走周期检测实现(Python)

函数参数与返回值说明

  • 入参:A 为所有已访问节点的全量列表
  • 返回值为三元组:(是否停止: bool, 瞬态段: list|None, 周期子列表: list|None)

核心思路

每次调用时仅检查列表末尾的连续重复段即可(因为轨迹是按步追加的,符合要求的周期必然出现在列表尾部),逻辑如下:

  • 先排除长度不足的情况:列表长度小于3时不可能存在连续重复3次的周期,直接返回未检测到
  • 遍历所有可能的周期长度L,取值范围为1 到 len(A)//3(连续重复3次至少需要3*L个元素)
  • 对每个候选周期长度,校验列表末尾的3*L个元素是否恰好由同一个长度为L的子列表重复3次构成
  • 校验通过后,找到该周期首次出现的起始位置,起始位置之前的子列表即为瞬态段

实现代码

def check_cycle_stop(A):
    n = len(A)
    # 列表长度不足直接返回未检测到
    if n < 3:
        return False, None, None
    # 遍历所有可能的周期长度
    max_possible_L = n // 3
    for L in range(1, max_possible_L + 1):
        # 取末尾三段长度为L的子列表做校验
        seg1 = A[-3*L : -2*L]
        seg2 = A[-2*L : -L]
        seg3 = A[-L :]
        if seg1 == seg2 == seg3:
            C = seg3
            # 定位周期首次出现的起始索引
            start_idx = 0
            for i in range(n - 3*L + 1):
                if A[i:i+L] == C:
                    start_idx = i
                    break
            # 提取瞬态段
            t = A[:start_idx]
            return True, t, C
    # 未找到符合要求的周期
    return False, None, None

调用与测试示例

示例场景测试

A = [0, 1, 4, 6, 1, 2, 1, 2, 1, 2]
is_stop, t, C = check_cycle_stop(A)
print(is_stop) # 输出 True
print(t) # 输出 [0, 1, 4, 6]
print(C) # 输出 [1, 2]

游走主逻辑调用方式

A = []
while True:
    new_node = trajectory() # 你的游走步执行函数
    A.append(new_node)
    is_stop, t, C = check_cycle_stop(A)
    if is_stop:
        print(f"停止游走,瞬态段:{t},周期:{C}")
        break

内容的提问来源于stack exchange,提问作者Joao Vitor Bevilacqua de Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:18:01