Хеширование + 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();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5