Ребята, я думаю, мы могли бы использовать подход, подобный сортировке count. Мы могли бы создать массив размером 26. Этот массив не был бы обычным массивом, но был бы массивом указателей на связанный список, который имеет следующую структуру.
Узел структуры
{
char * ptr;
struct node * next;
};
struct node * names [26]; // Наш массив.
Теперь мы просканировали бы список за O (n) раз и соответствовали бы первому символу, который мы могли бы вычесть 65 (если ASCII-значение буквы находится в диапазоне 65 - 90). Ребята, я вычитаю 65, чтобы исправить письмо в массиве 26 размеров.
В каждом месте мы можем создать связанный список и можем хранить соответствующие слова в этом месте.
Теперь предположим, что если мы хотим найти все буквы, которые начинаются с буквы D, мы могли бы напрямую сделать это для расположения в массиве 3 (не нужно снова применять хэш-функцию), а затем проследовать связанный список, созданный до достижения нулевого значения.
И я думаю, что сложность пространства, необходимая для хеширования, будет такой же, как описанная выше, но хеширование также будет включать вычисление хэш-функции каждый раз, когда мы хотим вставить или найти слова, начинающиеся с той же буквы.