Java 按递增顺序排列的对的最大长度

Java 按递增顺序排列的对的最大长度,java,algorithm,Java,Algorithm,给定n对数字,第一个数字总是小于第二个数字。一对(c,d)可以跟随一对(A,b),当且仅当b这个问题可以用太多的方法解决 相同类型的问题已经存在了检查它 给你n对数字。在每一对中,第一个数字总是小于第二个数字。如果b

给定n对数字,第一个数字总是小于第二个数字。一对(c,d)可以跟随一对(A,b),当且仅当b这个问题可以用太多的方法解决 相同类型的问题已经存在了检查它 给你n对数字。在每一对中,第一个数字总是小于第二个数字。如果b 你可以去这里,那里有很多有用的资源


这是正确的。这里有一个证据:

s1,s2,…,sl
成为您的算法找到的对,而
i1,i2,…,ik
成为最佳解决方案

我们有:

l == k => your algorithm is obviously correct, since it's clear that
          it doesn't produce invalid solutions;

l > k => this would contradict our hypothesis that i1, ..., ik is optimal,
         so it makes no sense to bother with this;

l < k => this would mean that your algorithm is wrong. 
         Let's assume this is the case.
l==k=>您的算法显然是正确的,因为很明显
它不会产生无效的解决方案;
这与我们的假设相矛盾,即i1,…,ik是最优的,
因此,不必为此烦恼;
这意味着你的算法是错误的。
让我们假设情况就是这样。
假设
i1!=s1
。在这种情况下,我们可以在最佳解决方案中将
i1
替换为
s1
,因为
s1
是完成时间最短的一对。因此,
s1,i2,…,ik
仍然是最佳解决方案

t
  • 配对
    (c,d)
    可以跟在配对
    (a,b)
    iff
    bc
  • 所以我们可以说

    b <= c
    
    bc
    

    因此,最长的序列将从最小的第二个元素开始。因此,您可以根据第二个元素对它们进行排序,选择第一个元素并根据原始条件进行比较
    b为什么不选择这对(7,9)?为什么它不在对(5,7)之后呢?给出的另一个有效链是{(1,2),(3,4),(5,7),(7,9),(9,10)}。你想找到这两条/所有的链条,或者是链条,最大长度的链条,或者其他什么吗?我认为这行不通,因为它太贪婪了。排除包含的一个元素可能会有更长的链。我认为这需要作为一个动态程序来完成。这个问题是要求代码审查,而不是提出问题。这个问题更适合CodeReview。值得一提的是,您的算法是正确的。稍后我可能会发布一个证明。这是一个注释,而不是一个答案。这些不是同一件事,因为它们涉及按元素出现的顺序选择元素。@Joel(0,6)怎么样?为什么不考虑(0,6)…这是一个极端情况或最长情况sequential@Envious我的算法与您发布的算法不同。我知道这可以在LIS中解决,但这是O(NLogN)算法,我觉得更容易理解。我知道还有一件事可以用O(NLogN)解决,但这有点棘手。谢谢。我喜欢这个校样。更直观+1.
    
    b <= c
    
    b < d because d > c