2011-07-11 4 views
0

Мы читаем книгу, и мы должны хранить каждый персонаж этой книги с ее количеством.Выбор соответствующей структуры данных

, как: «Это, чтобы проверить» вне должно быть: T4 H1 I2 S3 O1 E1

Что будет наиболее подходящей структуры данных здесь и почему? и какова будет логика здесь.

+1

давайте сначала подумаем ... с какими структурами вы знакомы? что подходит лучше всего? – Nim

+0

Я не уверен, но Tree DS подойдет. –

+0

Если у этого q есть метка «домашняя работа»? –

ответ

3

Массив из ints прекрасно справится. Создайте массив, каждый индекс будет буквой алфавита (вы, вероятно, захотите хранить верхний и нижний регистр отдельно по основным причинам при сканировании книги). При сканировании инкрементируйте int в местоположении массива для этой буквы. Когда все будет готово, распечатайте все.

1

Основываясь на вашем описании, вам нужен простой хэш символов для их подсчета. Это связано с тем, что у вас есть только ограниченный набор символов, которые могут встречаться в книге (даже с указанием пунктуации, акцентов и специальных символов). Поэтому достаточно хэша с несколькими сотнями записей.

+1

Хеширование чудовищно перекомплексировано для этой проблемы imo. Скорость против простого char-indexed массива счетчиков будет ужасной. –

+0

достаточно честный - его чрезмерно сложный, но скорость, безусловно, не будет ужасно хуже. Они оба эффективны O (1). – manku

+0

Доступ к hashset намного сложнее, чем доступ к массиву, несмотря на то, что O (1). Просто пройдите код. –

1

Соответствующая структура данных будет std::vector (или, если вы хотите что-то встроенное, массив). Если вы используете C++ 0x, std::array будет работать хорошо.

Логика довольно проста - прочитайте символ (очевидно, конвертируйте в верхний регистр) и увеличивайте счетчик для этого элемента в массиве/векторе.

1

Выбор выбора структуры данных зависит не только от того, какие данные вы хотите хранить внутри структуры данных, но и более важно, какие операции вы хотите выполнять над данными.

Посмотрите на this отличная диаграмма, которая помогает решить, когда использовать контейнер STL.

Конечно, в вашем случае std :: array (C + 0x) или std :: vector, кажется хорошим выбором.

Смежные вопросы