所以我有这样的问题 - 我有一些k元组,每个元组由1到10个整数均匀分布到两个“子阵列”组成(所以1 2 3 4 5< => 6 7例如,8 9 10)。我想要做的是找到第一行中是否存在这样的一对(2元素组合,排列无关紧要),它总是一起出现(在同一侧,如果相邻则无关紧要或者不是)在后面的行中(例如,在上面的例子中,如果我们还有3 4 2 8 1< => 5 6 7 9 10作为第二个输入行,那么条件将是真的(1 ,2)总是一起出现,(3,4)等等也是如此 - 然而,一对这样的一对就足够了。另外,第(4,5)条婚姻被第二行打破,因为5在另一边而不是4 )。
创建初始组合数组不应该太时间构建,但是有没有更快的方法来检查是否有任何“对”被破坏(在一侧找不到)而不是构建“交叉数组”2元素每个传入行的组合表,然后将其中的每个元素与已构建的初始对进行比较?这声音真的很慢,n ^ 2至少可以说。有人有什么想法吗?我无法想象其他任何方式。
EDIT& FIXED:好的,我很抱歉,因为看起来我的非正式描述,轻描淡写,令人困惑:)这里有更正式的东西,然后 - 我希望现在它'要清楚问题的关键是:
我们给出了1行k个整数作为输入。每一行包括{1,2,...,k}序列的一些排列。我们将每行中的第一个k / 2整数视为“左”,将其他整数视为“右”。是否有任何整数x,y使得对于任何选定的线,它们总是位于同一侧(左侧或右侧),但不必在同一侧从上到下(即1 2 - 3 4,3 4 - 1 2履行婚姻,因为1 2和3 4总是在一起 - 一次在左边,一次在右边。)
第二次编辑经过一些更多的打击之后,蛮力比较组合的想法似乎完全没有意义。假设我们有k = 100,000 - 那么,我们必须在第一行输入之后管理近25亿个元素 - 然后,想象为第二行构建一个类似数量级的数组,并进行所有比较在第二行之后肯定没有结婚的那些。这需要很长时间,不是吗?
我想到了以某种方式总结双方的列,但这使得算法侧面依赖(即1 2 - 3 4将不同于4 3 - 2 1,它不是)...事实上,所有的我的想法最终会依赖于侧面。怎么能用呢?