МЕНЮ:
Аналитик | Постановщик задач | Проектировщик | Программист | Программист БД
Инженер по тестированию | Тестировщик | Инженер по документированию
Инженер по внедрению | Инженер поддержки | Менеджер проекта | Менеджер подразделения
Менеджер по продажам | Менеджер по маркетингу | Администратор | Администратор БД
Литература | Контакты
\

Книга Жемчужены творчества программистов на IT БАЗАР

программистов, многие из ее уроков очень подходят для задач програм­мирования. Адаме определил концептуальную блокаду как "умозри­тельные стены, которые препятствуют человеку, решающему задачу, правильно понять задачу или представить себе решение". Над задачами 9 и 10 вам предстоит поломать голову.
Глава 2. Ага! АЛГОРИТМЫ
Активно работающему программисту изучение алгоритмов дает очень много. Курс по этому предмету вооружает студентов алгоритма­ми решения важных задач и методами разработки алгоритмов для наступления на новые задачи. В следующих главах мы увидим, как более совершенные алгоритмические средства оказывают существенное влияние на системы программного обеспечения, сокращая время разработки и увеличивая скорость выполнения программ.
Кроме того, алгоритмы играют существенную роль в решении общих задач программирования. В своей книге "Ага! Озарение" (Martin Gard­ner. Aha! Insight), откуда я бесстыдно украл заглавие, М. Гарднер упоми­нает о той роли, которую я имею в виду: "Задача, которая кажется сложной, может иметь простое, неожиданное решение". В отличие от более совершенных методов, ага! Озарение происходит не только после всестороннего изучения; оно доступно любому программисту, который готов серьезно подумать до, во время и после написания программы.
2.1. ТРИ ЗАДАЧИ
Но довольно общих рассуждений. Материал этой главы основывается на трех маленьких задачах; попытайтесь их решить перед тем, как читать дальше.
А. Имеется магнитная лента, содержащая не более миллиона 20-бито­вых целых чисел в случайном порядке. Требуется найти 20-битовое число, которого нет на ленте (должен иметься по меньшей мере один пропуск - кстати, почему?). Как бы вы решали эту задачу, имея а) ОЗУ достаточного объема; б) несколько лентопротяжек, но только пару дюжин слов в ОЗУ?
Б. Осуществите циклический сдвиг одномерного массива из N эле­ментов влево на I позиций. Например, при N = 8 и 1 = 3 вектор ABCDEFGH после сдвига превратится в вектор DEFGHABC. Чтобы вы­полнить эту работу за N шагов, простая программа использует проме­жуточный буфер из N элементов. Можете ли вы выполнить цикличес­кий сдвиг за время, пропорциональное N, используя только несколь­ко дополнительных слов памяти?
21


Страница №22
*
Зайцев нет
© "IT БАЗАР", 2003. Все права защищены. Создание: © "z-group" студия веб-дизайна, 2003.
Также может поискать работу на прямую в следуйщих организациях:
IT БАЗАР