空间最小距离点对——python

这篇博客介绍了如何使用Python实现空间中点对的最小距离算法,首先提供了一个复杂度为n²的常规算法,并展示了简洁的代码实现,同时通过绘制图形辅助理解。接着提到了分治算法在解决该问题时面临的难点,如子问题分割和跨界解的求解,表示这些细节将在课堂上详细讲解,并给出了分治法的求解代码。
摘要由CSDN通过智能技术生成
  1. 请参考教材98页,算法6.6,先来个常规算法,复杂度为n的平方,结合Python的优势,代码整短点,顺便绘制下图形,算法思路简单,不多说了,注意陷阱。
  2. 上代码了:
#coding=utf-8
import math
import matplotlib.pyplot as plt
def closestpair_simple(X, n):
    #对于n个数据点,计算n(n-1)/2个数就可以了
    dist = [[distance(X[i], X[j]), i, j] for i in range(len(X)) for j in range(i+1,len(X))]
    return min(dist)[0], [min(dist)[1], min(dist)[2]]
def distance(a, b):
    return math.sqrt(math.pow(a[0]-b[0], 2)+math.pow(a[1]-b[1], 2))
if __name__ == "__main__": 
    points = [(2,3), (10, 1), (3, 25), (23,15), (18,3), (8,9), (12,30), (25,30), (9,2), 
             (13,10), (3,4), (5,6), (22,32), (5,32), (23,9), (19,25), (14,1), (11,25), (26,26),
             (12,9), (18,9), (27,13), (32,13)]
    print (closestpair_simple(points, len(points)))
    #绘制这些点
    x = [points[i][0] for i in range(len(points)) ]
    y = [points[j][1] for j in r
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值