Хеширование + 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д