是否有可能在比(n 选择 3)更好的时间内找到可以从长度列表中形成的三角形数量?
Posted
技术标签:
【中文标题】是否有可能在比(n 选择 3)更好的时间内找到可以从长度列表中形成的三角形数量?【英文标题】:Is it possible to find the number of triangles that can be formed from a list of lengths in better than (n choose 3) time? 【发布时间】:2016-10-04 15:00:49 【问题描述】:这与我正在处理的一个更大的问题有关。
例如,假设我们有一个列表
9 5 6 1
可能的个三角形都有边长
(9,5,6)
(9,6,1)
(9,5,1)
(5,6,1)
有效的(通过三角不等式)是
(9,5,6)
(5,6,1)
是否有可能在比O(n choose 3)
更好的时间找到那些有效的?
【问题讨论】:
@Deadly 尼古丁,你说的 O(n 选择 3) 是什么意思,是 O(n^3) 吗? @Abdenaceur Lichiheb 他说的是二项式系数 @AbdenaceurLichiheb 是的,对不起。我的意思是说有N个选择3个这样的可能性,但是找到这些可能性的蛮力算法确实是O(N^3) 这个问题是否是这里的主题是discussed on Meta。 【参考方案1】:一般情况下,答案是否:假设你得到了
1, 1 - ε, 1 - 2 * ε, ..., 1 - (n - 1) * ε
在这种情况下,所有 3 个项目的组合
n * (n - 1) * (n - 2) / 6 = O(n**3)
是 distinct 并制作 有效的三角形 并且您有 O(n**3)
复杂性只是为了枚举(和输出 ) 他们
【讨论】:
【参考方案2】:首先对列表进行排序。
现在不是做完整的 O(n^3) 搜索,我们只需要在 O(n^2) 中搜索一对点并找到第三个点(可能不止一个点,所以你需要检查下界和上界)通过二分查找。
所以总体上新的复杂度是 O(n^2 log(n))
【讨论】:
是的,但这只是对它们进行计数,如果您想要生成实际的三元组,最坏的情况仍然是O(n^3)
,因为您需要以某种方式生成输出
@cobarzan,是的,你是对的,确定我只是给出了三角形的数量,但如果你需要实际的三元组,那么它绝对是 O(n^3) ,但仍然被认为是局部优化。【参考方案3】:
没有。你可以有一个任意大的输入集合,其中每个三元组都是一个有效的三角形。
【讨论】:
以上是关于是否有可能在比(n 选择 3)更好的时间内找到可以从长度列表中形成的三角形数量?的主要内容,如果未能解决你的问题,请参考以下文章
给定一组 n 个点 (x,y),是不是有可能在 O(n logn) 时间内找到它们之间具有负斜率的点对的数量?