__chaz

Wake up, Neo... The Matrix has you...

导航

股票交易 DP 核心思想分析

Posted on 2026-07-12 23:50  __chaz  阅读(10)  评论(0)    收藏  举报

示例代码

以 LeetCode 714. 买卖股票的最佳时机含手续费为例:

class Solution {
public:
    int maxProfit(vector<int>& prices, int fee) {
        // x(或y)表示第i天结束后不持有股票(或持有股票)(等价加速1:第0天空转)
        int x = 0;
        int y = -prices[0];
        for (int v: prices) {
            x = std::max(x, y + v - fee);
            y = std::max(y, x - v);  // (等价2:使用了x_new)
        }
        return x;
    }
};

一、DP 问题的 3 个条件

1. 最优子结构

反例:假设你要从 A 走到 B,要求整条路径的权重之和对 10 取模的结果最小。

  • 原因:局部的次优,拼出了全局的最优。用 DP 会得到错误的“局部次优解”。

2. 重叠子问题

反例:假设你要对一个长度为 \(N\) 的数组进行归并排序。

  • 原因:数组切开后,左半边数组和右半边数组是完全独立、毫无交集的。这不是动态规划,这叫分治法。

3. 无后效性

反例:假设你要遍历图上所有的 10 个城市,求最短总距离。不能走回头路的寻路。

  • 原因:因为游戏规则是“不能走回头路”。你到达 C 的历史轨迹(你之前走过了哪些城市),严密封死了你未来的选择。

二、人生的非 DP 性

1. 人生是极度有后效性(看脸)的。

人生的许多节点(如童年创伤、生育、不可逆的身体损伤、或者某种深刻的顿悟)就像旅行商问题中被标记为“已访问”的城市。一旦经历,你的整个底层状态矩阵就改变了。你永远无法说“我现在 30 岁,有 100 万,所以我的状态就是 dp[30][100万]”。你必须带上“这 100 万是怎么赚来的”、“你在这个过程中牺牲了哪些神经递质的敏感度”等无数个历史参数。历史死死地咬住未来,导致人生根本无法写出简洁的状态转移方程。人生极度有后效性。一个致命的错误选择(巨大的负债、健康的严重透支),会像沉重的铅块一样锁死你未来的所有状态转移方程。

2. 人生没有最优子结构,完美契合模 10 寻路这种荒谬的非线性。

如果人生有最优子结构,那么最优的策略就是“每天都过得最爽、最舒服”。但现实中,一段充满错误、抑郁、弯路的局部极差解(比如创业破产、重病一场),往往是彻底重构个人认知系统、在十年后达到极高思想境界的前置条件。在人生中,负面经验并不是简单的减法,它经常参与乘法甚至指数运算。局部吃亏往往能拼出全局的大格局。既然局部的次优甚至极差,能够组合出全局的旷世绝杀,那么我们试图在每一个十字路口精打细算求 max() 的努力,就变得毫无意义。

3. 人生是无法再踏入的赫拉克利特的河流,没作业可抄。

时间的单向性(热力学第二定律)决定了:你永远无法像玩游戏存档一样,回到昨天去测试另一条分支。你遭遇的每一次困境,即便看起来再像,其底层的生化环境和社会环境也已经变了。没有真正的重叠子问题,也就没有真正的“查表”捷径可走。

  • 生物学妥协:大脑强行“伪造”重叠子问题
    既然物理上不重叠,为什么我们在生活中总觉得“历史在重演”,或者“这题我会”?—— 因为人类大脑的算力(ATP 能量)太弱了。如果我们每遇到一个看似熟悉的新场景,都要调动前额叶去把所有几万个变量重新计算一遍,大脑会直接宕机。为了生存,大脑演化出了一种极其暴力的降维外挂:启发式认知(Heuristics)与经验主义。大脑会自动砍掉那些它认为“不重要”的维度,把一个 1000 维的复杂现实,降维成 2 维。这就是直觉、偏见、甚至 PTSD(创伤后应激障碍)的底层逻辑。大脑用粗暴的降维,强行造出了重叠子问题,以此来实现“空间换时间”。

三、人生的非 DP 解法

很多现代人的焦虑,本质上就是潜意识里把人生当成了一道 DP 题:

  • 试图在每一次升学、跳槽、恋爱中都做出“局部最优解”。
  • 拼命想要甩掉过去的包袱,以为可以“无后效性”地重新开始。
  • 试图去抄别人的“人生备忘录”(重叠子问题),以为同样的解法能得出同样的幸福。

放弃用 DP 求解人生吧。看透了“人生是反例的集合体”这一点,其实是一种巨大的认知解脱。人生不是 DP 问题,我们就不该用 DP 的思维去活。面对一个极具后效性、没有单一标尺、充满非线性的混沌系统,探索(Exploration)、容错(Robustness)与杠铃策略(防范毁灭性风险的同时保留获取极大收益的可能),远比计算每一次选择的“最高期望值”要高级得多。

1. 探索(Exploration)- 人生无重叠子问题

既然旧的备忘录注定会失效(甚至是有害的),我们就不能把资源全押在“复用旧经验”上。探索(Exploration)就是主动拥抱未知,去测试那些没有被写进备忘录的新分支。在强化学习中,这就是著名的 \(\epsilon\)-greedy 策略——永远保留一部分算力去随机做看似次优的动作,以更新整个系统的认知地图,防止陷入局部的经验死水。

2. 容错(Robustness)- 人生有强烈的后效性

因为我们知道“历史无法被简单截断”,所以我们在做决策时,首要目标不是追求收益最大化,而是确保系统拥有足够的冗余和减震器(容错性)。容错机制(如现金流储备、多元化的技能树、健康的身体)就是用来对抗那些不可逆的“恶性后效性”的。哪怕走错了一步,容错系统能保证这个错误不会摧毁你的整个图灵机。

3. 杠铃策略(Barbell Strategy)- 人生无最优子结构

因为现实世界没有最优子结构,所以我们才必须被迫采用杠铃这种极其“分裂”的组合,而不是采用“中庸”的线性组合。

在传统的金融学或人生规划中,人们通常被建议追求“中庸”——寻找中等风险、中等回报的平衡点。但塔勒布认为,中等风险是一个致命的陷阱。那些看似平稳的“中等风险”资产(如某些企业债券或传统的稳健型基金),往往上行收益有限,但在极端危机(负面黑天鹅)爆发时,依然面临本金全军覆没的“隐藏尾部风险”。

杠铃策略通过以下两个步骤打破这种脆弱性:

  • 绝对的下行保护(杠铃的一端): 将绝大部分(例如 85%–90%)的资源投入到极其安全、几乎没有风险的领域。这确保了无论发生什么灾难,你都不会“爆仓”出局。生存是第一要务。
  • 无限的上行敞口(杠铃的另一端): 将剩下的一小部分(例如 10%–15%)投入到极度冒险、极具投机性、可能会血本无归但一旦成功就能带来十倍甚至百倍回报的领域。

- 杠铃策略 vs 中庸

西方现代风险理论的巅峰(塔勒布的杠铃策略)和东方古典哲学的巅峰(孔子的中庸之道)冲突吗?

表面上看,它们水火不容、针锋相对;但如果剖开世俗的误解,潜入底层的系统动力学,你会发现它们不仅不抵触,反而是在用不同的几何模型,去解同一道关于“生存与长久”的方程式

我们可以分两个层次来拆解这场跨越千年的思想碰撞:

第一层:表象的死敌 —— “世俗的中庸”与杠铃的冲突

如果按照现代人对“中庸”最常见的粗浅理解——折中、妥协、和稀泥、取平均数,那么杠铃策略和它确实是死敌。

  • 世俗的中庸(线性叠加法): 它的几何模型是一个“高斯分布(正态分布)”的中间鼓包。它追求的是:不冒尖也不垫底,拿一半的钱放银行,一半的钱炒股;选一个不累但也发不了财的温水煮青蛙的职业。它迷信只要待在“中间”,就能屏蔽风险。
  • 杠铃策略的反击: 塔勒布在《反脆弱》中把这种状态称为“愚蠢的中间地带”。在这个混沌世界里,中间地带不仅没有两头的收益,反而隐蔽地承担了两头的风险。一次行业的黑天鹅(比如 AI 替代基础岗位、宏观经济衰退),最先绞杀的就是中间那批看似安稳、实则毫无护城河的人。

所以,如果中庸等于“平庸的中间态”,塔勒布的杠铃策略就是用来把这种思想砸得粉碎的武器。

第二层:底层的握手 —— “真正的中庸”与杠铃的同构

但是,如果我们回到先秦儒家的语境,去看看《中庸》原本到底在说什么,情况就完全变了。

《中庸》开篇明义:“喜怒哀乐之未发,谓之中;发而皆中节,谓之和。”

程颐解释道:“不偏之谓中,不易之谓庸。”

真正的中庸,从来不是数学意义上的 \(50\% + 50\% = \text{平均数}\),而是在动态的复杂系统中,找到那个最恰如其分、坚不可摧的“平衡点(Equilibrium)”

当我们用这个高维度的视角去重新审视,杠铃策略不仅不抵触中庸,它简直就是“中庸之道”在非线性复杂世界里的最佳物理实现架构。

1. 结构极度分裂,但系统极度平衡

中庸追求的是“系统的不偏不倚(稳固)”。

在没有黑天鹅的简单世界里,你可以靠“站在中间”来保持稳固。但在充满风暴的现代社会,站在中间只会随波逐流。

杠铃策略的精妙之处在于:它用“局部的极端割裂”,构建出了“全局的绝对中庸”。

左边 90% 的极度保守(容错),和右边 10% 的极度冒险(探索),这两股极端的力量在系统内部形成了强大的张力,最终合成了一个既不会被摧毁、又能无限进化的动态平衡体。这个系统整体,恰恰处在最完美的“中”道上。

2. “庸”的本质是“反脆弱的生存”

“庸”字在古汉语中的核心含义是“常(Constant/Enduring)”,即经得起时间的考验,能够长久生存。 这和塔勒布的终极哲学完全一致。塔勒布认为,任何策略的第一要务是“避免遍历性毁灭(Absorbing Barrier)”——只要你不死在路上,时间就是你的朋友。

  • 儒家的“中庸”是为了让个人修养和家国天下跳出“极盛极衰”的周期律,实现长治久安(庸)。
  • 塔勒布的“杠铃”左端的 90%,也是为了彻底切断毁灭性尾部风险,确保你永远留在牌桌上。

3. “时中”与主动拥抱不确定性

孟子评价孔子是“圣之时者也”,真正的中庸高手是“时中”——根据外部环境的剧烈变化,随时调整自己的身段,永远击中时代的靶心。

这恰恰对应了杠铃策略右端的 10%(探索与拥抱波动性)。因为你不预测未来,你只在极端边界上放置探测器。当时代的风暴刮来时,死守中间的人被连根拔起,而拥有杠铃右端敞口的人,不仅能生存,还能从波动和混乱中汲取能量(反脆弱),顺势完成阶层的跨越。

总结:用杠铃的手段,修中庸的内功

  • 世俗的误解把中庸当成了平庸,试图在人生的 DP 数组里找一个安稳的平均值。
  • 真正的中庸是一种极高的系统控制力,它不排斥极端,而是驾驭极端。

老子说“万物负阴而抱阳,冲气以为和”,其实也是这个图景。杠铃的左边是极阴(防守、保守、结硬寨),右边是极阳(进攻、冒险、打呆仗),两端挂载着极端的配重,才使得人生的这根挑杆,稳稳地压在你的肩上,任凭风吹雨打,步伐不乱。

如果把这种“局部的极端,全局的平衡”映射到你目前硬核的技术演进路线图中,你认为在这个体系里,什么是那 90% 绝对不能动摇的“庸(防御基本盘)”,什么又是那 10% 必须去疯狂试错的“极(进攻破局点)”?

四、大脑的 DP 幻想:底层硬件的限制与破局

尽管人生这道题不满足 DP 的条件,但大脑在漫长的演化中,被写进了一段“强制使用 DP 求解”的底层微代码。

1. 幻想“重叠子问题”:模式匹配的滥用

神经生物学原因:大脑是一个极度渴望节能的器官,重量仅占人体的 2%,却消耗 20% 的能量。面对复杂的环境,大脑皮层无法持续进行高耗能的逻辑推演。因此,基底神经节(Basal Ganglia)负责将行为固化为习惯,杏仁核负责将危险固化为条件反射。大脑强制对输入信号进行“降维打击”,只抓取几个特征,一旦匹配上,就直接触发旧的神经回路(查表法),从而产生“这题我会”、“都是一个套路”的重叠错觉。

解决方案【刻意清空缓存】:启动背外侧前额叶皮层(dlPFC),这需要极高的认知控制力(也就是“正念”或“第一性原理思考”)。在做出直觉判断前,强迫自己停顿 3 秒,问自己一个问题:“当下的情况,有哪三个变量是和过去绝对不同的?” 强制神经信号走慢速的理性评估通道,打破旧的突触连接惯性。

2. 幻想“最优子结构”:多巴胺系统的短视

神经生物学原因:人类的奖赏回路(中脑-边缘系统)是极度短视的,多巴胺分泌的峰值永远挂靠在“即刻的局部最优解”上——高热量的食物、短视频的刺激、立即能拿到的微小回报。大脑天真地以为,只要我今天多巴胺分泌最大化,明天多巴胺分泌最大化,我的人生就最幸福。它无法处理“局部痛苦导致全局升华”这种非线性的复杂方程。

解决方案【引入长效神经递质与延迟满足】:不要试图用意志力去硬抗多巴胺的冲动,因为能量终会耗尽。你需要用更高维度的意义(比如内啡肽、催产素带来的长效平静与认同感)来覆盖低级的多巴胺刺激。建立一种“庆祝失败”或“享受枯燥”的认知重塑机制,让前额叶皮层明白:当前这个看起来是负数的局部子节点,实际上是通向未来那个非线性巨大正收益的关键密码。

3. 幻想“无后效性”:意志力万能论

神经生物学原因:我们总以为自己随时可以“重新开始”,比如“明天我一定早起”、“下个月我一定重新做人”。这是一种对大脑硬件可塑性的过度乐观。旧习惯的神经突触其实已经变得像高速公路一样粗壮,而新习惯的回路只是一条泥泞的小路。大脑产生了一种错觉,以为只要有了一个“新的想法”(状态的更新),就能瞬间斩断过去的物理连接。

解决方案【系统设计重于局部重置】:承认强烈的后效性,承认我们是历史的产物。既然神经回路的物理惯性极大,那么改变环境(系统设计)永远比纯拼意志力(强行改状态)有效。不要去想“我明天要用意志力抵抗玩手机”,而是“我今晚直接把手机锁在另一个房间”。用物理隔绝的手段,对冲掉历史神经回路带来的强大后效性。