Как я могу хэшировать несколько неупорядоченных объектов? (строки)
Я ищу способ получить хеш-значение из группы строк, чтобы независимо от порядка строк возвращался один и тот же хеш.
Я думаю, что одним из способов будет сортировка их перед хэшированием. Но мне интересно, есть ли что-то более элегантное.
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 и сравнить их с каждым элементом вашей таблицы поиска.