2016-12-17 24 views
1

Проверить, является ли arr2 подмножеством. Входной сигнал: arr1[] = {11, 1, 13, 21, 3, 7}, arr2[] = {11, 3, 7, 1} Выход: arr2[] является подмножеством arr1[]Подмножество массива с использованием хеширования

Если мы используем линейное зондирование. Hashtable будет выглядеть так: {0=7, 1=1, 2=13, 3=21, 4=3, 5=11} где первый элемент является индексом (хешированный код) вторым значением Если вы видите для элемента 7. Хэш-код - 7%6=1. Поэтому из 1 он должен пройти полную хэш-таблицу, проверив каждое ведро. Здесь Сложность времени - O (n)

Позже мы будем искать все элементы в arr2 с hashtable.

Таким образом, общая временная сложность будет равна Len (arr2) * O (n).

В чем преимущество хэширования?

ответ

0

Наилучшая ситуация поиска в хэш-таблице не O (n), а O (1). Поэтому в лучшем случае вы получите сложность Len (arr2) * O (1) => Len (arr2), и мы можем рассматривать ее как O (1). С другой стороны, наихудшая сложность - это действительно O (n). Итак, вы должны посмотреть на амортизированную стоимость всего алгоритма, который будет ниже, чем O (n)

+0

Как вы можете сказать, общая сложность как O (1). Лен (arr2) будет N. Он должен пройти полный массив. –

+0

Я знаю материал, который вы упомянули. Но сделайте сухой пробег для этого случая. вам нужно будет пройти полную хеш-таблицу и вернуться к 0. Таким образом, O (n) является сложностью. Итак, общая сложность: O (M * N) –

+0

Хорошо, мы можем представить Len (1) как n и Len (2) как m, чем в наилучшей общей сложности будет O (m), в лучшем случае это будет O (mn), но амортизированная сложность будет меньше O (mn). Это случай, если вы не будете использовать хеш-таблицу, это будет O (mn) –