Sobes.tech
Middle — Senior
23

Реализовать алгоритм соединения последовательностей, например hash join?

Companies where asked
AvitoAvito

Answer from AI

sobes.tech AI

Hash join — алгоритм соединения двух последовательностей (таблиц) по ключу с использованием хеш-таблицы для эффективного поиска совпадений.

Принцип работы:

  1. Выбирается одна из таблиц (обычно меньшая) и строится хеш-таблица по ключу соединения.
  2. Проходится вторая таблица, для каждого элемента ищутся совпадения в хеш-таблице.
  3. Совпадающие записи объединяются и добавляются в результат.

Пример на C#:

var left = new List<(int Key, string Value)> { (1, "A"), (2, "B"), (3, "C") };
var right = new List<(int Key, string Value)> { (2, "X"), (3, "Y"), (4, "Z") };

// Строим хеш-таблицу по ключу из левой последовательности
var hashTable = new Dictionary<int, List<string>>();
foreach (var item in left)
{
    if (!hashTable.ContainsKey(item.Key))
        hashTable[item.Key] = new List<string>();
    hashTable[item.Key].Add(item.Value);
}

// Проходим по правой последовательности и ищем совпадения
var result = new List<(int Key, string LeftValue, string RightValue)>();
foreach (var item in right)
{
    if (hashTable.TryGetValue(item.Key, out var leftValues))
    {
        foreach (var lv in leftValues)
        {
            result.Add((item.Key, lv, item.Value));
        }
    }
}

// result содержит соединённые записи по ключу

Такой подход эффективен при больших объемах данных и широко используется в системах обработки данных и машинном обучении.