假设给出了一组三角形(每个三角形是一组三个整数,它们是边长)。是否有任何(合理的)算法来检查形状是否可以组合在一起形成一个大三角形?
通过放在一起,我的意思是放在2D平面上 - 没有两个三角形重叠。 - 每个三角形边框的每个部分都与其他三角形的边界重叠,或者形成大三角形的边框。 - 大三角没有空的空间。
对于3-4个三角形,有必要手动测试案例here。有没有办法自动生成这些案例?还有一些情况需要计算角度。是要使用余弦规则来完成还是有更好的方法不需要浮点(因此不精确)计算。
P.S。这不是作业问题;我只是好奇。
答案 0 :(得分:1)
这听起来像是一个难题。但是你可以做一些检查来证明在给定的一组上是不可能的。大区域(见苍鹭)必须由三面实现,这三面是给定边的总和。角度必须总和为180或360或其中一个角。我相信你可以做更多的测试。如果你不能证明它是不可能的,你可以设置一个适合的边和角度的搜索。
答案 1 :(得分:1)
任何执行此操作的算法都会产生时间复杂度,如n 7 或更糟,因此大量输入始终存在问题。话虽如此,我建议这样的事情:
通过这些准备工作,我们仍处于线性时间。但那时:
计算我使用“尝试每一个”字样的次数将让您了解时间复杂度;当然,许多组合将被发现不能在早期工作,因此它所花费的实际时间将在很大程度上取决于具体的输入。