python完成分治法

算法思路

将点按照横坐标排序,把点分为左右,并且判断中间的点

代码:

# 创建点
P = [[1, 2], [6, 4], [2, 4], [8, 8], [6, 9], [10, 11], [2, 3], [10, 2], [6, 7]]
'''
针对点集的快速排序
'''
def quick_sort(arr, start, end):
	if start>= end:
		return #至关重要,退出条件
	low = start
	high = end
	mid =arr[start]
	pivot = arr[start][0]
	# 比较的知识横坐标大小
	#  交换的是实际的点
	while low < high:
		while low<high and arr[high][0] >= pivot:
			high -= 1
		arr[low] = arr[high]
		while low< high and arr[low][0]< pivot:
			low += 1
		arr[high] = arr[low]
	arr[low] = mid
	quick_sort(arr, start, low-1)
	quick_sort(arr, low+1,end)
'''
计算两点之间的距离
'''
def dis(P1, P2):
	return ((P1[0]-P2[0])**2+(P1[1]-P2[1])**2)**0.5
'''
分治法
'''
def Closet_Pair(P):
	high = len(P)
	# 点为3个和两个的情况
	if high == 3:
		d1 = dis(P[0], P[1])
		d2 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值