【问题标题】:Sequence of numbers with constraints带约束的数字序列
【发布时间】:2017-02-24 20:28:57
【问题描述】:

我有一个正数序列 x_1,x_2,...x_n,我想找到一个连续的子序列,其中: 0

例如如果 S(t) = 3 则上述适用于 x_t,x_{t-1},x_{t-2}

我正在尝试找到一个递归公式,但我完全被卡住了。为了找到一些规律,我试着玩弄一下数字:

S(5) = 2 意味着 S(5) = 2 + S(4) 和 S(4) 必须是 $0$。但是也许 S(3) 可能是 1,所以我们必须尽快停止我们发现 S(4) = 0

基本情况或特殊情况 S(0) = 0 ,S(1) = 0?

S(k) 可以写成 S(k-1) 吗?

我正在尝试为此构建一个算法,但首先我需要找出一个递归公式。

【问题讨论】:

  • 你能举例说明“连续子序列”和“数字”是什么意思吗?从名字上看,应该是连续整数——比如,0、2、3、4、5、4的最大连续子序列就是2、3、4、5。但这并不满足您提供的定义。
  • 在您的重复中,1 的序列似乎无效。这是错误的还是故意的?它肯定与通常的序列定义相矛盾。

标签: algorithm


【解决方案1】:

S(0) = 0
如果 (x_n = 1) => S(n) = 0
否则如果 S(n-1) = 0 => S(n)=2
否则 S(n) = S(n-1) + 1

【讨论】:

  • 不确定结果是否会是 1 而不是 0 int 问题'基本情况或特殊情况 S(0) = 0 ,S(1) = 0' 所以看起来函数会有 0 ,2,3... 结果但从不 1
  • 没有注意到这个调整。我想这需要 OP 澄清一下。
【解决方案2】:

由于比较运算符的简单关系,这个问题不需要动态规划或递归:它是传递的。这意味着:

a < b and b < c => a < c

我们可以稍微改造一下上面的不等式:

x_i - x_j < i - j
x_i - i < x_j - j

这让整个问题变得简单多了:
定义一个序列y,其中y_i = x_i - i。找到以y_t 结尾的最长严格递减序列。

由于严格递减序列的传递性,您的条件始终成立,反之亦然。事实上,这两个约束在这种情况下是等价的,因为不可能有一个既减少又不违反序列约束的约束。所以在这种情况下根本不需要递归,因为线性关系是完全足够的(传递性)。

当然,您可以将这个对第一个非递减对的搜索转换为递归函数(尽管它比仅仅走线性路径更复杂):

S(t) = {t = 0:                             0
        t = 1:                             1
        {x_t - t >= x_{t-1} - (t - 1)}:    1
        else:                              1 + S(t - 1)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多