【高级算法设计与分析】实验1:分治算法解决凸包问题

本文通过实验介绍了如何使用分治算法解决凸包问题,包括枚举法、Graham-Scan算法和分治策略的实现与性能对比。实验结果显示,Graham-Scan在点集规模较大时表现最优,而枚举法和分治法的时间复杂度分别为O(n^3)和O(nlogn)。
摘要由CSDN通过智能技术生成

实验一:分治算法

  1. 实验目的
    1、掌握分治算法的设计思想与方法,
    2、熟练使用高级编程语言实现分治算法,
    3、通过对比简单算法以及不同的分治求解思想,理解算法复杂度。

  2. 实验学时
    4 学时。

  3. 实验问题
    求解凸包问题:输入是平面上 n 个点的集合 Q,凸包问题是要输出一个 Q 的凸包。其中,Q 的凸包是一个凸多边形 P,Q 中的点或者在 P 上或者在 P 中。(详情请见课件)。
    首先,实现点类并覆写方法,作为实验的基本支持工具。

    代表一个具有x和y坐标的二维点。
    
    属性:
        x (int): 点的x坐标。
        y (int): 点的y坐标。
    
    方法:
        __init__(self, x, y): 使用给定的x和y坐标初始化Point对象。
        __str__(self): 返回点的字符串表示形式,形如'(x, y)'。
        __hash__(self): 根据点的坐标计算哈希值。
    	__lt__(self, other): 根据x坐标比较两个点的大小。X相同时,比较y。
    	__eq__(self, other): 根据它们的x和y坐标比较两个点是否相等。
        __sub__(self, other): 计算两个点之间的欧氏距离。
    """
    class point:
        x, y = 0, 0
        def __init__(self, x, y):
            self.x, self.y = x, y
        def __str__(self):
            return '(' + str(self.x) + ',' + str(self.y) + ')'
        def __hash__(self):
            return int(str(self.x) + str(self.y))
        def __lt__(self, other):
            return self.y < other.y if self.x == other.x else self.x < other.x
    
        def __eq__(self, other):
            return self.x == other.x and self.y == other.y
        def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值