2016-11-24 2 views
2

У меня есть двумерный массив букв. Любая буква может варьироваться в зависимости от определенного алфавита. Я хочу создать уникальный ключ для этого массива в соответствии с буквами и его положением. Например, если массив 3 * 3 и алфавит {0, а, б, в, *}, массив может быть в форме, как:Уникальный ключ для двумерного массива букв

0 b c 
b * a 
a a 0 

Я попытался Key = sum(code(letter)*(r*3+c)) для всех г и c, где r и c - строка и столбец, но он все равно дает мне тот же ключ для разных форм массива.

Что мне не хватает?

P.S. code(letter) - это функция отображения для преобразования буквы в значение.

+0

Вам действительно нужно получить уникальный ключ? Почему бы вам не использовать хеш-таблицу, которая позволяет столкновения? – Barmar

+0

Это хороший выбор, я могу думать об этом, если идея уникального ключа невозможна. –

ответ

3

Необходимо учитывать размер алфавита. Если код и индексы равны нулю на основе было бы:

key = Sum(code(letter)*pow(L, r*C+c)) 

, где L представляет собой количество букв и C это число столбцов. Однако следите за числовым переполнением. Для более крупных алфавитов или матриц вам необходимо использовать один из следующих вариантов:

  • Устраняет требование уникальности ключей и использует хэш (хэш-сумматор).
  • Тип большего числа для ключа или даже неограниченного арифметического типа, например, GMP lib.
  • Сжатие, такое как arithmetic coding, если распределение букв даже не определено. Однако вы по-прежнему рискуете не в состоянии подгонять/сжать конкретную матрицу в ключ.
+0

Это прекрасно, но это можно использовать только для небольшого алфавита и небольших массивов. Если алфавит имеет более 20 символов, а массив больше 5 * 5, то я не могу использовать эту функцию. –

+0

@NagyFathy, если вы хотите присвоить уникальные номера объектам в наборе с миллиардами миллиардов членов, вам придется иметь дело с большими числами; это не так. Как спрашивает комментатор, вам действительно нужен уникальный номер для каждого другого экземпляра? – AakashM

+0

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

Смежные вопросы