【问题标题】:Algorithm that gets the largest sorted sub array from an array从数组中获取最大排序子数组的算法
【发布时间】:2012-11-08 14:06:30
【问题描述】:

我正在尝试在 C 中做某事,我需要一种算法来返回另一个数组中包含的最大维度排序数组。因此,例如,如果我有以下数组:

A[5] = {5, 2, 3, 1, 4}

它应该返回:

2, 3, 4

我想不出任何有效的实现。有什么想法吗?谢谢你。 :)

【问题讨论】:

标签: c arrays algorithm sorted


【解决方案1】:

您的问题被称为“longest increasing subsequence”。

利用dynamic programming 的算法可以是found here, with a good explanation。它的最优渐近复杂度为O(nlogn)

基本思想是,您跟踪长度为i 的子序列的最佳可能的最后一个元素(或者更确切地说是其索引)。处理下一个元素时,检查数组m 以查看是否有

  • 找到了一个更好(即更小)可能的最后一个元素,长度为i
  • 否则,您会发现比目前更长的序列。

【讨论】:

    【解决方案2】:

    来自最长递增子序列的维基百科页面:

     L = 0
     for i = 1, 2, ... n:
        binary search for the largest positive j ≤ L
          such that X[M[j]] < X[i] (or set j = 0 if no such value exists)
        P[i] = M[j]
        if j == L or X[i] < X[M[j+1]]:
           M[j+1] = i
           L = max(L, j+1)
    

    这不是 C,但应该很容易用 C 编写代码。

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2013-06-26
      • 1970-01-01
      相关资源
      最近更新 更多