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

两矩阵列置换下最小L2范数的Python实现及时间复杂度问询

列置换下两矩阵的最小L2范数求解方案

1. 可以实现远低于O(n!)的时间复杂度

这个问题本质等价于线性分配问题(Linear Assignment Problem),无需枚举所有n!种列置换组合。通过匈牙利算法(Hungarian Algorithm)可将时间复杂度降至O(n³),完全满足高效求解需求。

原理说明

将最小化目标Σ||X_i - Y_{σ(i)}||²展开后可得:

Σ||X_i - Y_{σ(i)}||² = Σ||X_i||² + Σ||Y_j||² - 2Σ(X_i · Y_{σ(i)})

其中Σ||X_i||²和Σ||Y_j||²是固定值,因此最小化原式等价于最大化Σ(X_i · Y_{σ(i)})——这正是线性分配问题的典型场景:寻找一组最优列匹配,使得匹配对的点积和最大。

2. Numpy无直接实现,但可借助Scipy解决

Numpy库未内置该问题的求解函数,但Scipy的scipy.optimize.linear_sum_assignment实现了匈牙利算法,可直接用于求解最优列置换。

示例代码

import numpy as np
from scipy.optimize import linear_sum_assignment

# 构造示例数据:m维列向量,共n组
vec_dim = 3
col_count = 4
X = np.random.rand(vec_dim, col_count)
Y = np.random.rand(vec_dim, col_count)

# 构建代价矩阵:将最大化点积转换为最小化问题(函数默认找最小代价)
cost_matrix = -np.dot(X.T, Y)

# 获取最优列置换索引
_, optimal_col_indices = linear_sum_assignment(cost_matrix)

# 计算最小L2范数
matched_X = X[:, np.arange(col_count)]
matched_Y = Y[:, optimal_col_indices]
min_l2_norm = np.sqrt(np.sum(np.linalg.norm(matched_X - matched_Y, axis=0)**2))

print("最小L2范数:", min_l2_norm)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:57:14