【问题标题】:Longest sequence from an array such that following relation holds X[ i ] = X[ i-1 ] + X [ i-2 ]数组中的最长序列,使得以下关系成立 X[ i ] = X[ i-1 ] + X [ i-2 ]
【发布时间】:2019-08-08 06:11:34
【问题描述】:

这个问题是在考试中提出的。我们给出了一个大小为 n 的数组。

我们需要找到最长的序列,使其保持以下关系

如果 X 是最长序列比:

       X[i] = X[i-1] + X[i-2]

示例:a= [3,2,7,13,5,8,11,19]

比 X = [2,3,5,8,13]

我正在考虑一些动态逻辑,但我无法推导出关系。

【问题讨论】:

  • Sequence 通常假设没有重新排序。什么是确切的问题表述?
  • @MBo 我相信 subsequence 意味着没有重新排序,但是如果我们需要创建新的 sequence 我们可以使用任何顺序。
  • 相对于输入数组的序列确实必须遵守我假设的输入数组的顺序。在您的情况下,您似乎需要从满足特定关系的数组中按递增顺序排列的一组数字。
  • 是序列对应集合。
  • 并非如此,顺序就是顺序,这就是为什么您可以像X[i] 那样对其进行索引。通常,当我们被告知要找到子序列时,这意味着它应该保持初始顺序,例如1,31,2,3 的子序列,但 3,1 不是。

标签: arrays algorithm sequence dynamic-programming


【解决方案1】:

首先你对它进行排序得到2,3,5,7,8,11,13,19

接下来您从23 开始并检查它们的总和是否在数组中,它在那里,所以继续35,然后是58,然后是@ 987654328@,13。一旦你失败了,你就回溯并重新开始。

您可能希望使用哈希映射来加快在数组中的查找速度,或者只是在数组的剩余部分中进行二进制搜索。

【讨论】:

  • 因为哈希映射会占用空间,所以需要 O( n * n ) 或者如果我们进行二分查找,时间复杂度将为 O( n * n * log(n) ) 对吗??
  • @Jagan_ 哈希映射将占用 O(n) 空间。这很难计算这个算法的时间复杂度。虽然枚举所有这样的序列可能需要 O(n^3) 以防万一我们有全零的数组,但我们不需要枚举。我相信这个算法在实践中运行很快。
猜你喜欢
  • 2011-05-09
  • 1970-01-01
  • 2012-07-05
  • 2020-09-27
  • 2016-02-07
  • 1970-01-01
  • 2012-11-23
  • 2019-01-12
相关资源
最近更新 更多