排序序列中的三角形数量

Posted

技术标签:

【中文标题】排序序列中的三角形数量【英文标题】:Number of triangles from a sorted sequence 【发布时间】:2015-10-29 18:22:01 【问题描述】:

给定一个严格递增的n 正整数A(1) < A(2) < ... < A(n) 序列。我们需要找到边长为3 这个序列的不同元素的三角形的数量。

n <= 6000 开始,检查每个可能的组合还不够快。有没有更好的算法?感谢您的帮助。

我的伪代码:

for i from 0 till n - 2
    for j from i+1 till n-1
        for k from j+1 till n
            if A[i] + A[j] > A[k] then count += 1
            else break

【问题讨论】:

你的实际算法是什么?能给我们举个例子吗? 我在帖子中添加了我的伪代码。 【参考方案1】:
    您可以排除第三个循环并使用二进制搜索查找最大 k 值。复杂度为 O(N^2*Log(N) 您可以达到更好的时间 - O(N^2) - 想想如何使用单调性属性。

【讨论】:

以上是关于排序序列中的三角形数量的主要内容,如果未能解决你的问题,请参考以下文章

常用算法JS实现汇总

bzoj3251: 树上三角形(思维题)

2018.01.01(数字三角形,最长上升子序列等)

976 三角形的最大周长--重要

计算图中的三角形

三角形数量