0

0

如何高效求解带状态依赖的树形结构最优路径累积收益

聖光之護

聖光之護

发布时间:2026-01-13 22:54:11

|

366人浏览过

|

来源于php中文网

原创

如何高效求解带状态依赖的树形结构最优路径累积收益

本文介绍在每层有3种选择、共100层的多层树中,快速计算从根到叶所有路径中最大累积收益的方法——利用动态规划思想的自顶向下逐层更新,时间复杂度仅为 o(n),远优于暴力枚举的 o(3¹⁰⁰)。

该问题本质是一个状态依赖型树形最优化问题:每个节点的即时收益不仅取决于自身选择(1/2/3),还依赖于其父节点的选择(即转移依赖)。因此,不能简单对每层独立取最大值,而需在路径维度上维护“以某选择结尾”的最优累积收益。

核心思路是动态规划 + 层序遍历(BFS)

  • 定义 dp[l][a] 表示到达第 l 层、且该层选择为 a ∈ {0,1,2} 时所能获得的最大累积收益;
  • 初始层(l=0):dp[0][a] = 0(根无收益,或按实际设初始值);
  • 状态转移:对第 l 层每个动作 a,枚举上一层所有可能动作 prev_a,计算 dp[l][a] = max_{prev_a} { dp[l-1][prev_a] + payoff(prev_a → a) };
  • 其中 payoff(prev_a → a) 是由前一动作 prev_a 决定当前动作 a 的收益,这正是题中“payoff depends on previous choice”的体现。

由于每层仅依赖前一层,空间可优化至 O(1) ——只需两个长度为 3 的数组交替更新:

Petalica Paint
Petalica Paint

用AI为你的画自动上色!

下载
import numpy as np

def max_cumulative_payoff(num_layers, payoff_matrix):
    """
    payoff_matrix: 3x3 array, payoff_matrix[prev_a][a] = reward for choosing `a` after `prev_a`
    Returns: maximum total payoff from root to any leaf
    """
    # dp[a] = max cumulative payoff ending with action `a` at current layer
    dp = np.array([0.0, 0.0, 0.0])

    for layer in range(1, num_layers):  # layer 0 is root (no action taken yet)
        new_dp = np.full(3, -np.inf)
        for prev_a in range(3):
            for a in range(3):
                candidate = dp[prev_a] + payoff_matrix[prev_a][a]
                if candidate > new_dp[a]:
                    new_dp[a] = candidate
        dp = new_dp

    return np.max(dp)

# Example: payoff_matrix[i][j] = reward for choosing j after i
payoff_matrix = np.array([
    [12,  6, 10],  # after action 0
    [10, 24, 14],  # after action 1
    [6,  10, 30]   # after action 2
])

print(max_cumulative_payoff(num_layers=100, payoff_matrix=payoff_matrix))  # O(100×9) = O(n)

⚠️ 注意事项:

  • 原始代码中混淆了概率传播(get_prob, np.exp)与确定性收益优化,本问题无需概率建模,应剥离 softmax 等非必要计算;
  • 若收益函数 get_payoffs(p) 是复杂可微映射(如题中矩阵乘法),可预计算所有 prev_a → a 组合的收益并填入 payoff_matrix,确保转移为常数时间;
  • 时间复杂度严格为 O(L × K²),其中 L=100 层,K=3 种选择 → 仅需 900 次比较,而非指数级搜索;
  • 若需返回具体最优路径,可同步维护 parent[a] 数组回溯,但题目明确只需最大收益值,故省略。

综上,该方法以最小计算开销精准捕获状态依赖关系,是解决此类深层决策树最优化问题的标准且最优策略。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

15

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.13

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号