Хеш-функция для коротких строк

ПРАВОВАЯ ОГОВОРКА: чтение комментирует ниже тщательно, и я предполагаю, что Вы уже прочитали принятый ответ. Поскольку я сказал почти 5 лет назад:

, если у кого-либо есть какие-либо комментарии для добавления для ситуаций, когда это не верное или оптимальное решение тогда, прокомментируйте ниже

<час>
  • Щелчок правой кнопкой по имени базы данных.

  • Избранные Задачи в †’ Уменьшают в †’ База данных

  • Тогда щелчок хорошо !

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

я был на самом деле вполне удивлен, что это работало! Обычно я использовал DBCC прежде, но я просто попробовал это, и он ничего не уменьшал, таким образом, я попробовал GUI (2005), и он работал отлично - освобождающий 17  ГБ за 10 секунд

В полном режиме восстановления, это не могло бы работать, таким образом, необходимо или создать резервную копию журнала сначала, или измениться на Простое восстановление, затем уменьшить файл. [спасибо @onupdatecascade для этого]

-

пз: Я ценю то, что некоторые прокомментировали относительно опасностей этого, но в моей среде у меня не было проблем, делающих это самого тем более, что я всегда делаю полное резервное копирование сначала. Поэтому учтите то, что Ваша среда, и как это влияет на Вашу стратегию резервного копирования и обеспеченность работой перед продолжением. Все, что я делал, указывало на людей на функцию, обеспеченную Microsoft!

9
задан Elazar Leibovich 5 August 2009 в 13:30
поделиться

5 ответов

Попробуйте минимальное идеальное хеширование :

Минимальное идеальное хеширование гарантирует, что n ключей будут отображаться в 0..n-1 без каких-либо конфликтов.

C код включен.

8
ответ дан 4 December 2019 в 11:07
поделиться

Хм, всего 256 возможных значений, так как вы проанализируете свой исходный код, чтобы узнать все возможные функции, возможно, лучший способ сделать это - присвоить номер каждой вашей функции ?? ?

Настоящая хеш-функция, вероятно, не будет работать, потому что у вас есть только 256 возможных хешей. но вы хотите отобразить по крайней мере 26 ^ 15 возможных значений (при условии, что имена функций состоят только из букв и без учета регистра). Даже если вы ограничите количество возможных строк (применив некоторое обязательное форматирование), вам будет сложно получить как значимые имена, так и действительную хеш-функцию.

3
ответ дан 4 December 2019 в 11:07
поделиться

Вы можете использовать дерево Хаффмана для сокращения имен ваших функций в соответствии с частотой их использования в вашей программе. Наиболее распространенная функция может быть сокращена до 1 бита, менее распространенная - до 4-5, очень редких функций - до 10-15 бит и т. Д. Дерево Хаффмана не очень сложно реализовать, но вам придется что-то делать с выравниванием битов.

Huffman tree

3
ответ дан 4 December 2019 в 11:07
поделиться

Если у вас есть способ отслеживать функции внутри вашего кода (т.е. текстового файла, созданного во время выполнения) вы можете просто использовать ячейки памяти каждой функции. Не совсем байт, но меньше всего имени и гарантированно уникален. Это дает дополнительное преимущество в виде низких накладных расходов. Все, что вам нужно для «декодирования» адреса, - это текстовый файл, который сопоставляет адреса с реальными именами; это может быть отправлено в удаленное место или, как я уже упоминал, сохранено на локальной машине.

2
ответ дан 4 December 2019 в 11:07
поделиться

Нет, его нет.

Вы не можете создать хэш-код без конфликтов, или даже близко к нему, всего с восьмибитным хешем. Если вы разрешаете строки длиннее одного символа, у вас будет больше возможных строк, чем возможных хэш-кодов.

Почему бы просто не извлечь имена функций и не присвоить каждому имени функции идентификатор? Тогда вам понадобится только таблица поиска на каждой стороне провода.

3
ответ дан 4 December 2019 в 11:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: