对列表进行排序与​​排序两个子列表

时间:2014-08-30 18:15:14

标签: sorting

我在列表中找到了明确的最小元素。要做到这一点,我已经对列表进行了排序,然后只选择了第一个,如果它小于第二个。

现在我有两个子列表而不是一个大列表。如果我在两个子列表上执行相同的过程,然后合并结果(只是有效地将它们排序为一个双元素列表),是否可以保证产生与在一个大列表中排序相同的结果?

目前,对于单元素列表,没有第二个元素不小于,因此我将其视为唯一的最小元素。

2 个答案:

答案 0 :(得分:1)

让我们分析算法。有三种情况:

1。一个列表具有唯一的最小元素,但其他列表没有,例如:

a)[2, 3, 3] - 唯一的最小元素:2

b)[1, 1, 2] - 没有这样的元素

合并结果:[2] - 唯一最小元素:2

大名单:[1, 1, 2, 2, 3, 3] - 没有这样的元素

所以在这种情况下结果不一样 - 失败

2。两个列表都没有唯一的最小元素:

在这种情况下显然结果相同(没有这样的元素) - 确定

3。两个列表都有唯一的最小元素:

a)[a1, a2, ...] - 有a1< a2和a1 - 唯一的最小元素

b)[b1, b2, ...] - 那里b1< b2和b1 - 唯一的最小元素

如果a1 = b1则:

合并结果:[a1, b1] - 没有唯一的最低

大名单:[a1, b1, ...] - 没有唯一的最低要求

如果a1< b1(与a1> b1相同的逻辑)然后:

合并结果:[a1, b1] - 唯一最小元素:a1

大列表可以是[a1, b1, ...][a1, a2, ..., b1, ...] - 唯一的最小元素:a1因为a1< b1和a1< A2

所以在这种情况下结果相同 - 确定

结论和提案

该算法仅在第一种情况下失败,因此可以轻松改进。

我的改进建议:

当一个列表具有唯一的最小元素而其他列表没有时,因此结果会合并三个元素:来自一个列表的唯一最小元素(a1)和来自其他列表的两个最小元素(b1 = {{1} })。

改进分析:

如果a1 = b1,那么在合并结果和大列表中的结果相同(没有唯一的最小值)。

如果a1< b1然后:

合并结果:b2 - 唯一最小元素:[a1, b1, b2]

大列表可以是a1[a1, b1, b2, ...] - 唯一的最小元素:[a1, a2, ..., b1, b2, ...]因为a1< b1和a1< A2

如果a1> b1然后:

合并结果:a1 - 没有唯一的最小值,因为b1 = b2

大名单:[b1, b2, a1] - 没有唯一的最小值,因为b1 = b2

结果相同 - 确定

修改后的算法适用于所有三种情况!

答案 1 :(得分:0)

不,或者至少不是简单的。如果您的代码目前返回最小值或最小值,则不是唯一的#34;指标,然后它没有提供足够的信息。如果输入以下列表:

list1 = [1, 1]
list2 = [0]

然后在list1上运行您的程序只会告诉您最小的不唯一,并且您无法告诉两个列表一起具有唯一的最小值0。

如果您的代码返回最小值以及它是否唯一的指示符,您可以通过一些案例来完成:

min1, min1unique = uniquemin(list1)
min2, min2unique = uniquemin(list2)

if min1 == min2:
    return min1, False
elif min1 < min2:
    return min1, min1unique
else:
    return min2, min2unique

我建议先将列表合并到一个列表中。另外,我建议避免排序:

minimum = min(l)
minimum_is_unique = l.count(minimum) == 1