交替子序列的在线算法方法
Posted
技术标签:
【中文标题】交替子序列的在线算法方法【英文标题】:Online Algorithm approach for alternating subsequence 【发布时间】:2019-12-25 23:02:42 【问题描述】:考虑一个整数序列A = a1, a2, a3, ... an。 A 的子序列 B 是从 AB = b1, b2, .... ,bn /strong> 通过删除一些元素但保持顺序。给定一个整数序列A,目标是计算一个交替子序列B,即一个序列b1, ... bn,使得对于所有i 在 2, 3, ... , m-1 中,如果 bi-1 bi+1 并且如果 b i-1 > bi 然后 bi
考虑一个在线版本的问题,序列A是逐个元素给出的,每次都需要直接决定是否在子序列中包含下一个元素乙。是否有可能实现恒定的竞争比率(通过使用确定性在线算法)?要么给出一个达到恒定竞争比的在线算法,要么证明不可能找到这样的在线算法。
假设序列 [9,8,9,8,9,8, .... , 9,8,9,8,2,1,2,9,8,9, ... , 8,9 ,8,9,8,9]
我的论点: 该算法必须立即决定是否将传入的数字插入到子序列中。如果算法现在得到数字 1 然后 2 然后 2 它将最终确定它们是序列的一部分,因此非线性因子比 n-3 的最优解更差。
-> 没有恒定的竞争力!
这是一个适当的论证吗?
【问题讨论】:
【参考方案1】:如果我理解您的意思,您的论点是正确的,但您在示例中给出的顺序是错误的。例如,该算法可能会选择所有 9 和 8。 您可以稍微改变您的论点以使其更准确,例如考虑序列
3,4,3,4,3,4,......, 1/5,2/6,1/5,2/6,....
说明:
您以3,4,3,4,...
等开始序列,直到算法选择两个数字。如果它从来没有,它显然没有竞争力(它从n
中得到0/1
)
如果算法选择了3
,然后选择了4
,则该算法接下来必须采用小于4
的数字。通过继续使用5,6,5,6,...
,算法不能再取另一个数字。
如果算法选择使用4
然后是3
,通过类似的共鸣,我们可以很容易地看到继续使用1,2,1,2,...
如何防止算法使用另一个数字。
因此,在任何情况下,对于每个 n
,该算法都不能超过 2
数字,正如您所说,这不是一个恒定的竞争比率。
【讨论】:
感谢您的回复。我认为您的论点是基于在线对手模型。您更改 ALG live 的输入以使其足够糟糕。在线对手的竞争比率适用于不知情的对手。如果我们把对手变成一个健忘的对手,难道就不能有一个恒定的竞争比吗?在这种情况下是否足以表明对于任何对手模型都没有恒定比率? 这不是在线对手模型,而是您考虑的相同模型。由于算法是确定性的,攻击者“模拟”算法以查看它会选择哪些数字,然后攻击者将按照我描述的方式构建序列。 知道了,序列的顺序不是任何随机因素的一部分。在 ALG 开始之前,算法选择的数字已经很清楚了,因此在没有任何随机化的情况下,可以通过选择您的提及序列使确定性算法变得“无用”。以上是关于交替子序列的在线算法方法的主要内容,如果未能解决你的问题,请参考以下文章
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是多少? 中位数的定义为上中位数, [1,