Как я могу хэшировать несколько неупорядоченных объектов? (строки)

Я ищу способ получить хеш-значение из группы строк, чтобы независимо от порядка строк возвращался один и тот же хеш.

Я думаю, что одним из способов будет сортировка их перед хэшированием. Но мне интересно, есть ли что-то более элегантное.

1 ответ

допустим, ваши строки содержат только строчные буквы английского алфавита (az), так что

  • лорем
  • ипсум
  • сидеть
  • амет

Здесь вы можете сделать простую гистограмму символов для каждого столбца. символы будут индексами, а значение массива будет номером этого символа. как

      vector <int> _1st_column_hist (26,0);
_1st_col_hist['l' - 'a'] => 1
_1st_col_hist['i' - 'a'] => 1
_1st_col_hist['s' - 'a'] => 1
_1st_col_hist['a' - 'a'] => 1

//other values will be 0.

Сделайте то же самое для других столбцов (или буквенных индексов). Наконец у вас будет 2D вектор. Чтобы уточнить:

      vector< vector<int> > my_vector( 0, vector<int> (26, 0));
my_vector[1][25] => is the number of 'z' in second position of all words in your group.

ХОРОШО! где хэш таблица? Должен сказать, что ваш вопрос больше связан с гистограммой, чем с хешированием.

Этот двумерный вектор предназначен для одной группы строк. Я предполагаю, что у вас есть несколько групп, поэтому вашему вектору нужно другое измерение. Чтобы проверить, есть ли в нашей таблице поиска новая группа строк, вам нужно написать функции group_of_strings_2_hist и compare_hist_with_old_ones и сравнить их с каждым элементом вашей таблицы поиска.

Другие вопросы по тегам