Предположим, у меня есть два списка A, B, таких, что A является подмножеством B. Если бы я должен был проанализировать точки B и каждый раз, когда я хочу проверить, является ли элемент членом A, представлял бы A как словарь лучше чем список? Я спрашиваю, потому что у меня сложилось впечатление, что словари имеют худшее время поиска O (1), тогда как для массивов это O (n).
То есть, что из следующего было бы более эффективным с точки зрения сложности времени?
# Code 1
A = [1, 2, 3]
B = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 1, 2, 3]
for i in B:
if i in A:
print (i)
else:
print (-1)
# Code 2
A = [1, 2, 3]
B = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 1, 2, 3]
A_dict = {}
for i in A:
A_dict[i] = 0
for i in B:
if i in A_dict:
print (i)
else:
print (-1)
Кажется, что если то, что я сказал о временных сложностях выше, верно, то первый код имеет сложность O (| B | x | A |), тогда как второй имеет сложность O (| B |). Это правильно?