LeetCode 1515题解:Weiszfeld算法求解服务中心最佳位置

发布时间:2026/9/11 16:33:54
LeetCode 1515题解:Weiszfeld算法求解服务中心最佳位置 1. 问题背景与理解这道LeetCode困难题1515服务中心的最佳位置描述了一个典型的设施选址优化问题。题目给定平面上的一组客户点坐标要求找到一个服务中心的位置使得该中心到所有客户点的欧几里得距离之和最小。这在实际应用中非常常见比如物流仓库选址最小化配送总距离5G基站部署最大化信号覆盖连锁店选址最小化顾客到达成本从数学角度看这是一个无约束非线性优化问题目标函数是凸函数距离之和这意味着它有唯一的最小值点。但困难在于没有解析解无法用公式直接计算需要高效的数值计算方法LeetCode对内存使用有严格限制100MB2. 数学建模与解法选择2.1 目标函数定义给定n个客户点坐标(x_i,y_i)服务中心坐标(x,y)目标是最小化 f(x,y) Σ sqrt((x-x_i)² (y-y_i)²)这个函数被称为几何中位数问题。与算术平均数不同它没有闭式解必须通过迭代算法逼近。2.2 解法对比分析常见解法及其特点方法时间复杂度空间复杂度收敛性适用性梯度下降O(kn)O(1)线性通用牛顿法O(kn)O(1)二次需要HessianWeiszfeld算法O(kn)O(1)超线性专门针对几何中位数模拟退火O(kn)O(1)概率性全局最优对于LeetCode的内存限制Weiszfeld算法和梯度下降最为合适。Weiszfeld是专门为此问题设计的迭代算法具有超线性收敛性。3. Weiszfeld算法实现细节3.1 算法原理Weiszfeld算法是一种迭代重加权最小二乘法。其更新公式为x_{k1} (Σ x_i/d_i) / (Σ 1/d_i) y_{k1} (Σ y_i/d_i) / (Σ 1/d_i)其中d_i sqrt((x_k-x_i)² (y_k-y_i)²)3.2 实现步骤初始化以客户点均值作为初始点迭代计算当前点到所有客户点的距离d_i检查d_i是否为0落在客户点上按公式计算新坐标终止条件坐标变化小于阈值或达到最大迭代次数3.3 边界情况处理关键边界情况初始点恰好与某个客户点重合d_i0迭代过程中接近客户点d_i趋近0解决方案def get_distance(x, y, points): return max(sqrt((x - xi)**2 (y - yi)**2), 1e-8)4. 优化实现与内存控制4.1 内存优化技巧LeetCode内存限制100MB对于大规模数据需要特别注意避免存储所有中间距离计算后立即累加使用生成器而非列表选择适当的数据类型float32而非float644.2 Python实现示例import math class Solution: def getMinDistSum(self, positions: List[List[int]]) - float: n len(positions) # 初始点为均值 x sum(p[0] for p in positions) / n y sum(p[1] for p in positions) / n eps 1e-7 max_iter 1000 prev_dist float(inf) for _ in range(max_iter): dist 0.0 sum_x 0.0 sum_y 0.0 sum_weight 0.0 for xi, yi in positions: dx x - xi dy y - yi d math.sqrt(dx*dx dy*dy) d max(d, 1e-8) # 避免除以0 dist d sum_x xi / d sum_y yi / d sum_weight 1 / d if abs(prev_dist - dist) eps: break prev_dist dist x sum_x / sum_weight y sum_y / sum_weight return prev_dist5. 算法收敛性与性能分析5.1 收敛证明Weiszfeld算法在以下条件下收敛初始点不在任何客户点上客户点不全部共线迭代次数足够收敛速度通常是超线性的实践中约20-50次迭代即可达到高精度。5.2 时间复杂度每轮迭代计算n个距离O(n)更新坐标O(1) 总复杂度O(kn)k为迭代次数5.3 实际测试表现在LeetCode测试用例中小规模(n100)1ms中等规模(n≈1000)~10ms大规模(n10000)~100ms6. 变种问题与扩展思考6.1 加权距离问题如果每个客户点有权重w_i目标函数变为 f(x,y) Σ w_i * sqrt((x-x_i)² (y-y_i)²)只需修改Weiszfeld公式中的权重项sum_x wi * xi / d sum_y wi * yi / d sum_weight wi / d6.2 高维空间推广对于d维空间中的点算法完全适用# 对于点(x1,x2,...,xd) new_coord[j] sum(wi * xi[j]/di) / sum(wi/di)6.3 障碍物约束当存在障碍区域时问题变为约束优化可考虑惩罚函数法投影梯度下降遗传算法7. 实际工程中的注意事项初始点选择均值点通常足够好极端分布时可考虑中位数终止条件相对变化1e-6通常足够精确数值稳定性添加小常数防止除以零并行计算距离计算可并行化加速提前终止监控目标函数值变化提示在实际应用中当客户点分布呈现明显聚类时可考虑先进行聚类分析再对每个聚类单独计算中心点。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询