4.2.4. Компактность и единый жесткий центр

4.2.4. Компактность и единый жесткий центр

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

Формализация часто радикально проясняет задачу. Программисту не достаточно определить, что части поставленной перед ним задачи попадают в стандартные категории компьютерной науки — поиск и быстрая сортировка. Наилучшие результаты достигаются в том случае, когда можно формализовать суть задачи и сконструировать ясную модель работы. Вовсе не обязательно, чтобы конечные пользователи поняли данную модель. Само существование унифицирующей основы обеспечит ощущение комфорта, когда работа не затруднена вопросами типа "а зачем они сделали это", которые так распространены при использовании универсальных программ.

Дуг Макилрой.

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

Вероятно, наиболее ясным примером таких средств является программа diff(1), средство Unix для составления списка различий между связанными файлами. Данное средство и спаренная с ним утилита patch(1) определили стиль распределенной сетевой разработки современной операционной системы Unix. Очень ценным свойством программы diff является то, что она нечасто удивляет пользователей. В ней отсутствуют частные случаи или сложные граничные условия, поскольку используется простой, математически совершенный метод сравнения последовательностей. Из этого можно сделать ряд выводов.

Благодаря математической модели и цельному алгоритму, Unix-утилита diff заметно контрастирует со своими подражателями. Во-первых, центральное ядро является цельным, небольшим и никогда не требовало ни единой строки для обслуживания. Во-вторых, результаты ее работы являются четкими и последовательными, не искажены сюрпризами, при которых эвристические методы терпят неудачу.

Дуг Макилрой.

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

• Утилита grep(1) для выбора из файлов строк, соответствующих шаблону, является простым упаковщиком вокруг формальной алгебры шаблонов регулярных выражений (описание приведено в разделе 8.2.2). Если бы данная программа испытывала недостаток в такой последовательной математической модели, то она, вероятно, выглядела бы подобно конструкции первоначального средства старейших Unix-систем, glob(1) — набор узкоспециальных шаблонов, которые невозможно было комбинировать.

уасс(1)— утилита для создания языковых анализаторов представляет собой тонкий упаковщик вокруг формальной теории грамматики LR(1). Сопутствующая ей утилита, генератор лексических анализаторов 1ех(1) является подобным тонким упаковщиком вокруг теории недетерминированных конечных автоматов.

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

Противоположный формальному подход заключается в использовании эвристики — эмпирических правил, которые позволяют получить вероятностное, а не абсолютно точное решение. В некоторых случаях эвристика применяется ввиду того, что детерминированное корректное решение невозможно. В качестве примера можно рассмотреть методы фильтрации спама. Для алгоритмически идеального спам-фильтра потребовалось бы в качестве модуля полное решение проблемы понимания естественного языка. В других случаях эвристика используется из-за того, что известные формально корректные методы невероятно дороги. Примером этому служит управление виртуальной памятью. Существуют почти совершенные решения, однако они требуют такого количества измерений во время выполнения, что их издержки свели бы к нулю любой теоретический выигрыш по сравнению с эвристикой.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Единый интерфейс

Из книги Getting Real (на русском) [вычитывается] автора 37signals

Единый интерфейс Объединяйте настройки с основным интерфейсомСтраницы, содержащие системные настройки, списки пользователей и т.п., зачастую крайне неудобны и ужасно выглядят. Всё потому, что большая часть времени тратится на разработку основного интерфейса.Не


9.5. Жесткий диск

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

9.5. Жесткий диск 9.5.1. Нумерация Сначала приведем дополнительные сведения о нумерации жестких дисков в системе Linux (табл. 9.3).Таблица 9.3. Нумерация жестких дисков Тип жесткого диска Старший номер Наименование устройства Младший номер Диск 1 Диск 2 IDE на 1 контроллере 22 /dev/hda


Жесткий диск

Из книги Работа на ноутбуке автора Садовский Алексей

Жесткий диск Жесткий диск[8] (рис. 3.4) используется для по стоянного хранения данных. Этим он отличается от других типов памяти, стоящих выше по иерархии (ОЗУ, кэш-память, регистры). Ведь при выключении компьютера все данные из них удаляются. Рис. 3.4. Жесткий диск для


Жесткий диск

Из книги Железо ПК [Популярный самоучитель] автора Пташинский Владимир

Жесткий диск Давайте вспомним, что нам уже известно о жестком диске (Hard Disk Drive, HDD). Винчестер – основное хранилище информации в компьютере. В отличие от оперативной памяти, жесткий диск является энергонезависимым устройством. Это означает, что он способен хранить


Жесткий диск

Из книги Видеосамоучитель монтажа домашнего видео в Adobe Premiere Pro CS3 автора Днепров Александр Г

Жесткий диск Вы будете работать с данными, которые представляют собой видеофайлы. Они занимают достаточно много места на жестком диске компьютера. Каких-либо минимальных требований к жесткому диску компьютера нет, поскольку здесь все зависит от ваших потребностей и


Жесткий диск

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Жесткий диск Для домашней видеостудии очень важны характеристики жесткого диска.Только для установки программы Pinnacle Studio 11 может потребоваться более 1 Гбайт (зависит от того, какие компоненты программы будут установлены) плюс около 3 Гбайт для дополнительных (бонусных)


Единый ключ, что правит всем

Из книги Журнал «Компьютерра» N8 от 27 фераля 2007 года автора Журнал «Компьютерра»

Единый ключ, что правит всем Автор: Киви БердВ длинной и поучительной саге о преодолении AACS, системы защиты контента на видеодисках высокой четкости, открыта, похоже, новая интересная глава. Как показали последние результаты анализа, коллективно проводимого участниками


4.2. Компактность и ортогональность

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

4.2. Компактность и ортогональность Код не является единственным объектом, который имеет оптимальный размер своего элемента. Языки программирования и API-интерфейсы (например, библиотечных или системных вызовов) сталкиваются с теми же ограничениями человеческого


4.2.1. Компактность

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

4.2.1. Компактность Компактность — свойство, которое позволяет конструкции "поместиться" в памяти человека. Для того чтобы проверить компактность, можно использовать хороший практический тест: необходимо определить, нуждается ли обычно опытный пользователь в руководстве


4.2.4. Компактность и единый жесткий центр

Из книги 300 лучших программ на все случаи жизни автора Леонтьев Виталий Петрович

4.2.4. Компактность и единый жесткий центр Одним неочевидным, но мощным способом поддержать компактность в конструкции является ее организация вокруг устойчивого основного алгоритма, определяющего ясное формальное определение проблемы, избегая эвристики и


1.3.4. Жесткий диск

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

1.3.4. Жесткий диск Жесткий диск (он же HDD, Hard Disk Drive, винчестер и «винт») используется, как вы уже знаете, для постоянного хранения информации. Информация с жесткого диска никуда не исчезнет при выключении питания. Жесткий диск — это не только электронное, но и механическое


Жесткий диск

Из книги Интернет – легко и просто! автора Александров Егор

Жесткий диск HDDLifeСайт: http://www.hddlife.com/rus/Размер: 5 МбСтатус: Freeware, Shareware (Pro)Цена: 500 рублей (Pro)Описание разработчиков: Фотографии ваших близких, видеофильмы из путешествий, ваш ежедневник и записная книжка, письма друзей, служебная информация и документы – вы готовы потерять


4.2. Компактность и ортогональность

Из книги Компьютерная обработка звука автора Загуменнов Александр Петрович

4.2. Компактность и ортогональность Код не является единственным объектом, который имеет оптимальный размер своего элемента. Языки программирования и API-интерфейсы (например, библиотечных или системных вызовов) сталкиваются с теми же ограничениями человеческого


4.2.1. Компактность

Из книги автора

4.2.1. Компактность Компактность — свойство, которое позволяет конструкции "поместиться" в памяти человека. Для того чтобы проверить компактность, можно использовать хороший практический тест: необходимо определить, нуждается ли обычно опытный пользователь в руководстве


Единый формат документов

Из книги автора

Единый формат документов Все документы в Интернете сейчас придерживаются единого формата – HTML (HyperText Markup Language – язык разметки гипертекста). Документы, написанные с использованием HTML, называются веб-документами (или веб-страницами). Совокупность веб-страниц,


Жесткий диск

Из книги автора

Жесткий диск При использовании накопителей с несколькими жесткими дисками для защиты информации можно производить параллельную запись на несколько дисков (RAID-массивы). Таким образом, при выходе из строя одного диска записанная на нем информация может быть