Являются ли массивы или наборы для небольших входных пространств быстрее при проверке членства? - PullRequest
1 голос
/ 06 мая 2019

Этот вопрос меня давно беспокоит: если я проверяю членство и у меня всего <10 элементов, хэш-карта все еще самая быстрая опция? Другими словами, когда N гарантированно равно <strong>small , какая из этих операций Python быстрее:

x in [1,2,3,4,5,6,7,8,9]

x in {1,2,3,4,5,6,7,8,9}

Моя интуиция заключается в том, что вычисление хеша будет неэффективным для небольших входных пространств.

1 Ответ

1 голос
/ 08 мая 2019

Наборы менее эффективны, чем массивы для небольшого пространства поиска.Я запустил тест, который проверяет членство элемента в наборе и в массиве по 10000 раз каждый.Элемент отсутствует, поэтому он должен проверить весь массив.Результаты:

1000 элементов
Время для набора: 1.06799983978
Время для массива: 4.13400006294

100 элементов
Время для набора: 1.05599999428
Время для массива: 1.19999980927

70 элементов
Время для набора: 1.09599995613
Время для массива: 1.09200000763

10 элементов:
Время для набора: 1.1360001564
Время для массива:0.927999973297

Таким образом, для проверки принадлежности элемента к набору менее чем из 70 элементов использование массива более эффективно, чем использование наборов.

...