Хеширование + LZ78 - C#
Формулировка задачи:
Нужна помощь в составлении алгоритма.
Имеется реализованный словарный метод сжатия LZ78. Необходимо сделать так, чтобы словарь хранился в хеш-таблице, при этом используя аддитивный метод хеширования и метод цепей в качестве метода устранения коллизий. Вопросы:
1) Подойдёт ли для реализации данной задачи класс C# Hashtable? Либо нужно создавать хеш-таблицу самому?
2) Как реализовать само хеширование, используя хеш-функцию(аддитивный метод) и метод цепей для устранения коллизий?
Ниже описываю мой вариант реализации хеш-функции аддитивным методом(не факт, что правильная, просьба поправить, если имеются ошибки):
// хеш-функция: аддитивный метод
unsafe public static int Hash(string key, int m)
{
int s, lngth;
s = 0;
lngth = key.Length;
if (lngth < 2)
s = key[0];
else
s = key[0] + key[lngth - 1];
return s % m;
}Решение задачи: «Хеширование + LZ78»
textual
Листинг программы
using System.Security.Cryptography;
public static byte[] GetHash(string inputString)
{
HashAlgorithm algorithm = MD5.Create(); //or use SHA1.Create();
return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
public static string GetHashString(string inputString)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in GetHash(inputString))
sb.Append(b.ToString("X2"));
return sb.ToString();
}