Алгоритм объединения ha sh, на который вы ссылаетесь, в основном работает, создав таблицу поиска для одной из таблиц, а затем перебирая другую таблицу. Существуют алгоритмы двойного ха sh, в которых обе таблицы хэшируются, но это не то, на что вы ссылаетесь.
Зачем циклически проходить по меньшей таблице? Рассмотрим проделанную работу:
- Создание таблицы ha sh: чтение и запись одной таблицы.
- Обработка другой таблицы: чтение другой таблицы.
- Заключительная работа: выписка набора результатов
Примечание: это упрощение реальной работы, предполагая, что таблица ha sh помещается в память и игнорируя коллизии ha sh.
Шаг (3) будет выполнять одинаковый объем работы независимо от того, какая таблица хэшируется.
Однако первые два в основном:
<read one table> + <write one table> + <read the other table>
То есть одна таблица читается и записывается, поэтому она считается дважды. Другой только для чтения. Вы оптимизируете это, обрабатывая таблицу SMALLER как ha sh.
Кроме того, меньшая таблица с большей вероятностью помещается в памяти. И менее вероятно, что у него будет sh столкновений.
В общем, лучше иметь sh меньшую таблицу.