Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Свитки
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  02:54[Войти] | [Зарегистрироваться]

Все уже придумано до нас! Способы увидеть новые нестандартные решения.

Виктор Ерко
дата публикации 26-10-2001 16:11

Все уже придумано до нас! Способы увидеть новые нестандартные решения.

В этом нет ничего такого,
чего каждый опытный программист не знал бы в общем,
с точки зрения здравого смысла
Из дискуссии

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

Будем, однако, помнить о главном. Технологии приходят и уходят, а программирование никуда не девается. Как и на чем бы мы не писали, наш труд был, есть и будет программированием. Позвольте конкретизировать — в лучшем случае описание готових алгоритмов на заданом языке программирования, в значительно худшем самостоятельная разработка алгоритма. В реальной жизни программист получает для работы входные, выходные данные и "черный ящик" между ними, именуемый алгоритмом. Долгое время считалось, что для разработки сложных программных алгоритмов достаточно увеличить количество программистов. Однако практика показывает, что лишь в очень немногих случаях подобный подход позволяет решить проблему. Поэтому возникла необходимость поиска новых и средств благодаря которым удастся повысить производительность труда имеющегося штата программистов без увеличения их числа

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

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

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

В извесной своим высоким техническим уровнем Японии программистам рекомендуют думать о задаче днем и ночью, на работе и отдыхе, в транспорте и за едой. Но к сожалению, прием «думай все время» не дает подсказки в каком направлении думать. Беда в том, что идеи им приходится искать по старинке, методом проб и ошибок. Представьте себе аэродром, с которого взлетают самолёты с шансами на благополучную посадку не более чем 1 из 100. Какой псих пойдёт в пилоты? Алгоритмическая идея — это либо новый способ удовлетворения существующей потребности, либо старый способ удовлетворения новой потребности. Однако способ может оказаться сложным, а надежность будет слишком мала. Жизнеспособный алгоритм — это наилучший способ для решения поставленой задачи, и прогноз надежности с вероятностью 100%. Остаётся найти этот наилучший способ и сделать сверхнадёжный прогноз.

Идея алгоритма, как и инженерная идея, не возникает на ровном месте. Идея алгоритма тоже идёт от недостатков в удовлетворении потребностей, представляющем собой привычный для программиста процесс. Характерно, что и программист, и инженер описывают появление идеи одинаково. Оба говорят об интуиции, опыте, информации, стечении обстоятельств, ассоциациях и т.п. Оба начинают от недостатков в системе: что-то плохо или совсем не работает (удовлетворяет потребность в определённой функции). Будем честны: оба жаждут сделать нечто новое и прославиться. Оба хотят сделать изобретение, да не знают, за что взяться. Взявшись наугад, обычно обнаруживает, что его чудо-идея не реализуется сразу.

А как обстоит дело в прочих областях человеческой деятельности, где успех также зависит от удачности идеи . Увы, печально: результативность творческого поиска примерно такая же. Мы знаем имена десятков преуспевших от науки, искусства, промышленности, спорта. Но кого интересуют «выпавшие в осадок» . Метод проб и ошибок обеспечивает успех одиночек ценой краха большинства «неудачников». По нынешним понятиям это демократично и естественно. Совсем как в природе, где естественный отбор обеспечивает процветание немногих ценой создания и уничтожения большинства, оказавшихся ошибкой природы. Единственная область деятельности человека, где удалось найти средство избавления от чудовищной дани методу проб и ошибок — изобретательство. Как указывалось выше, законы развития являются законами отбора, аналогичными законам дарвинизма. Они лишь показывают, что не будет отбраковано временем и практикой из многочисленных «мутаций» при естественном, стихийном, неуправляемом развитии систем. Законы развития — это приговор с отложенным исполнением его нарушителям. Если идея ошибочна, она умрёт. Правда, в отличие от программиста грамотный, настоящий инженер сегодня работает не наугад.
С начала 60-х годов прошлого столетия конструкторы используют в своей работе метод под названием Теория решения изобретательских задач (ТРИЗ). Основателем теории являлся Г.С. Альтшуллер (15.10.1926 — 24.09.1998) — писатель-фантаст, инженер, изобретатель Основным инструментом ТРИЗ являлся Алгоритм решения изобретательских задач (АРИЗ). АРИЗ представляет собой ряд последовательных логических шагов, целью которых является выявление и разрешение противоречий, существующих в технической системе и препятствующих ее совершенствованию. АРИЗ требует представления себе одномоментного акта типа «продал — купил» удовлетворение потребности в виде протяжённого процесса. Это совсем не так-то уж и легко. Надо научиться видеть мир как движущиеся, непрерывно меняющиеся и развивающиеся системы, как процессы. Невероятно трудно заставлять себя мыслить методично. Неудержимо тянет на привычное шараханье: а если так? а если эдак? Но мыслить — значит думать профессионально, то есть — алгоритмически. Ведь культура — это способность и желание мыслить! Хотя бы немножко. Идею нового изобретения грамотный инженер ищет теперь не в голове (у каждого свои извилины), а в самой технической системе.Тем самым почти без проб и ошибок выходит на жизнеспособную конструкцию нового поколения технической системы.

Но алгоритм — это тоже изобретение, не патентуемое во имя благословенной (теми, кому повезло, и политиками) конкуренции. Поэтому програмистам нужна аналогичная технология поиска жизнеспособной идеи. Есть все основания полагать, что эта технология — АРИЗ. Стремление снизить риск поиска новых идей вызвало к жизни попытку использовать АРИЗ как средство поиска и предварительной оценки алгоритмических идей. Конечно, это только один из способов. Но именно он выявляет алгоритмы, способные принести наибольший и длительный эффект. АРИЗ — инструмент для мышления, а не вместо мышления. АРИЗ — инструмент для решения нестандартных задач. Проверьте: может быть, ваша задача удовлетворительно решается стандартными методами? И незачем попусту тратить силы и время. В АРИЗ используется целый ряд творческих инструментов. Следует помнить, что программисты — это прежде всего люди. Редко кого из них учили программировать. Все что знают и умеют поколение программистов выстоявших в пятилетки лихолетья АСУ и еще способных отличить ЕС ЭВМ от интерьера котельной, почерпнуто главным образом из поучительной истории собственных заблуждений (первым было то, что компилятор является устройством). Найдутся юные нахалы, полагающие, что их РС АТ "Поиск" — столь же достойный повод для рассказов о трудном отрочестве, как и ЕС-1022. В конце концов слабая техника — не более чем стимул к самосовершенствованию. Отсутствие кузниц кадров привело к пестроте наших рядов. Автору известны программисты, в предыдущем существовании бывшие строителями, врачами, юристами, штурманами дальнего плаванья. Но у всех этих людей было одна общая черта: они обладали фантазией, фантазией 3D! Представить себе программиста без хорошо развитого воображения нельзя. Только люди с нестандартным мышлением делают находят наиболее смелые, оригинальные и перспективные решения. Но как быть, если вы по этой части относитесь к себе скептически? Не досадуйте. Воображению можно помочь. Существует ряд приемов для стимулирования творческого воображения, позволяющих преодолеть инерционность мышления при решении творческих задач.

Аналогия

Это пожалуй, самый древний метод поиска творческих решений. Никто сегодня не скажет, когда он зародился и кто первооткрыватель. Ведь по сути дела, аналогия стала неотъемлемым качеством нашего мышления. Вы сами постоянно сталкиваетесь с ней в повседневной жизни. Широко используется она в художественном творчестве. Точно также может применятся и для решения задач программирования. Аналогия как метод поиска новых алгоритмических решений не имеет четких правил. Существуют лишь самые общие, вот они:
  1. определить, что требуется сделать по условиям задачи;
  2. искать, где и как еще в технике или природе решаются аналогичные задачи;
  3. посмотреть как можно использовать найденные аналоги для решения, что для этого нужно.
Аналогия означает сходство двух предметов в каких-то свойствах или отношениях. И в зависимости от этого ее можно подразделить на виды. Самой распространенной и известной является функциональная аналогия. Чтобы воспользоваться ею, надо сначала определить, какие функции должен выполнять проектируемый алгоритм, а потом искать, кто или что в окружающем мире выполняет такие же или близкие функции. Искать следует прежде всего в других отраслях техники или знаний.

Атрибутом почти каждой организации который и делает ее организацией является шкаф с папками в которых хранятся документы, отчеты и т.д. Присмотримся внимательно к компьютерным базам данных (XBASE, ACCESS, …), все СУБД выполняют функции шкафа с папками в которых размещается информация что позволяет сделать вывод, компьютерная база данных функциональный аналог . Если за реальным шкафом регулярно смотреть то папки и документы в нем будет упорядочены по заданным признакам, это напоминает индексацию и сортировку.

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

Если вы думаете, что файл и алгоритм доступа к файлам придумали специально для нужд информатики разыщите папку скроcшивателя и вспомните возможно уже забытое описание файла которое встречали на первых страницах учебников по алгоритмическим языкам, ФАЙЛ представляет собой последовательность компонент одного и того же типа. Число компонент не фиксировано. В каждый момент доступна только одна компонента. Cравните структуру папки скоросшивателя и файла.

Еще один широко распространенный вид аналогии — аналогия внешней формы, когда вновь создаваемый алгоритм по внешнему виду делается подобным какому-либо другому уже известному, свойства которого мы хотим получить. Например: алгоритм начисления заработной платы — бухгалтер с калькулятором, искусственный интеллект — живой мозг.

Морфологический анализ

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

Для каждого компонента указываются возможные варианты его реализации.
Рассматриваются все возможные комбинации реализации алгоритма из таких компонентов.
Расчет строится на том, что в поле зрения могут попасть варианты, которые ранее не рассматривались. Принцип морфологического анализа легко реализуется с помощью компьютерных средств. Его главными недостатками является упрощенность подхода к анализу алгоритма и возможность получения слишком большого для рассмотрения числа вариантов. Морфологический анализ имеет много как простейших, так и усложненных модификаций. Однако его применение рационально для простых алгоритмов и там, где возможно найти новую идею за счет комбинации известных решений.
Пусть мы решили разработать алгоритм модуля ввода информации. Выделим 6 наиболее значимых элементов (у вас может получиться другое число) и записываем их в левый столбец. А в строках пишем, как этот элемент можно реализовать. Полученный морфологический ящик содержит варианты реализации. Среди них можно найти простые, а можно и такие которые еще не были реализованы.

Ввод информации Оператор Считывание с машинных носителей Получение по каналам связи
Проверка правильности ввода Повторный ввод Контрольный разряд Электронная подпись
Вывод информации для оператора На экран На печать  
Вывод информации для пользователя На печать (чек) На машинный носитель (маг.карточка) На экран
Средство управления клавиатура мышь Голосом
Формирование сводной информации за день На печать На машинные носители Передача каналами связи

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

Метод «маленьких человечков»
Суть метода состоит в том, чтобы представить алгоритм в виде множества (толпы) маленьких человечков. Такая модель сохраняет достоинства эмпатии (наглядность, простота) и не имеет присущих ей недостатков (неделимость человеческого организма). Техника применения метода сводится к следующим операциям: Необходимо выделить часть алгоритма, которая не может выполнять требования задачи и представить эту часть в виде маленьких человечков. Разделить человечков на группы, действующие (перемещающиеся) по условиям задачи.

Полученную модель надо рассмотреть и перестроить так, чтобы выполнялись конфликтующие действия.

Два модема линию между ними попробуйте заменить на две бригады рабочих и ленту транспортера, выполняющих алгоритм перемещения пачек из точки «А» в точку «В». Сразу бросается в глаза узкое место (транспортер) ограничивающий пропускную способность. Что можно предложить, увеличить количество груза помещаемого в пачку (сжатие), установить параллельно несколько транспортеров (выделенная линия), а не могла бы принимающая сторона синтезировать товар из инструкций поступивших от передающей стороны на основе полуфабрикатов имеющихся у получающей стороны … .
Метод «Вычесть пуговицу»
С арифметической операцией вычитания знакомы все. Примените эту операцию в не совсем традиционной области. Попробуйте вычесть, уничтожить какое-либо свойство или составляющую часть известного алгоритма. А потом со всех сторон рассмотреть, не появятся ли новые идеи. Вычесть можно все, что хотите: карманы у одежды, солнечный свет, протокол передачи данных … Подумайте, например как обойтись без обычной клавиатуры при вводе пакета документов оператором . Видите, что сразу открывается простор для новых идей, (считать сканером, использовать мышь, голосом и т.д.) если вычесть всего-то пустяк- клавиатуру! А если что-нибудь посерьезней.
Метод «Фантастическая добавка»
Если какому-либо алгоритму добавить некоторое свойство, которого у него нет, как изменятся функции алгоритма и окружающая его среда. Попробуйте и убедитесь, какие фантастические изменения вызовет лишь одно необычное допущение. Сколько хлопот доставляет получение упорядоченной информации из базы данных. Давайте представим себе базу данных которую не нужно было бы сортировать, содержать занимающие много места индексные файлы.
Метод «Хорошо-плохо»
В одном мультфильме пес по прозвищу д'Артаньян произносит такие слова:"… Меня не любят — это минус, но и гонят — это плюс …" Вы улыбнулись собачьей сообразительности? Пес и в самом деле проявил незаурядную гибкость мышления — умение видеть как положительные, так и отрицательные стороны одного и того же явления. В изобретательском деле обладать таким мышлением — половина успеха. На листе бумаги начертите две колонки в первую вписывайте все положительные (оптимистические)аспекты, во вторую негативные (пессимистические). Так продолжайте до тех пор пока не иссякнут мысли. На следующий день проведите анализ полученного материала.
ЗА ПРОТИВ
это гибкость и утонченность, наглядность, связь свойств и действий с конкретными объектами (локациями), простота обучения, стандартный интерфейс ОС и приложений, написанных для нее, возможность обмена данными между приложениями. За красоту нужно платить. Эта плата громоздкость переключающих конструкций, большой объем необходимой памяти ЭВМ. Потери времени на обучение пользователя новым методам работы. Необходимость покупки новой мощной техники удовлетворительно работающей с новыми программами. Гибкость связана с разнообразием, а слишком большое разнообразие приводит к неразберихе. А нужен ли графический интерфейс вообще, если среднестатистический пользователь работает в 3-4 программах для запуска и переключения, которых хватит небольшой панели задач.
В завершение обзора методов стимулирования воображения рассмотрим метод, который помогает развить способность увидеть в задаче новые неожиданные связи. В реальных задачах исходные данные очень редко логически связаны с данными, которые необходимо получить. Для тренировки попытаемся логически связать совершенно независимых утверждения. Например: "Когда гремит гром …" и "… у вас оторвалась ручка от авоськи". На первый взгляд перекинуть логический мостик между ними невозможно. Но раз мы взялись, давайте попробуем. Одна из коротких связок может быть такая: «Когда гремит гром, все понимают, что скоро пойдет дождь… Пойдет дождь, нужно быстрее добраться до дома … Быстрее можно добраться на транспорте, и все бегут на остановку трамвая, вы тоже… У дверей трамвая образуется пробка, в давке у вас отрывается ручка от авоськи". Как видим получилась связка из 6 шагов. Их может быть и 10 и 18. Умение найти связь между независимыми на первый взгляд утверждениями позволяет увидеть новые связи между частями задачи, что, как правило приводит к появлению нестандартных алгоритмов ее решения.

Техническое противоречие

Включать воображение приходится тогда, если нахрапом справиться с поставленой задачей не представляется возможным, требования в корне противоречат друг другу. Для облегчения понимания условий задачи и в некоторой мере избавиться от случайного поиска решений: используется понятие «техническое противоречие». О техническом противоречии говорят, когда к какому-то предмету одновременно предъявляются противоположные, взаимоисключающие требования. Например авторучка должна быть большой, чтобы долго писать, и маленькой, чтобы не занимать места при хранении. Текстовый редактор должен выполнять множество функций по редактированию текста и одновременно занимать минимум места на диске. Составте таблицу технических противоречий алгоритма задачи, в которой противоречия представляются двумя конфликтующими параметрами. Для каждого сочетания параметров предлагается использовать несколько приемов устранения противоречия. В АРИЗ разработанный Г.С. Альтшулером, входит набор из 40 способов решения технических противоречий. Они были выявлены на основе анализа около 40 тысяч изобретений, некоторые из них можно применить при решении алгоритмических задач. Приемы устранения технических противоречий сформулированы и классифицированы на основе статистических исследований изобретений.

Принцип дробления
разделить алгоритм на независимые части;
выполнить алгоритм «разборным»;
увеличить степень дробления алгоритма.
Этим принципом пользовалось не одно поколение программистов прицип дробления это основа основ модульного программирования. Что может быть проще, разделяй и властвуй.
Принцип вынесения
отделить от алгоритма "мешающую" часть ("мешающее" свойство);
выделить единственно нужную часть (нужное свойство).
Язык Си, Паскаль традиционно считаются плохо приспособленными для решения информационно-аналитических и экономических задач. Решалась эта проблема двома способами. Первый способ на языке Си или Паскаль реализовалось ядро низкоуровневых функций СУБД. Далее создание СУБД, ведется на специализированном языке, этот подход использован в dBase, Paradox. Второй подход. функции обработки данных реализуются в виде самостоятельной библиотеки обеспечивающей взаимодействие с базами (Codebase,dbVista). Проблемы возрастали в геометрической прогрессии, если одновременно использовались базы разных типов или SQL сервера. Что делает Вorland INC. придумывает Borland Database Engine (BDE) выделив все проблемы работы с СУБД в отдельную структурную единицу.
Принцип объединения-универсальности
соединить однородные или предназначенные для смежных операций алгоритмы;
объединить во времени однородные или смежные операции.
алгоритм выполняет несколько разных функций, благодаря чему отпадает необходимость в других алгоритмах
При записи на жесткий диск сетевая ОС NOVELL выполняет буферизацию, проверку достоверности, дефрагментацию, объединяя несколько смежных операций . После выполнения этих операций отпадает необходимость в содержании специализованых утилит для обслуживания диска.
ринцип антивеса
компенсировать сложность алгоритма соединением с другим алгоритмом, обладающим компенсирующими свойствами;
компенсировать сложность алгоритма взаимодействием со средой.
Если по условию алгоритма необходимо работать з разными устройствами, вы не пишете в программе процедуры по доступу или обслуживанию этих устройств а устанавливаете или используете стандартный драйвер для ОС.
Принцип предварительного действия
заранее выполнить требуемое действие (полностью или хотя бы частично);
заранее расставить части алгоритмы так, чтобы они могли вступить в действие без затраты времени на подготовку и с наиболее удобного места.
Практически всякая большая система включает в себя входной язык – от примитивного до весьма сложного. Вспомним хотя бы dBASE. А раз нужен входной язык, нужен и компилятор. Чтобы написать, эффективный и быстрый компилятор, есть много рецептов. Любой алгоритмический язык имеет четкую структуру команд с операндами. Команда всегда начинается с ключевого слова после через пробел следуют операнды, и все завершается символом конца команды на пример (;). За малейшее нарушение принятой структуры больно бьют по рукам. Задание такой строгой структуры блестящая демонстрация принципа предварительного действия предписывающая зарание выполнить действие которое позже облегчит выполнение других последующих этапов работы компилятора до совершения магической операции создания машинного кода, сканирование, создание таблицы имен. Компиляторы это компьютерный Олимп . Вы возможно не задумываясь выполняли предварительные действия чтобы воспользоваться включенным в СУБД средством для формирования отчетов успешное использование которого требует запланировать выполнение ряда операций (сортировать базу по ключу, выполнить запрос SQL).
Принцип «заранее подложенной подушки»
компенсировать относительно невысокую надежность алгоритма заранее подготовленными аварийными средствами.
Если вам приходилось принимать участие в разработке сложных программных систем состоящих из нескольких рабочих модулей, интенсивно обменивающихся информацией, малейший сбой в момент операций обмена информацией приводил к краху. Для избежания подобных неприятных ситуаций и применяются контрольные суммы, протоколирование обмена, транзакции. Введение в программу аварийных средств позволяющих вернутся к состоянию до начала опасной операции делает ее более устойчивой к всякого рода неприятностям. В почти всех игровых программах существует возможность, сохранится перед опасным уровнем и в случае возникновения проблем начать все с начала.
Принцип эквипотенциальности
изменить условия работы так, чтобы не приходилось запускать или останавливать работу алгоритм
Вспомните, сколько раз вы вспоминали автора приложения, когда после незначительных изменения файла конфигурации для вступления изменений в силу нужно перезапускать всю программу. Одним из козырных тузов ОС UNIX есть возможность изменять параметры системы без необходимости перезапуска всей системы.
Принцип динамичности
характеристики алгоритма (или внешней среды) должны меняться так, чтобы быть оптимальными на каждом этапе работы;
разделить алгоритм на части, способные выполнятся относительно друг друга;
если алгоритм в целом «неподвижен» стационарен, сделать его «подвижным», изменяющимся во время выполнения.
Модули Dynamic Link Library DLL являются динамическими, то есть могут быть загружены или выгружены автоматически (системой) или программно (по усмотрению разработчика) в любой момент выполнения приложения. Это дает возможность программисту управлять количеством и составом кода и данных в заданном месте приложения. Через DLL библиотеки можно связывать модули, написанные на различных языках и производства разных фирм. Чтобы там не говорили, а любая ОС набор алгоритмов. В зависимости от потребностей, занятости Windows размер файла подкачки устанавливается динамически оптимальным для конкретного этапа работы.
Принцип частичного или избыточного действия
если трудно получить 100% требуемого эффекта, надо получить "чуть меньше" или "чуть больше" — задача при этом существенно упростится.
Все СУБД семейства xBASE громогласно именуют себя реляционными, но в те далекие времена создать полноценную реляционную СУБД на существующих технических средствах было довольно сложно. Авторы dBASE создали СУБД реляционную только 90% и на несколько десятилетий опредилили пути развития СУБД .
Принцип перехода в другое измерение
трудности, связанные с выполнением алгоритма по линии, устраняются, если алгоритм приобретает возможность, выполнятся в двух измерениях (т. е. на плоскости).
Соответственно задачи, связанные с выполнением (или размещением) алгоритмов в одной плоскости, устраняются при переходе к пространству в трех измерениях;
использовать «многоэтажную» компоновку алгоритмов вместо «одноэтажной»; «наклонить» алгоритм или положить его "на бок";
использовать обратное направление передачи данных внутри алгоритма;
использовать потоки данных, падающие на соседнюю часть алгоритма или обратную сторону имеющегося алгоритма.
Еще не столь давно структура программы была примерно общей для всех задач. Сначала запускался цикл обработки событий (клавиатура, порт и т.д.) после наступления события запускались процедуры обработки событий. Если таких событий не происходило программ работала в холостую. Одна из возможностей современных ОС- это так называемые потоки (threads). Потоки позволяют выполнять несколько алгоритмов задачи одновременно. Ваше приложение сможет одновременно производить вычисления, печатать документ, получать данные с сети INTERNET.
Принцип проскока, непрерывности полезного действия
вести выполнение алгоритма или отдельные его этапы (например, «вредные» или «опасные») на большой скорости.
вести работу непрерывно (все части алгоритма должны все время работать с полной нагрузкой);
Обратите внимание как выполняет операцию дефрагментации соответсвуюцая утилита пакета NORTON. Cтрашно себе представить, что случится если в момент переноса информации внепланово отключат електричество. Во избежание трагических последствий утилита максимально использует память машины для увеличения скорости.
Принцип "обратить вред в пользу"
использовать вредные факторы для получения положительного эффекта;
устранить вредный фактор за счет сложения с другими вредными факторами;
усилить вредный фактор до такой степени, чтобы он перестал быть вредным.
Печатающие устройства нельзя отнести к разряду скоростных. При печати процессор ожидает готовности устройства для посылки ему новой порции информации. Эти простои не желательны, приводят к не рациональному использованию процессора, который мог за это время заняться другими задачами. Как обратить вред в пользу? Создать в памяти буфер где хранить информацию для печати а процессор на зто время задействовать на формирование новой порции данных для печати. Совершенно верно, фоновая печать и позволяет рационально использовать рабочее время процессора, обращая тем самым вред в пользу.
Принцип обратной связи
ввести обратную связь;
если обратная связь есть, изменить ее.
В алгоритмах передачи информации по каналам связи принимающая сторона информирует передающую об успешном приеме пакета и необходимости начать передачу следующего или повторной передаче предыдущего.
Принцип "посредника"
использовать промежуточный алгоритм, переносящий или передающий действие, данные;
на время присоединить к алгоритму другой (легкоудаляемый) алгоритм.
Eсли вы по условиям задачи нуждаетесь в передаче информации, на другие компьютеры то вам совсем не обязательно самому расписывать алгоритм передачи информации по протоколу TCP/IP или IPX/SPX проще использовать готовые библиотеки тем самым внеся в свою программу независимость от используемого канала передачи информации.
Принцип самообслуживания
алгоритм должен сам себя обслуживать, выполняя вспомогательные и сервисные операции; использовать «отходы».
В объектно-ориентированно программировании хорошим тоном считается освобождать занятую динамически распределяемую память. На дистрибутивных дисках Borland Turbo Pascal 6.0 располагался файл HelpFile для вывода подсказки при нажатии клавише F1, вставив который в свою программу, создав файл подсказок оттранслировав его в течении получаса получали удобный программный продукт, который удовлетворит любого капризного пользователя. Все очень быстро, при столь малых затратах сил, что даже не верится. И правильно, что не верится «полтергейст» начинался чуть позже, возможно на следующий день, через неделю. Трудно было предсказать с точностью до минуты, когда нажатие F1 приведет к "зависанию" вашего компьютера или заказчика. Причем это воспринималось как сбой компьютера, диска, только не вашей программы вы же использовали исходные тексты АМЕРИКАНСКОЙ фирмы Borland. Причиной всех неприятностей было то, что алгоритм модуля HelpFile имел обьекты и переменные, которые не освобождали динамически распределяемую память после ее использования.
Принцип копирования
вместо недоступного, сложного, дорогостоящего, неудобного или «хрупкого» алгоритма использовать его упрощенные и дешевые копии;
заменить алгоритм или систему алгоритмов их копиями (репликами). Использовать при этом изменение масштаба (увеличить или уменьшить копии);
заменить дорогой сложный алгоритм, набором дешевых алгоритмов, поступившись при этом некоторыми качествами (например, долговечностью).
В одном из журналов была размещена заметка, что каждый желающий пользователь может принять участие в программе поиска внеземных цивилизаций скачав небольшое программное обеспечение для обработки данных поступающих из радиотелескопа. Мало вероятно, чтобы в организаторов программы отсутствовали средства для выполнения необходимых вычислений на технике посолиднее домашних ПК. Стоимость разработки программного обеспечения для домашних ПК намного ниже чем для супер ЭВМ. Да и совместная работа десятков сотен ПК создает виртуальную модель многопроцессорной ЭВМ .
Использование гибких оболочек
вместо обычных стандартных не изменяемых алгоритмов использовать гибкие настраиваемые «оболочки» ;
Сколько бы ядовитых стрел не отпускалось в сторону Била Гейтса и его фирмы все же следует признать OС WindowsXX по своим функциям и есть гибкой оболочкой над апаратными средствами, которые у всех разные, да и потребности тоже а ОС должна работать у всех.
Принцип однородности
алгоритмы, взаимодействующие с данным алгоритмом, должны быть сделаны (написаны) из того же «материала»(языка программирования (или близкого ему по свойствам) .
Утверждение фирмы BORLAND о том, что интергированная среда ТurboPascal 6.0 написана на языке Pascal не осответствует дейсвительности они значительно облегчили себе жизнь использовав готовые фрагменты кода Си. Применяя библиотеки желательно узнать поддерживают ли они соглашения вашего компилятора и библиотек других фирм.
Применение фазовых переходов
использовать явления возникающие при «фазовых переходах»
, например, изменение кодировки, выделение или передача данных в другие части алгоритма или во внешнюю среду. и т. д. Большинство современных ЭВМ есть компьютерами с архитектурой фон Неймана. Такая структура не позволяет однозначно сказать, что содержит ячейка памяти (команду или данные), до тех пор пока к ее содержимому не обратится центральный процессор за командой или за операндом команды, что изначально создает почву для создания самомодифицирующихся и размножающихся программ. Без сомнения за вирусами нужно признать право существования, как и за любым другим специфическим, но все же программным обеспечением. То о чем будет говориться ниже, может сильно не понравится блюстителям компьютерной морали. Но из песни слова не выбросиш.
Принцип периодического действия
перейти от непрерывного выполнения алгоритма к периодическому (импульсному);
если выполнение уже осуществляется периодически, изменить периодичность;
использовать паузы между периодами для других действий.
привести выполнение алгоритма в колебательное движение;
если такое выполнение уже совершается, увеличить его частоту;
использовать «резонансную» частоту;
Текстовый редактор, игрушка и т.д. являются программным обеспечением, направленным на непрерывное выполнение задачи, поле выполнения которой программа заканчивает работу и освобождает занимаемую память. Изначально алгоритм выполнения вируса подразумевает деление на периоды (проникновение, спячка, размножение, нанесение ущерба) значительно разнесенные во времени и пространстве.
Принцип отброса и регенерации частей
выполнившая свое назначение или ставшая ненужной часть алгоритма должна быть отброшена (растворена, испарена и т. д ) или видоизменена непосредственно в ходе работы;
расходуемые части алгоритма должны быть восстановлены непосредственно в ходе работы.
Для проникновения в систему вирусы использует разнообразные люки в программном обеспечении . После заражения эта часть код уже не нужна вирусу, а ее наличие значительно увеличивает шансы вируса быть обнаруженым в системе раньше заданного алгоритмом времени. Это чем то напоминает запуск многоступенчатой ракеты где спупени ракеты выполняют одновременно функции двигателей и защиты ценного груза.
Принцип местного качества, асимметрии
перейти от однородной структуры алгоритма (или внешней среды, внешнего воздействия) к неоднородной;
разные части алгоритма должны иметь (выполнять) различные функции;
каждая часть алгоритма должна находиться (выполнятся) в условиях, наиболее благоприятных для ее работы.
перейти от « симметричной» формы алгоритма к «асимметричной»
если алгоритм «асимметричен», увеличить степень асимметрии.
Ограничение размеров заставляет авторов вирусов применять не стандартные методы построения алгоритма, один участок кода на все копии вирусов в системе, использование процедур ОС, один участок кода используется для разных операций.
Принцип «матрешки»
один алгоритм размещен внутри другого, который, в свою очередь, находится внутри третьего и т. д.;
один алгоритм проходит «сквозь» другой алгоритм.
Вирус от и в Африке вирус. О том, что грамотно написанный вирус должен как минимум сохранять и восстанавливать контекст программы, в которую он внедрился комментировать излишне
Принцип предварительного антидействия
заранее придать алгоритму свойства, противоположные недопустимым или нежелательным рабочим свойствам;
если по условиям задачи, необходимо совершить какое то действие, надо заранее совершить антидействие.
Вирус должен работать скрыто в среде до наступления условий предписанных алгоритмом. Маскируясь, вирус, может не вольно выдать свое присутствие в системе. Поэтому некоторые вирусы пытаются в момент проникновения изменить параметры ОС таким образом, чтобы их присутствие воспринималось как нормальная работа ОС.
Принцип «наоборот»
вместо действия, диктуемого условиями задачи, осуществить обратное действие;
сделать рабочую часть алгоритма или внешней среды нерабочей и на оборот ;
перевернуть алгоритм "вверх ногами", вывернуть его.
Если на телегу пригнет кузнечик, как вы думаете, кто опрокинется? В информационных системах очень часто опрокидывается «телега». Самым простым примером может служить возможность устанавливать значение 62 секунд в ДОС. А это только цветочки.

Предлагаемые методы и технология не есть нечто искусственное. Она представляют собой соединение стихийного опыта десятков тысяч выдающихся людей с достижениями логики, психологии, системного анализа. Это максимально возможное на сегодня выявление механизма талантливого мышления, который ещё именуют интуицией. Это выявление надёжных идей. Это технология логического, сильного мышления, почти исключающая метод проб и ошибок. Ее главная идея в том, развитие технических систем подчиняется жёстким законам. Эти законы одинаковы и для корабля, и для авторучки, и для алгоритма при всей внешней хаотичности изобретений. Основные идеи ТРИЗ были разработаны и совершенствовались в те времена когда в машинных залах не не слышали английского. Не из-за шума, нет — за ненадобностью. В те былинные времена наиболее английским словом было слово "Фортран-Дубна". Когда ЭВМ грохоча перфовводом, обеспечивала своим счастливым, уверенным в завтрашнем дне пользавателям миллион операций в секунду, виртуальную память и разделение времени. Для полного перевода идей, заложеных в ТРИЗ, для решения алгоримических задач возможно потребуются несколько дисертаций. Но никто не мешает и вам овладеть основами этой премудрости.В этом смысле предлагаемая технология доступна всякому, умеющему учиться. Разумеется, применение не так просто, чем кажется на первый взгляд. «Царской дороги нет». Надо «учиться, учиться и ещё раз учиться», чтобы не оказаться в густых рядах проигравших.

Виктор Ерко

Литература
  • Г.О. Буш "Рождение изобретательских задач" Рига, ЛИЕСМА, 1976
  • Н.Н. Безруков "Компьютерная вирусология" Киев "Украинская советская энциклопедия", 1991
  • Институтский конспект по ТРИЗ, Львов 1994
  • Журнал "Монитор", 1993-1994 год
Internet-источники:




Смотрите также материалы по темам:
[Проектирование, постановка задачи, средства разработки]

 Обсуждение материала [ 02-06-2003 12:30 ] 17 сообщений
  
Время на сайте: GMT минус 5 часов

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

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования