1. Когда я пишу большие программы, я использую длинные имена (из 10 или 20 символов) для глобальных переменных. В этой главе используются короткие имена переменных (тина х, n, t). В большинстве проектов допустимы имена не короче elem, nelems и target. Мне показалось, что короткие имена удобнее для тестовых программ и математических доказательств (вроде того, которое проводится в разделе 4.3). Аналогичные правила действуют в математике. Людям, незнакомым с предметом нужно говорить «квадрат гипотенузы прямоугольного треугольника равен сумме квадратов двух других сторон», но работающие над задачей люди обычно говорят просто «а квадрат плюс бэ квадрат равно цэ квадрат».
Я старался придерживаться стиля кодирования Кернигана и Ритчи, но помещал первую строку кода на одну строчку вместе с открывающей фигурной скобкой и вообще удалял лишние пустые строки для экономии бумаги (достаточно существенной для коротких функций, используемых в этой книге).
Двоичный поиск в разделе 5.1 главы 5 возвращает целое число, равное -1, если значение в массиве не найдено, либо указатель на это значение, если оно обиару- жено. Стив Макконнелл предположил, что программа поиска должна возвращать два значения: булевскую переменную, сообщающую о наличии или отсутствии элемента в массиве, и индекс этого элемента, используемый только тогда, когда значение булевской переменной истинно.
boolean BiпаrySearch(DataType ТаrgetValue. int *TargetIndex)
/* предусловие. Element[0] <= Element[l] <=
<= Element[NumElements-1] постусловие.
result == false =>
значения TargetVa1ие нет в массиве Element[0 NumElements 1] result == true =>
Element[^Target Index] == TargetValue*/
Листинг 18.3 на с. 402 книги Макконнелла (McConnell, Code Complete) занимает 1 страницу большого формата, а приведено в этом листинге не чю иное, как текст программы сортировки вставкой на языке Паскаль. Код и комментарии к нему занимают 41 строку. Такой стиль подходит для больших программных проектов. В разделе 11.1 главы 11 моей книги тот же алгоритм записан в пяти строках кода. Очень малая часть программ содержит средства проверки ошибок. В некоторых функциях данные считываются из файлов в массивы размера МАХ и функция scanf легко может вызвать переполнение буфера. Массивы, которые должны были бы передаваться функции в качестве параметров, сделаны вместо этого глобальными переменными.
На протяжении всей книги я пользовался сокращениями, допустимыми для учебников и тестовых программ, но не для больших программных проектов. Как Кер- ниган и Пайк отметили в разделе 1.1 своей книги (Kernighan, Pike, Practice of Programming), «ясность часто достигается краткостью». Даже несмотря па это, большая часть моих программ написана не в таком сжатом стиле, как, например, программа на C++ из раздела 14.3.
7. Для п=1000 поиск подряд идущих элементов выполняется в среднем за 351 не, а поиск в случайном порядке выполняется в среднем за 418 не (примерно на 20% медленнее). Для п=10б происходит переполнение кэша второго уровня, поэтому программа замедляется в 2,7 раза. Для оптимизированной программы двоичного поиска времена работы другие: при поиске элементов друг за другом время работы составляет 125 не, а при поиске в случайном порядке — 266 не, то есть работа замедляется более чем в два раза.
Опубликовал vovan666
April 17 2013 00:06:36 ·
0 Комментариев ·
3006 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.