在最大组合长度的数组中找出多个非相交增量序列

时间:2015-08-04 13:03:37

标签: arrays algorithm language-agnostic

有一个已知问题"Longest increasing subsequence",它是:给定一个整数数组,找出该数组中增长最长的序列。我现在面临一个类似但显然更复杂的问题:给定一个整数数组和一个给定的数字N,在该数组中找到N个序列,使它们每个都在增加,它们不会与索引相交,它们的总和长度是最大的

到目前为止,我已经尝试了#34;贪心"算法符合以下几行:

  1. 使用最长的增加子序列算法,将该序列从数组中抛出,重复N次,提供找到的序列作为结果。如果设计N = 1,则工作在几个奇怪的情况下,但是对于混洗数组返回不正确的结果,例如由N个增加的子序列构成的数组。
  2. 构造多个序列,将每个元素添加到现在最长的子序列中。显然有缺陷,因为它发现" substrings"比延长的序列更常见。
  3. 构造多个序列,将每个元素添加到具有最大最后元素的序列中。这样做效果更好,至少如果已知一个数组包含N个增加的子序列,该算法会正确地返回完整数组,但它一般不能正常工作,因为它不会按原样消耗N.
  4. 还有其他想法吗?

    如果你想玩大小合适的样本数据,这里有一个数组:

    from datetime import datetime
    
    _defaults = {
    'date_start': datetime.now().strftime("%Y-%m-%d") + " 08:00:000",
    }
    
    ### Suppose user will input start date in date_start field then your code should be like this,
    def create(self, cr, uid, vals, context=None):
        date = vals.get('date_start',False)
        if date:
            vals.update({'date_start':date.strftime("%Y-%m-%d") + " 08:00:000"})
        return super(class_name, self).create(cr, uid, vals, context=context)
    

    这是一个由3个随机增加子序列构成的数组,每个子序列具有重叠范围,每个子序列的长度为100,因此使用N = 3的适当算法处理此数组应返回完整数组,N = 1,答案应为123 ,并且对于N = 2,不小于222.(真值但尚未确定)

0 个答案:

没有答案