【发布时间】:2020-12-07 02:22:27
【问题描述】:
我正在学习 python 并尝试使用 SvS 算法(小与小)相交 k 个集合(有序列表)。我的程序成功了,但我必须多次运行该函数,直到它到达交叉点。如果您能提示我做错了,我将不胜感激。
def SvS_BS(Set_list):
Set_list = sorted(Set_list)
candidato = Set_list[0]
answer_set = []
for S in Set_list:
lS=0
for S in Set_list:
for e in candidato:
b = BusquedaBinaria(S,0,len(S)-1,e)
if b == -1:
candidato.remove(e)
else:
lS += b
return candidato
注意:BusquedaBinaria 是二分搜索(是一种从排序的项目列表中查找项目的有效算法。它通过重复将列表中可能包含该项目的部分分成两半来工作,直到您缩小了范围可能的位置只有一个):
def BusquedaBinaria( lista, izq, der, x):
if der >= izq:
m = izq + ( der-izq ) // 2
if lista[m] == x:
return m
if lista[m] > x:
return BusquedaBinaria(lista, izq,m - 1, x)
return BusquedaBinaria(lista, m + 1, der, x)
return -1
如果我使用这些示例运行该函数:
A=[8, 316, 456, 802, 907, 1072, 1222, 1227, 1472, 1497, 1552, 1566, 1728, 2025, 2283, 2367, 2383, 2789, 3024, 3108, 3170, 3178, 3224, 3249, 3252]
B=[8, 1222, 10862, 18559, 28129, 41980, 43513, 44066]
第一个输出是:
SvS_BS([A,B])
output: [8, 907, 1222, 1552, 2283, 3024, 3224]
我再次运行该函数并得到:
output: [8, 1222, 3224]
最后我再次运行它并得到输出(这是预期的结果)
output:[8, 1222]
提前谢谢你能帮我在第一次执行中得到结果
【问题讨论】:
-
让您的问题自成一体。我们不知道
BusquedaBinaria是什么。 -
你是对的,对不起。对应二分查找。我将在几秒钟内编辑问题
标签: python list set intersection set-intersection