Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kernigan_paik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.91 Mб
Скачать

Упражнение 2-15

Напишите функцию для доступа к последовательным элементам хэш -таблицы в несортированном порядке.

Упражнение 2-16

Измените функцию lookup так, что если средняя длина списка превысит некое значение х, то массив автоматически расширяется в у раз и хэш-таблица перестраивается.

Упражнение 2-17

Спроектируйте хэш-функцию для хранения координат точек в дву­мерном пространстве. Насколько легко ваша функция адаптируется к изменениям в типе координат, например при переходе от целого типа данных к значениям с плавающей точкой, или при переходе от декартовой к полярной системе координат, или при увеличении количества измерений?

2.10. Заключение

При выборе алгоритма нужно сделать несколько шагов. Во-первых, следует изучить существующие алгоритмы и структуры данных. Поду­майте, какой объем данных может обработать программа. Если задача предполагает скромные размеры данных, то выбирайте простые техно­логии; если количество данных может расти, то исключите решения, плохо приспосабливающиеся к этому росту. Там, где возможно, исполь­зуйте библиотеку или специальные средства языка. Если ничего готово­го нет, то напишите или достаньте короткую, простую, понятную реали­зацию. Попробуйте ее в действии. Если измерения показывают, что она слишком медленная, только тогда вам стоит перейти к более продвину­тым технологиям.

Хотя есть много структур данных, часть которых просто необходима для приемлемой производительности в определенных условиях, боль­шинство программ основано на массивах, списках, деревьях и хэш-таб-лицах. Каждая из этих структур поддерживает набор операций-прими­тивов, обычно включающий в себя: создание нового элемента, поиск элемента, добавление элемента куда-либо, возможно, удаление элемен­та и применение некоторой операции ко всем элементам.

У каждой операции есть ожидаемое время выполнения, которое часто определяет, насколько выбранный тип данных или его реализация под­ходит для конкретного приложения. Массивы предоставляют доступ к элементам за константное время, но зато плохо изменяют свой размер. Списки хорошо приспособлены для вставки и удаления, но случайный доступ К'элементам происходит лишь за линейное время. Деревья и хэш-таблицы предоставляют разумный компромисс: быстрый доступ к за­данным элементам в сочетании с легкой расширяемостью, пока в их структуре соблюдается определенный баланс.

Есть еще множество изощренных структур данных для специальных задач, однако этот базовый набор вполне достаточен для написания по­давляющего большинства программ.

Дополнительная литература

Серия книг "Алгоритмы" Боба Седжвика (Bob Sedgewick. Algorithms. Addison-Wesley) содержит доступные сведения о большом числе полез­ных алгоритмов. В третьем издании "Алгоритмов на C++" (Algorithms in C++, 1998) идет неплохое обсуждение хэш-функций и размеров хэш-таблиц. "Искусство программирования" Дона Кнута (Don Knuth. The Art of Computer Programming. Addison-Wesley) — первейший источник для строгого анализа многих алгоритмов; в третьем томе (2ed., 1998) рас­сматриваются поиск и сортировка.

Программа Supertrace описана в книге Джерарда Холзманна "Дизайн и проверка протоколов" (Gerard Holzmann. Design and Validation of Computer Protocols. Prentice Hall, 1991).

Ион Бентли и Дуг Мак-Илрой описывают создание скоростной и ус­тойчивой версии быстрой сортировки в статье "Конструирование функ­ции сортировки" (Jon Bentley, Doug Mcllroy. Engineering a sort function. Software - Practice and Experience, 23, 1, p. 1249-1265, 1993).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]