Python 修改LIS算法以处理二维列表

Python 修改LIS算法以处理二维列表,python,list,Python,List,如何修改a,使其不在列表中包含条件a

如何修改a,使其不在列表中包含条件
a
,而是包含
a[0]

以下是我对算法的预期输入和输出:

输入:

1 1
2 6
4 3
5 4
输出:
[(1,1)、(4,3)、(5,4)]

下面是一些代码,说明了我要做的事情:

# Program to find the LIS of pairs

import sys

def find_longest(pair_list):
    # Find the longest subsequence of pair_list such that 
    #  if x is before y in the subsequence, then x[0] < y[0] and x[1] < y[1]
    # Input:  [(1, 1), (2, 6), (4, 3), (5, 4)]
    # Output: [(1, 1), (4, 3), (5, 4)]
    pass # How do I do this?

# Read the numbers
numbers = [int(i) for i in sys.stdin.read().split()]
# print(numbers)

# Turn the list into pairs
pairs = list(zip(*([iter(numbers)] * 2)))
# print (pairs)

solution = find_longest(pairs)
print (solution)
#查找对的列表的程序
导入系统
def find_最长(配对列表):
#查找配对列表的最长子序列,以便
#如果在子序列中x在y之前,则x[0]
一个列表中的简单lis如下所示:

x = [1,2,4,5]
r = [1]*len(x)
for i in range(len(x)):
    for j in range(i):
        if x[i]>x[j] :
            r[i]=max(r[i],r[j]+1)
print max(r)
x = [1,2,4,5]
y = [1,6,3,4]
r = [1]*len(x)
for i in range(len(x)):
    for j in range(i):
        if x[i]>x[j] and y[i]>y[j]:
            r[i]=max(r[i],r[j]+1)
print max(r)
要同时在两个列表中查找lis,只需添加以下条件:

x = [1,2,4,5]
r = [1]*len(x)
for i in range(len(x)):
    for j in range(i):
        if x[i]>x[j] :
            r[i]=max(r[i],r[j]+1)
print max(r)
x = [1,2,4,5]
y = [1,6,3,4]
r = [1]*len(x)
for i in range(len(x)):
    for j in range(i):
        if x[i]>x[j] and y[i]>y[j]:
            r[i]=max(r[i],r[j]+1)
print max(r)

该算法在O(n^2)中运行。我认为O(nlogn)算法不能用于两个列表。该算法使用二进制搜索来维护不同大小的解,为了做到这一点,它需要元素具有可比性。但是,如果有两个列表,就不能比较像
(2,5)这样的元素?(3,4)
因为其中一个增加,另一个减少。因此,您无法对它们进行排序,因此无法对其执行二进制搜索。

我不明白您在问什么。根据您给出的定义,您希望找到两个列表的元素,
a
b
,其中
a[x]
,但这根本不是您的输入/输出所显示的。