“数学即代码”是一种概念,强调数学和编程之间的紧密联系。它认为编程不仅仅是写代码,而是通过数学思维来解决问题和实现算法。以下是一些具体的应用和例子,展示了如何将数学概念转化为代码:
🔷 一、思想内核:为什么“数学即代码”?
| 维度 | 数学 | 编程 | 本质统一性 |
|---|---|---|---|
| 抽象能力 | 用符号表示现实(如 f(x) = x^2 ) | 用函数封装逻辑(def square(x): return x*x) |
将具体问题泛化为可复用模型 |
| 逻辑严谨性 | 定理需严格证明(如归纳法) | 程序需无歧义执行(编译/运行不报错) | 每一步推导必须可验证 |
| 结构化思维 | 集合、群、图、向量空间等代数结构 | 类、对象、数据结构、类型系统 | 世界由“结构+操作”构成 |
| 算法即计算 | 求解方程、优化目标函数 | 实现排序、训练神经网络 | 算法 = 可执行的数学过程 |
✅ 核心洞见:
编程语言是数学思想的可执行载体;
代码是写给人看的数学证明(Knuth:“程序 = 算法 + 数据结构”,而算法本就是数学)。
🔷 二、实践映射:数学概念如何直接转化为代码?
1. 函数 → 函数/方法
# 数学:f: ℝ → ℝ, f(x) = sin(x) + x²
def f(x):
return math.sin(x) + x ** 2
2. 集合与映射 → 数据结构与字典
# 数学:A = {1, 2, 3}, B = {a, b, c}, f: A → B
A = {1, 2, 3}
mapping = {1: 'a', 2: 'b', 3: 'c'} # 字典 = 有限映射
3. 线性代数 → 张量运算(AI基石)
# 数学:y = Wx + b (矩阵乘法)
import torch
W = torch.randn(10, 784)
x = torch.randn(784)
b = torch.randn(10)
y = W @ x + b # 这就是神经网络的一层!
4. 概率论 → 随机过程与贝叶斯推理
# 数学:P(A|B) = P(B|A)P(A)/P(B)
from scipy.stats import norm
prior = norm(0, 1) # 先验分布
likelihood = norm(5, 2) # 似然
# 后验可通过MCMC或变分推断计算(如PyMC3)
5. 图论 → 网络与关系建模
# 数学:G = (V, E)
import networkx as nx
G = nx.Graph()
G.add_edges_from([(1,2), (2,3), (3,1)]) # 社交网络、知识图谱基础
🔷 三、典型案例:没有数学,就没有这些技术
| 技术领域 | 核心数学 | 代码体现 |
|---|---|---|
| 密码学 | 数论(素数、模运算)、椭圆曲线 | RSA.generate(2048), ECDH 密钥交换 |
| 计算机图形学 | 线性代数(矩阵变换)、微积分 | OpenGL 中的 MVP 矩阵、光线追踪积分 |
| 机器学习 | 优化理论、概率统计、线性代数 | loss.backward(), optimizer.step() |
| 区块链 | 哈希函数、默克尔树、博弈论 | sha256(data), Merkle root 构建 |
| 编译器 | 形式语言、自动机理论、λ演算 | 语法分析器(Parser)、类型推导 |
💡 震撼事实:
- 没有傅里叶变换,就没有 MP3、JPEG、5G;
- 没有范畴论,就没有 Haskell 的强类型系统;
- 没有信息论,就没有 ZIP 压缩和 LLM 的 tokenization。
🔷 四、如何培养“数学即代码”的思维?
✅ 学习路径建议:
- 从具体问题出发
不要先学“高等数学”,而是问:“我想做图像识别,需要什么数学?” → 答:线性代数 + 微积分 + 概率。 - 用代码实现数学概念
- 手写一个线性回归(不用 sklearn);
- 用 Python 实现快速傅里叶变换(FFT);
- 用递归画分形树(体现自相似性)。
- 阅读“数学味”浓的代码库
- NumPy / SciPy(数值计算)
- SymPy(符号数学)
- PyTorch(自动微分 = 链式法则的代码化)
- 推荐资源:
- 书籍:《Concrete Mathematics》(Knuth)、《Mathematics for Machine Learning》
- 视频:3Blue1Brown(可视化数学)、MIT OpenCourseWare
- 工具:Wolfram Alpha(探索数学)、Jupyter Notebook(交互实验)
🌟 终极认知:编程是数学的“可执行注释”
正如著名计算机科学家 Leslie Lamport(LaTeX 作者、图灵奖得主)所说:
“If you’re thinking without writing, you only think you’re thinking.”
而在数字时代,“writing” = coding —— 代码是你数学思维的可运行证明。
y = np.dot(W, x) + b,你不仅在调用一个函数,你是在召唤线性空间中的仿射变换,
你是在用硅基晶体管演绎百年数学智慧。
✅ 行动建议
“这段逻辑背后,是否有更简洁的数学表达?
能否用一个公式替代10行if-else?
我的数据结构是否反映了问题的内在对称性?”
掌握“数学即代码”,你将从“码农”蜕变为“数字世界的建筑师”。
🔑 1. 抽象能力:从“做一件事”到“定义一类事”
- 数学思维:用符号和变量表示通用关系(如 f(x) = ax^2 + bx + c )。
- 编程体现:避免重复代码,用函数/类封装逻辑。
- 效率提升:
- 减少冗余(DRY 原则);
- 提高可维护性;
- 支持组合与复用。
没有数学思维 → 写10个类似函数处理不同数据;
有数学思维 → 定义一个泛型函数
transform(data, rule),传入不同 rule 即可。# 低效:硬编码
def calc_area_rect(l, w): return l * w
def calc_area_tri(b, h): return 0.5 * b * h
# 高效:抽象为“面积计算”接口
def area(shape, **kwargs):
if shape == "rect": return kwargs['l'] * kwargs['w']
if shape == "tri": return 0.5 * kwargs['b'] * kwargs['h']
💡 效率增益:需求变更时,只需新增规则,不改主逻辑。
🔑 2. 逻辑严谨性:减少调试时间,预防 Bug
- 数学思维:命题需严格证明,边界条件必须考虑(如归纳法基础情形)。
- 编程体现:提前思考输入域、输出域、异常路径。
- 效率提升:
- 编写时即规避常见错误(如空指针、除零、越界);
- 单元测试覆盖率更高;
- 系统更健壮,减少线上故障。
数学中求和: \sum_{i=1}^{n} i —— 明确起止点。
编程中:
# 模糊思维:容易 off-by-one 错误
for i in range(n): # 是 0 到 n-1 还是 1 到 n?
# 数学思维:明确索引含义
for i in range(1, n+1): # 清晰对应 ∑_{i=1}^n
💡 效率增益:节省大量调试“为什么结果差1”的时间。
🔑 3. 结构化建模:将复杂问题分解为可计算单元
- 数学思维:用集合、图、向量、函数等结构描述世界。
- 编程体现:选择合适的数据结构和算法。
- 效率提升:
- 时间/空间复杂度显著降低;
- 代码可读性增强;
- 团队协作更顺畅(模型即文档)。
- 无结构思维 → 用多层嵌套字典存储关系,查询慢且易错;
- 图论思维 → 将用户视为节点,好友关系为边,用
networkx或邻接表实现:
import networkx as nx
G = nx.Graph()
G.add_edge("Alice", "Bob")
G.add_edge("Bob", "Charlie")
# 推荐共同好友
common = nx.common_neighbors(G, "Alice", "Charlie")
💡 效率增益:原本 O(n²) 的暴力搜索 → O(degree) 的图遍历。
🔑 4. 算法意识:知道“有没有更好的方法”
- 数学思维:熟悉经典问题的最优解(如最短路径、排序、优化)。
- 编程体现:不重复造轮子,直接调用或适配高效算法。
- 效率提升:
- 性能数量级提升(如从 O(n²) 到 O(n log n));
- 资源消耗大幅降低(尤其在大数据场景)。
- 直觉写法:
python编辑
[x for x in list1 if x in list2] # O(n*m) - 数学思维(集合论):
python编辑
set(list1) & set(list2) # O(n + m)
💡 效率增益:10万条数据下,从秒级降到毫秒级。
🔑 5. 量化评估:用数据驱动优化决策
- 数学思维:相信测量而非直觉(如大O分析、概率分布)。
- 编程体现:性能分析、A/B测试、误差控制。
- 效率提升:
- 避免“过早优化”或“无效优化”;
- 聚焦真正瓶颈;
- 结果可验证、可复现。
- 凭感觉加索引 → 可能无效甚至变慢;
- 用执行计划(EXPLAIN) + 统计信息分析 → 精准定位慢查询原因。
📊 综合影响:数学思维如何改变开发周期
| 阶段 | 无数学思维 | 有数学思维 | 效率差异 |
|---|---|---|---|
| 需求分析 | 关注功能点 | 抽象问题模型 | ↓ 30% 沟通成本 |
| 设计 | 拼凑式架构 | 基于代数/逻辑结构 | ↓ 50% 重构风险 |
| 编码 | 边写边试 | 一次成型 | ↓ 40% 调试时间 |
| 测试 | 覆盖常见case | 覆盖边界+等价类 | ↑ 90% 缺陷拦截率 |
| 优化 | 凭经验猜测 | 基于复杂度/ profiling | ↑ 10倍性能提升 |
✅ 如何培养这种思维?(行动建议)
- 学习离散数学:逻辑、集合、图论、递归——程序员的“数学母语”;
- 手推算法:不直接调库,先自己实现快排、Dijkstra、FFT;
- 用类型系统表达约束:如 Haskell/TypeScript 中用类型防止非法状态;
- 阅读数学味浓的代码:如 NumPy 源码、Pandas 的 groupby 实现;
- 问自己:“这个问题在数学中叫什么?”
🌟 结语:数学思维 = 编程的“元技能”
它不直接让你多写一行代码,
但它让你每一行代码都更有力量。正如 Edsger Dijkstra 所言:
“计算机科学的根基不是计算机,而是数学。”
你看到的不再是
if-else 和 for-loop,而是逻辑流形上的映射、状态空间中的轨迹、信息熵的压缩与传递。
🌐 1. 穿透复杂性的“X光眼”:看清系统本质
- 机制:数学训练你识别模式、结构、不变量,忽略噪声。
- 应用场景:
- 面对一个混乱的遗留系统 → 能快速抽象出状态机或数据流图;
- 分析业务指标波动 → 区分随机噪声 vs 真实趋势(用统计显著性);
- 理解区块链/LLM等新技术 → 抓住其核心是“共识算法”或“概率生成模型”。
✅ 案例:
普通人看大模型:“它会聊天!”
有数学思维者看大模型:“这是一个基于Transformer的自回归概率分布 P(xt∣x﹤t) ,通过最大似然估计训练。”
⚖️ 2. 理性决策力:在不确定中做出最优选择
- 机制:概率论、期望值、贝叶斯更新教会你量化不确定性。
- 应用场景:
- 技术选型:不是“哪个更火”,而是“在失败概率×损失 vs 成功收益之间权衡”;
- 职业规划:用期望效用理论评估跳槽风险;
- 日常生活:是否买保险?是否抢购限量商品?——用期望成本分析。
💡 经典思维工具:
“5% 显著性水平” → 不因一次偶然成功就相信某个策略;
“先验 vs 后验” → 根据新证据动态调整判断,避免固执己见。
🧩 3. 跨领域迁移能力:一通百通的学习加速器
- 机制:数学是通用语言,同一结构出现在不同领域。
- 例子:
表格
数学结构 计算机 物理 经济 生物 图 社交网络 电路 供应链 基因调控 微分方程 动画插值 牛顿力学 人口增长 神经动力学 优化 模型训练 最小作用量 利润最大化 进化适应
✅ 结果:
学过线性代数的人,学机器学习、计算机图形学、量子计算都更快——因为内核相同。
🛠️ 4. 构建可靠系统的工程直觉
- 机制:数学强调边界、不变式、归纳证明,这直接对应软件可靠性。
- 体现:
- 写循环时自动思考:循环不变式(Loop Invariant)是否成立?
- 设计API时考虑:输入域/输出域是否清晰?是否有非法状态?
- 构建分布式系统时理解:CAP定理本质是逻辑不可兼得性。
🔒 终极价值:
你的系统不容易崩,因为你在设计时就排除了逻辑矛盾。
💡 5. 创新源泉:从“组合”到“重构”
- 机制:数学家擅长重新定义问题(Reframing)。
- 案例:
- 傅里叶变换:把“时间信号”变成“频率信号” → 催生通信、音频、图像压缩;
- 范畴论:把“对象+关系”抽象为箭头 → 启发函数式编程与类型系统;
- 博弈论:把“竞争”建模为策略矩阵 → 改变经济学、AI多智能体设计。
✨ 创新公式:
旧问题 + 新数学视角 = 颠覆性解决方案
🧘 6. 认知免疫力:抵御谬误、偏见与信息操控
- 机制:数学训练你质疑前提、检验逻辑、拒绝模糊。
- 防御能力:
- 识别“相关≠因果”(如“冰淇淋销量↑ → 溺水事故↑”);
- 看穿“平均数陷阱”(如“人均财富被 billionaires 拉高”);
- 警惕“幸存者偏差”(只看到成功案例,忽略沉默的大多数)。
🛡️ 在AI时代尤其重要:
当LLM生成看似合理实则错误的“幻觉”内容时,
数学思维是你不被带节奏的最后一道防线。
🌱 附加价值:长期主义的人生优势
| 领域 | 数学思维的作用 |
|---|---|
| 学习能力 | 掌握“学习如何学习”的元方法(如类比、归纳、分解) |
| 沟通效率 | 用精确语言表达,减少歧义(如“大约” vs “95%置信区间”) |
| 抗焦虑能力 | 面对不确定性时,用概率思维替代灾难化想象 |
| 创造力 | 在约束中寻找自由度(如“给定边界条件,求最优解”) |
✅ 如何激活这些潜在好处?
- 不要只学“用得上的数学” → 培养数学品味(如欣赏简洁、对称、普适);
- 在非技术场景刻意练习:
- 用贝叶斯更新评估朋友是否靠谱;
- 用图论规划最短旅行路线;
- 用期望值决定是否参与抽奖。
- 阅读“数学哲学”类书籍:
- 《Gödel, Escher, Bach》(侯世达)
- 《The Art of Doing Science and Engineering》(Hamming)
🌟 结语:数学思维是“数字文明时代的素养”
它不仅是工具,更是世界观。正如物理学家 Eugene Wigner 所说:
“数学在自然科学中 unreasonable effectiveness(不可思议的有效性)。”而在2026年,这种“不可思议的有效性”已扩展到编程、金融、社会、甚至艺术。
不是在“使用计算机”,
而是在与宇宙的逻辑结构对话。
“数学即代码”是一种概念,强调数学和编程之间的紧密联系。它认为编程不仅仅是写代码,而是通过数学思维来解决问题和实现算法。以下是一些具体的应用和例子,展示了如何将数学概念转化为代码:
1. 数学表达式和计算
数学表达式可以直接转化为程序代码。例如,计算一个二次方程的解:
数学公式: [ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} ]
Python代码:
import math
def solve_quadratic(a, b, c):
discriminant = b**2 - 4*a*c
if discriminant < 0:
return [] # No real solutions
elif discriminant == 0:
return [-b / (2 * a)] # One solution
else:
root1 = (-b + math.sqrt(discriminant)) / (2 * a)
root2 = (-b - math.sqrt(discriminant)) / (2 * a)
return [root1, root2]
# Example usage
a, b, c = 1, -3, 2
solutions = solve_quadratic(a, b, c)
print(solutions) # Output: [2.0, 1.0]
2. 数列和递归
斐波那契数列是一个经典的数学问题,可以通过递归或动态规划来实现。
数学定义: [ F(n) = F(n-1) + F(n-2) ] [ F(0) = 0, , F(1) = 1 ]
Python代码(递归实现):
def fibonacci_recursive(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)
# Example usage
print(fibonacci_recursive(10)) # Output: 55
Python代码(动态规划实现):
def fibonacci_dp(n):
if n <= 0:
return 0
elif n == 1:
return 1
fib = [0] * (n+1)
fib[1] = 1
for i in range(2, n+1):
fib[i] = fib[i-1] + fib[i-2]
return fib[n]
# Example usage
print(fibonacci_dp(10)) # Output: 55
3. 几何和图形
几何问题也可以通过编程来解决。例如,计算两点之间的距离:
数学公式: [ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} ]
Python代码:
import math
def distance(x1, y1, x2, y2):
return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
# Example usage
d = distance(0, 0, 3, 4)
print(d) # Output: 5.0
4. 线性代数
线性代数中的矩阵运算在科学计算和数据分析中非常常见。NumPy库提供了强大的矩阵运算功能。
矩阵乘法:
数学表示: [ C = A \times B ]
Python代码:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)
print(C)
# Output:
# [[19 22]
# [43 50]]
5. 微积分
微积分中的数值积分可以通过编程来实现,例如使用梯形法则进行数值积分。
数学公式: [ \int_a^b f(x) , dx \approx \frac{h}{2} \left[ f(a) + 2\sum_{k=1}^{n-1} f(a + kh) + f(b) \right] ] 其中 ( h = \frac{b-a}{n} )。
Python代码:
def trapezoidal_rule(f, a, b, n):
h = (b - a) / n
integral = (f(a) + f(b)) / 2.0
for k in range(1, n):
integral += f(a + k * h)
integral *= h
return integral
# Example usage
def f(x):
return x**2
result = trapezoidal_rule(f, 0, 1, 1000)
print(result) # Output: 0.3333334999999998, close to the exact integral of x^2 from 0 to 1 which is 1/3 ≈ 0.333333...
这些例子展示了如何将数学公式、定理和概念转化为编程代码,通过这种方式,我们可以利用计算机强大的计算能力来解决复杂的数学问题。
还有许多其他领域的数学概念可以转化为代码,比如概率统计、离散数学、优化理论等。以下是一些其他可能的例子:
6. 概率统计
概率统计中的概率分布、随机变量和统计量计算可以通过编程来实现。例如,生成服从正态分布的随机数:
数学公式: [ f(x) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} ]
Python代码(使用NumPy库):
import numpy as np
mu, sigma = 0, 0.1 # 均值和标准差
s = np.random.normal(mu, sigma, 1000) # 生成1000个符合正态分布的随机数
7. 离散数学
离散数学中的图论、集合论、逻辑等概念在计算机科学中有广泛应用。例如,判断一个数是否为素数:
数学定义: 如果一个大于1的自然数,除了1和它本身以外没有正因数,则称其为素数。
Python代码:
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# Example usage
print(is_prime(17)) # Output: True
8. 优化理论
优化理论中的最优化问题可以通过编程来求解,例如线性规划、整数规划等。
数学定义: [ \text{maximize } f(x) \text{ subject to } g(x) \leq 0, , h(x) = 0 ]
Python代码(使用SciPy库):
from scipy.optimize import minimize
def objective(x):
return x[0]**2 + x[1]**2
def constraint(x):
return x[0] + x[1] - 1
x0 = [1, 1] # Initial guess
cons = {'type': 'ineq', 'fun': constraint}
res = minimize(objective, x0, constraints=cons)
print(res.x) # Output: [0.5, 0.5], 最小值点
以上是一些数学概念如何转化为代码的例子,展示了数学和编程之间的密切联系。这种联系使得我们能够利用计算机来解决各种复杂的数学问题,并在科学、工程、金融等领域中得到广泛应用。
让我们继续探讨更多数学概念与编程的结合。这些概念不仅涵盖基础数学,还包括高级数学和应用数学的内容。
9. 数值分析
数值分析是通过数值近似的方法来解决数学问题的一门学科。一个常见的例子就是求解非线性方程的根。
数学方法:牛顿-拉夫森法
数学公式: [ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} ]
Python代码:
def newton_raphson(f, df, x0, tol=1e-7, max_iter=100):
xn = x0
for n in range(max_iter):
fxn = f(xn)
if abs(fxn) < tol:
return xn
dfxn = df(xn)
if dfxn == 0:
raise ValueError("Zero derivative. No solution found.")
xn = xn - fxn / dfxn
raise ValueError("Exceeded maximum iterations. No solution found.")
# Example usage
def f(x):
return x**2 - 2
def df(x):
return 2*x
root = newton_raphson(f, df, x0=1)
print(root) # Output: 1.414213562373095, which is approximately √2
10. 线性回归
在线性回归模型中,我们试图找到一条最适合数据的直线。这个过程可以用矩阵运算来实现。
数学公式: [ \hat{\beta} = (X^T X)^{-1} X^T y ]
Python代码(使用NumPy库):
import numpy as np
def linear_regression(X, y):
X_b = np.c_[np.ones((X.shape[0], 1)), X] # Add bias term
beta_hat = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
return beta_hat
# Example usage
X = np.array([[1], [2], [4], [3], [5]])
y = np.array([1, 3, 3, 2, 5])
beta_hat = linear_regression(X, y)
print(beta_hat) # Output: [0.4, 0.8]
11. 傅里叶变换
傅里叶变换在信号处理和物理学中有广泛应用,它将时间域信号转化为频率域表示。
数学公式: [ F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i \omega t} , dt ]
Python代码(使用SciPy库):
import numpy as np
from scipy.fft import fft, ifft
# Example: Simple sine wave
t = np.linspace(0, 1, 500)
f = np.sin(2 * np.pi * 50 * t) # 50 Hz sine wave
# Compute the Fourier Transform
F = fft(f)
# Inverse Fourier Transform
f_reconstructed = ifft(F)
print(np.allclose(f, f_reconstructed)) # Output: True, indicating successful reconstruction
12. 概率分布拟合
统计学中,经常需要对数据进行概率分布的拟合,以便进行进一步的分析和推断。
数学公式: 假设数据服从某种分布,通过最大似然估计(MLE)找到分布参数。
Python代码(使用SciPy库):
import numpy as np
import scipy.stats as stats
data = np.random.normal(0, 1, 1000) # Generate data from a normal distribution
# Fit the data to a normal distribution
mu, sigma = stats.norm.fit(data)
print(mu, sigma) # Output: Estimated parameters (mean and standard deviation)
13. 马尔可夫链
马尔可夫链是一种随机过程,特别适用于建模依赖于前一状态的系统。
数学定义: [ P(X_{n+1} = x | X_n = y) ]
Python代码(模拟马尔可夫链):
import numpy as np
def simulate_markov_chain(transition_matrix, states, start_state, num_steps):
current_state = start_state
state_sequence = [current_state]
for _ in range(num_steps):
next_state = np.random.choice(states, p=transition_matrix[current_state])
state_sequence.append(next_state)
current_state = next_state
return state_sequence
# Example usage
states = [0, 1]
transition_matrix = [[0.9, 0.1], [0.5, 0.5]]
num_steps = 10
start_state = 0
sequence = simulate_markov_chain(transition_matrix, states, start_state, num_steps)
print(sequence) # Output: A sequence of states based on the transition probabilities
14. 动态规划
动态规划是一种优化技术,用于解决具有重叠子问题和最优子结构性质的问题。例如,计算最长公共子序列(LCS)。
数学定义: 设两个序列 (X) 和 (Y) 的长度分别为 (m) 和 (n),则 LCS 的递归关系为: [ \text{LCS}(i, j) = \begin{cases} 0 & \text{if } i = 0 \text{ or } j = 0 \ \text{LCS}(i-1, j-1) + 1 & \text{if } X[i-1] = Y[j-1] \ \max(\text{LCS}(i-1, j), \text{LCS}(i, j-1)) & \text{if } X[i-1] \neq Y[j-1] \end{cases} ]
Python代码:
def lcs(X, Y):
m, n = len(X), len(Y)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if X[i - 1] == Y[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
return dp[m][n]
# Example usage
X = "AGGTAB"
Y = "GXTXAYB"
print(lcs(X, Y)) # Output: 4, which corresponds to the LCS "GTAB"
这些例子展示了更多数学概念如何通过编程来实现,从而帮助我们更好地理解和应用这些理论。在科学研究、工程设计和数据分析等领域,编程工具可以极大地提高工作效率和准确性。

浙公网安备 33010602011771号