【发布时间】:2018-05-08 02:08:07
【问题描述】:
我必须设计一个算法来比较两个相同长度的排序列表并返回它们之间的公共值的数量。
所以如果我有两个列表 a = [2, 9, 15, 27, 36, 40] 和 b = [9, 11, 15, 23, 36, 44],算法应该返回 3 的值两个列表中都有 9、15 和 36。
我知道使用集合可能会更容易,但由于我正在尝试学习数据结构和算法,所以我更愿意学习更长的时间(更难的方式)。
我当前的代码使用了目前不起作用的任何数组合并算法,因为我仍然对 r1 和 r2 感到困惑,尽管我认为它们将是数组中最正确的元素,但我不知道如何得到它。例如。 r1 = 40(来自列表 a)和 r2 = 44(来自列表 b)?
global a
a = [2, 9, 15, 27, 36, 40]
global b
b = [9, 11, 15, 23, 36, 44]
global c
c = []
def merge (a1, a, r1, a2, b, r2, c, list3):
i = a
j = b
k = c
r1 =
r2 =
while i <= r1 and j <= r2:
if a1[i]<=a2[j]:
a3[k] = a1[i]
i += 1
elif a3[k] >= a2[j]:
j += 1
k += 1
while i <= r1:
a3[k] = a1[i]
i += 1
k += 1
while j <= r2:
a3[k] = a2[j]
j += 1
k += 1
感谢您的帮助和反馈。
【问题讨论】:
-
一个简单的解决方案应该在 O(NlogN) 时间内是可行的。您在寻找什么样的解决方案?
-
@cᴏʟᴅsᴘᴇᴇᴅ 因为我正在使用合并排序算法,就时间复杂度而言,O(n log(n)) 不是最好的吗?如果不是,你会推荐什么?如果我错了,请原谅我还在学习这些东西。
-
既然列表已经排序了,为什么还要运行mergesort呢?我在想什么:如果您的列表不包含重复项,您可以遍历列表 1 并在列表 2 上进行二进制搜索。
-
由于这是一些家庭作业的一部分,讲师说要制定一个算法来执行图块建议的操作。他希望我们使用数组合并算法来比较两个列表并修改它以增加一个计数,如果有共同的值。
-
merge()只是O(n)- 你不需要merge_sort()。计算重复也只是O(n)
标签: python python-3.x algorithm array-merge