Руководства, Инструкции, Бланки

точный набор инструкций описывающих порядок действий исполнителя это img-1

точный набор инструкций описывающих порядок действий исполнителя это

Категория: Инструкции

Описание

Точный набор инструкций описывающих порядок действий исполнителя это

Интерфейс — совокупность средств, методов и правил взаимодействия между элементами системы. Интерфейсы взаимодействия ИВС. Пользовательский интерфейс. Сетевой интерфейс.


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

Алгоритм — точный набор инструкций. описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. Понятие программы. Программа - термин, в переводе означающий «предписание», т.е. предварительное описание предстоящих событий или действий. Компьютерная программа — последовательность инструкций. предназначенная для исполнения устройством управления вычислительной машины. Программа — данные, предназначенные для управления кон­кретными компонентами системы обработки ин­формации в целях реализации определенного ал­горитма. Языки программирования.


Как мы уже говорили, компьютер является программно управляемой системой. Выполняемые компьютером программы должны точно описывать последовательность действий, необходимых для решения конкретной задачи. Разработка любой программы начинается с разработки алгоритма решения соответствующей задачи. Алгоритм — точный набор инструкций. описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. Таким образом, алгоритм должен обладать свойствами однозначности, достижимости и конечности. Описание алгоритма должно выполняться на языке, понятном разработчику алгоритма и позволяющем сделать алгоритм наглядным для его анализа и понимания другими разработчиками. Разговорный язык не подходит для этих целей, т.к. в нем присутствует неопределенность и двусмысленность. Существует два вида средств для разработки алгоритмов – языковые и графические (Рис.3). Под языковыми средствами понимается некоторый формальный язык, каждое предложение которого однозначно интерпретируется и может быть выполнено многократно с одинаковым результатом. Графические средства представляют собой набор графических изображений стандартно возможных действий с правилами соединения этих изображений и возможностью описания объектов воздействия и операций. Такие описания алгоритмов называют блок-схемами. Как и любое графическое изображение, блок-схемы более информативны и проще для восприятия, чем алгоритмы, написанные на формальном языке (или псевдоязыке). Алгоритмы используются для разработки программ. Программа — данные, предназначенные для управления кон­кретными компонентами системы обработки ин­формации в целях реализации определенного ал­горитма. Она должна представлять собой последовательность инструкций. предназначенная для исполнения процессором компьютера. Однако, написание программы в формате команд процессора является занятием достаточно трудоемким и привязывает программу к компьютеру, процессор которого содержит именно такой набор команд. Для повышения производительности разработчиков программ и обеспечения переносимости программ с компьютера с одной системой команд на компьютер с другой системой команд были разработаны специальные языки для написания программ по алгоритмам – алгоритмические языки программирования. При этом программа, написанная на алгоритмическом языке, может быть автоматически переведена на язык команд процессора с помощью специальной программы – компилятора . а сам процесс преобразования в этом случае называется компиляцией . В принципе, преобразование программы, написанной на алгоритмическом языке, возможно в любой другой формальный язык, который не обязательно должен быть языком команд процессора. Такой процесс называется трансляцией . а программа, выполняющая трансляцию – транслятором . С помощью транслятора становится возможным написание отдельных частей программы на разных алгоритмических языках с последующей трансляцией этих частей в какой-то один промежуточный язык и последующей компиляцией всех частей в язык команд процессора. Наконец, существует еще один метод, с помощью которого может быть выполнена работа написанной нами программы – симуляция и эмуляция . Симуляция предполагает воспроизведение поведения программы. Симулироваться может как текст программы на языке программирования высокого уровня программирования, так и текст программы на языке инструкций процессора. Эмуляция предполагает точное моделирование поведения не только программы, но и всей системы. Это позволяет выполнять программы, написанные для одной системы, в другой системе. Например, программы, написанные для мобильных телефонов, могут отлаживаться на обычном персональном компьютере. Существует множество алгоритмических языков программирования. Это определяется множеством сфер применения компьютеров и, как следствие, множеством классов решаемых на компьютере задач. Среди этого множества можно отметить такие языки, как: Fortran (Formula translator), ориентированный на написание программ, решающих научные или вычислительные задачи; COBOL, предназначенный для разработки бизнес-приложений; Pascal, язык общего назначения; С, являющийся стандартным процедурным языком программирования. Существенным упрощением разработки программ является наличие библиотек стандартных программ. Эти библиотеки можно разделить на системные и прикладные. К системным библиотекам относятся такие библиотеки, в которых содержатся стандартные программы для выполнения работы с устройствами и файлами, программы работы с памятью, т.е. те стандартные программы, которые работают с ресурсами системы. Прикладные библиотеки обычно включают в себя реализацию различных математических вычислений: интегрирование, статистическая обработка, различные преобразования и т.п. Особое место занимают библиотеки, в состав которых входят программы, предназначенные для организации интерфейса между программой и пользователем, а также библиотеки построения графических изображений. Библиотеки могу быть встроены в состав компилятора или подключаться в процессе компиляции или связывания (линковки), а также подключаться к программе в процессе ее выполнения – динамические библиотеки. Наличие библиотек позволяет сократить время разработки программ за счет повторного использования ранее написанных программ, реализующих необходимые нам функции. Таким образом, любая программа может находиться в нескольких формах представления: в форме алгоритма, программы на алгоритмическом языке программирования, программы на промежуточном языке программирования и программы на языке команд процессора.

Программное обеспечение компьютера. Типовой состав программного обеспечения ИВС.

Набор программ, записанных на компьютере, составляет программное обеспечение данного компьютера (Рис.4). Все программы при этом можно разделить на: системное программное обеспечение и прикладные программы. К системному программному обеспечению относятся: операционная система, программы тестирования компьютера и периферийных устройств, программы обслуживания вычислительной системы (системы резервного копирования информации, программы дефрагментации дискового пространства и т.п.). Прикладные программы предназначены для решения конкретных задач и представляет собой довольно обширную группу. В зависимости от назначения компьютера в эту группу могут входить, например, программы автоматизации управления предприятием или системы бухгалтерского учета, программы для проектирования и дизайна изделий и конструкций или программы обработки текстов и верстки полиграфической продукции, программы, моделирующие различные физические процессы, или программы, имитирующие реакцию на управление транспортными средствами. Отдельную группу составляет программное обеспечение, предназначенное для разработки программ – инструментальные средства. К ним относятся все программы, предназначенные для поддержки и автоматизации разработки программного обеспечения: компиляторы, трансляторы, средства тестирования и отладки, средства разработки и анализа алгоритмов, системы поддержки версий, библиотеки стандартных программ и т.п. Часть программ из всего программного обеспечения компьютера начинает выполняться автоматически при загрузке компьютера, часть начинает выполняться автоматически по заранее заданному расписанию. Начало работы третьих программ инициирует пользователь компьютера, операционная система или какая-то другая программа, работающая на данном компьютере или на компьютере сети. В зависимости от назначения компьютера состав его программного обеспечения может быть различным. При этом чаще всего в составе программного обеспечения присутствуют операционная система, набор прикладных программ для выполнения задач и набора вспомогательных программ, необходимых для выполнения типовых работ (тестирование компьютера и его внешних устройств, архивация информации и т.п.).

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

Основным элементом системного программного обеспечения является операционная система. Наиболее популярными на данный момент времени являются операционные системы семейства Microsoft Windows и операционные системы класса UNIX, особенно Linux и MacOS. Эти ОС относятся к классу универсальных операционных систем разделения времени. Практически все реализации операционных систем перечисленных систем поставляются в виде специально подготовленных для установки на жесткий диск компьютера специально подготовленных наборов программ, включающих в себя специальную программу установки операционной системы. Помимо самой операционной системы, в наборы включаются также: программы, предназначенные для работы с текстовыми и мультимедийными файлами (изображения, звук, видео); программы для работы в сети (браузер, почтовая программа и т.п.); простейшие офисные программы (калькулятор, календарь, заметки и т.п.), а также утилиты поддержки работы системы. Все операционные системы по их применению можно разделить на системы разделения времени, системы пакетной обработки и системы реального времени. Кроме того, они могут быть универсальными и специализированными. Системы разделения времени предназначены для выполнения программ под управлением пользователя. К ним относятся все перечисленные выше системы. Системы пакетной обработки ориентированы, прежде всего, на выполнение программ с большим количеством вычислений. Такие системы предназначены для работы на высокопроизводительных компьютерах. К таким системам можно отнести Solaris, VMS, серверные решения UNIX и Microsoft. Системы реального времени предназначены для использования в системах управления физическими объектами. К таким системам относятся RTOS, NUCLEUS, QNX, OS-9 и другие. Особым классом операционных систем являются встраиваемые операционные системы. Они используются в таких устройствах как мобильные телефоны, коммуникаторы, планшетные устройства. К ним относятся Palm OS, Windows Mobile, Symbain OS, Android, Maemo и другие.

Пользовательское программное обеспечение.

Основным применением вычислительных систем является автоматизация труда человека. В настоящее время сложно найти такую область деятельности человека, где не нашли бы применения вычислительные системы. Для каждого вида деятельности человека разработаны и продолжают разрабатываться новые программы. Рассмотрим, например, программы, предназначенные для автоматизации труда инженера. Для выполнения инженерных расчетов может быть использован пакет Mathcad или ANSYS. Кроме того, существует огромное количество специализированных программ для разных видов инженерных расчетов. Для конструирования можно использовать CAD-системы: AutoCAD, P CAD, SolidWorks и т.д. Для изготовления документации могут быть использованы офисные системы, например, Microsoft Office.

Основные понятия и определения

Термин «база данных» (database) был введен в обиход в области вычислительной техники примерно в 1962 году. Этот термин страдает от обилия различных интерпретаций, например,

«База данных - это самодокументированное собрание интегрирорванных данных».

«База данных - это централизованное хранилище данных, обеспечивающее хранение, доступ, первичную обработку и поиск информации».

«База данных – это совокупность связанных данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, независимая от прикладных программ».

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

«Базой данных» часто упрощённо или ошибочно называют СУБД. Нужно различать набор данных (собственно базу данных) и программное обеспечение, предназначенное для организации и ведения баз данных (СУБД).

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

Термин «база данных» может быть понят только в контексте СУБД путем перечисления основных правил (или требований), которым должны подчиняться базы данных, чтобы называться базами данных. Выполнение этих требований возлагается на СУБД.

Самодокументированность. База данных должна иметь словарь данных – специальное отведенное место в базе данных, которое используется для хранения информации о самой базе данных. Словарь данных может содержать информацию: об архитектуре базы данных, о хранимых процедурах, о пользовательских привилегиях, и др.

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

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

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

под транзакцией понимается неделимая с точки зрения воздействия на базу данных последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации), приводящая к одному из двух возможных результатов: либо последовательность выполняется, если все операторы правильные, либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом, транзакция переводит базу данных из одного целостного состояния в другое. Поддержание механизма транзакций – показатель уровня развитости СУБД. Корректное поддержание транзакций одновременно является основой обеспечения целостности базы данных. Термин транзакционность означает, что СУБД сама обеспечивает проверку выполнения всей последовательности взаимосвязанных операций и восстанавливает исходное состояние в случае ошибки на одной из промежуточных стадий.

Изолированность. Основу изолированности в многопользовательских системах, где с одной базой данных параллельно могут работать несколько пользователей или прикладных программ, также составляют транзакции. Одна из основных задач СУБД – обеспечение изолированности, т.е. создание такого режима функционирования, при котором каждому пользователю казалось бы, что база данных доступна только ему. Такую задачу СУБД принято называть параллелизмом транзакций.

Поддержание журнала аудита или журналирование. Все операции, выполняемые в СУБД, должны регистрироваться (или записываться) на физическом и логическом уровне в терминах событий, происходящих в базе данных. Для каждого изменения в структурах хранилища заводится отдельная запись, описывающая изменяемую структуру и собственно изменение. Это выполняется способом, позволяющим повторить изменение или, при необходимости, отменить изменение и вернуть все в исходное состояние. Записи хранятся в специальном файле, который называется журналом транзакций .

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

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

Безопасность данных. Защита данных от несанкционированной случайной или намеренной модификации, разрушения или раскрытия.

Поддержка языков баз данных. Для работы с базами данных используются специальные языки, называемые языками баз данных. В ранних СУБД (иерархических и сетевых) поддерживалось несколько специализированных по своим функциям языков. В современных СУБД (реляционных) поддерживается язык SQL (Structured Query Language), содержащий все необходимые средства для работы с базами данных, начиная от ее создания, и обеспечивающий базовый пользовательский интерфейс.

К основным функциям СУБД относятся:

Непосредственное управление данными во внешней и оперативной памяти и обеспечение эффективного доступа к данным в процессе решения задач.

Поддержание целостности данных и управление транзакциями.

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

Реализация поддержки языка описания данных и языка запросов к данным.

Обеспечение безопасности данных.

Обеспечение параллельного доступа к данным нескольких пользователей.

Обычно современная СУБД содержит следующие компоненты:

ядро, которое отвечает за управление данными во внешней и оперативной памяти и журналирование,

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

подсистему поддержки времени исполнения, которая интерпретирует программы манипуляции данными, создающие пользовательский интерфейс с СУБД,

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

Похожие документы:

Григорьева Ольга Витальевна – доцент кафедры «Психологии» Института экономики, управления и права с 2002 года. Является автором 38 опубликованных научных обзоров и статей.

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

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

Куринин И.Н. Нардюжев В.И. Нардюжев И.В. Конспект лекций по курсу "Использование компьютерных технологий в образовании".? М. Изд-во РУДН, 2006.

Слово «информация» происходит от латинского слова informatio, что в переводе означает сведение, разъяснение, ознакомление. Понятие «информация» является базовым в курсе информатики, однако невозможно дать его определение через другие,

Другие статьи

Точный набор инструкций описывающих порядок действий исполнителя это

11. Понятие алгоритма. Основные задачи и направления современной теории алгоритмов.

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

- дискретность — алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов.

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

- понятность — алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.

- завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов.

- массовость (универсальность) - алгоритм должен быть применим к разным наборам исходных данных.

- результативность — завершение алгоритма определёнными результатами.

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

- классическая теория алгоритмов изучает проблемы формулировки задач в терминах формальных языков, вводит понятие задачи разрешения, проводит классификацию задач по классам сложности (P, NP и др.).

- теория асимптотического анализа алгоритмов рассматривает методы получения асимптотических оценок ресурсоемкости или времени выполнения алгоритмов, в частности, для рекурсивных алгоритмов. Асимптотический анализ позволяет оценить рост потребности алгоритма в ресурсах с увеличением объема входных данных.

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

12. Основные вопросы анализа алгоритмов. Понятие алгоритмической сложности.

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

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

- полная корректность — программа завершает работу и выдает правильный результат для всех элементов из диапазона входных данных.

Во время доказательства корректности сравнивают текст программы со спецификацией желаемого соотношения входных-выходных данных. Распространенным критерием оценки алгоритмов является время работы и порядок роста продолжительности работы в зависимости от объема входных данных. Для каждой конкретной задачи составляют некоторое число, которое называют ее размером. Время, которое тратит алгоритм как функция от размера задачи n, называют временной сложностью этого алгоритма T(n). Время, которое тратит алгоритм как функция от размера задачи n, называют временной сложностью этого алгоритма T(n). Асимптотику поведения этой функции при увеличении размера задачи называют асимптотичной временной сложностью. Именно асимптотическая сложность определяет размер задач, которые алгоритм способен обработать. Например, если алгоритм обрабатывает входные данные размером n за время cn², где c — некоторая константа, то говорят, что временная сложность такого алгоритма O(n²). Часто, во время разработки алгоритма пытаются уменьшить асимптотическую временную сложность для наихудших случаев. На практике же бывают случаи, когда достаточным является алгоритм, который «обычно» работает быстро. В следующей таблице приведены распространенные асимптотические сложности с комментариями:

Некоторые задачи коммивояжёра, алгоритмы поиска полным перебором

13. Алгоритмы поиска, выборки и сортировки.

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

Алгоритм двоичного поиска (АДП): двоичный поиск осуществляется на отсортированном списке. Идея в том, что список делится пополам, берется средний эл-т и сравнивается с целевым эл-том. При сравнении возможен один из трех результатов: значения равны, целевое значение меньше элемента списка, либо целевое значение больше элемента списка. В первом, и наилучшем, случае поиск завершен. В остальных двух случаях мы можем отбросить половину списка. Когда целевое значение меньше среднего элемента, мы знаем, что если оно имеется в списке, то находится перед этим средним элементом. Когда же оно больше среднего элемента, мы знаем, что если оно имеется в списке, то находится после этого среднего элемента. Этого достаточно, чтобы мы могли одним сравнением отбросить половину списка. При повторении этой процедуры мы сможем отбросить половину оставшейся части списка. В наихудшем случае число проходов равно k = log2(N +1). Средний случай A(N)≈ log2(N +1)-1.

Существуют и другие алгоритмы поиска:

- алгоритм перебора - модификация алгоритма линейного поиска; находит k-тый по величине элемент в списке;

- дерево двоичного поиска – использует бинарное дерево для хранения элементов;

- интерполирующий поиск (предсказывающий поиск, поиск по словарю);

- линейный поиск — находит элемент в неотсортированном списке;

- поиск в глубину — проходит граф ветка за веткой;

- поиск в ширину — проходит граф уровень за уровнем;

- поиск по первому наилучшему совпадению - проходит граф в порядке важности, используя очередь приоритетов;

- троичный поиск - находит элемент в отсортированном списке.

Сортировка вставками: на каждом шаге алгоритма мы выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированном списке, до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы вставляются по порядку их появления во входном массиве. Приведенный ниже алгоритм использует именно эту стратегию выбора. Время выполнения алгоритма зависит от входных данных: чем большее множество нужно отсортировать, тем большее время выполняется сортировка. Также на время выполнения влияет исходная упорядоченность массива. Так, лучшим случаем является отсортированный массив, а худшим — массив, отсортированный в порядке, обратном нужному. Временная сложность алгоритма при худшем варианте входных данных — θ(n²).

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

Сортировка слиянием: алгоритм сортировки, который упорядочивает списки (или другие структуры данных, доступ к элементам которых можно получать только последовательно, например — потоки) в определённом порядке. Сортируемый массив разбивается на две части примерно одинакового размера. Каждая из получившихся частей сортируется отдельно, например — тем же самым алгоритмом. Два упорядоченных массива половинного размера соединяются в один. Рекурсивное разбиение задачи на меньшие происходит до тех пор, пока размер массива не достигнет единицы (любой массив длины 1 можно считать упорядоченным).

Существуют и другие алгоритмы сортировки:

- наивная сортировка — генерация всех n! возможных перестановок и проверка на отсортированность;

- быстрая сортировка — с разбиением исходного набора данных на две половины так, что любой элемент первой половины упорядочен относительно любого элемента второй половины; затем алгоритм применяется рекурсивно к каждой половине;

- поразрядная сортировка — сортирует строки буква за буквой;

- сортировка с помощью двоичного дерева;

- сортировка методом выбора — наименьшего или наибольшего элемента и помещения его в начало или конец отсортированного списка;

- сортировка Шелла — попытка улучшить сортировку вставками;

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

14. Алгоритмы решения задач на графах.

Поиск в ширину. метод обхода и разметки вершин графа.

Поиск в ширину выполняется в следующем порядке: началу обхода s приписывается метка 0, смежным с ней вершинам — метка 1. Затем поочередно рассматривается окружение всех вершин с метками 1, и каждой из входящих в эти окружения вершин приписываем метку 2 и т. д.

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

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

Ещё существуют алгоритмы поиска A*, Беллмана–Форда, Дейкстры, Джонсона, Флойда - Уоршелла, двунаправленный поиск.

15. Подход к решению задач недетерминированной полиномиальной сложности.

Класс Р (полиномиальные задачи):

Akxk + ak-1xk-1 +…+a0x0

Задача называется полиномиальной, т. е. относится к классу Р, если существует константа k и алгоритм, решающий эту задачу за время O(nk), где п есть длина входа алгоритма в битах. Отметим, что класс задач Р определяется через существование полиномиального по времени алгоритма ее решения, при этом неявно предполагается худший случай по времени для всех различных входов длины n. Задачи класса Р - это задачи, решаемые за реальное время. Отметим следующие преимущества задач из этого класса:

- для большинства реальных задач из класса Р константа k меньше 6;

- класс Р инвариантен по модели вычислений (для широкого класса моделей);

- класс Р обладает свойством естественной замкнутости (сумма или произведение полиномов есть полином).

Таким образом, задачи класса Р есть уточнение определения «практически разрешимой» задачи для входов больших размерностей.

Класс NP (полиномиально проверяемые задачи):

Понятие NP-полноты было введено независимо Куком (Stephen Cook, 1971) и Левиным (1973) и основывается на понятии сводимости одной задачи к другой. Сводимость задач может быть представлена следующим образом: если мы имеем задачу 1 и решающий эту задачу алгоритм, выдающий правильный ответ для всех конкретных проблем, а для задачи 2 алгоритм решения неизвестен, то если мы можем переформулировать (свести) задачу 2 в терминах задачи 1, то мы решаем задачу 2 с помощью алгоритма решения задачи 1. Таким образом, если задача 1 задана множеством конкретных проблем DA1,а задача 2 - множеством DA2, и существует функция fs (алгоритм), сводящая конкретную постановку dA2 задачи 2 к конкретной постановке dA1 задачи 1, т.е. fs(dA2 € DA2) = dA1 e DA1. то задача 2 сводима к задаче 1. Если при этом временная сложность алгоритма fs есть 0(nk), т.е. алгоритм сведения принадлежит классу Р, то говорят, что задача 2 полиномиально сводится к задаче 1. В теории сложности вычислений принято говорить, что задача задается некоторым языком, тогда если задача 1 задана языком L1, а задача 2 - языком L2, то полиномиальная сводимость языков, задающих задачи, обозначается следующим образом: L2 <=p L1

Определение класса NPC (NP-complete) или класса NP-полных задач требует выполнения следующих двух условий: во-первых, задача должна принадлежать классу NP, и, во-вторых, к ней полиномиально должны сводиться все задачи из класса NP. Для класса NPC доказана следующая теорема:

Если существует задача, принадлежащая классу NPC, для которой существует полиномиальный алгоритм решения, то класс Р совпадает с классом NP, т.е. P = NP.

Схема доказательства состоит в сведении с полиномиальной трудоемкостью любой задачи из класса NP к данной задаче из класса NPC и решении этой задачи за полиномиальное время (по условию теоремы). В настоящее время доказано существование сотен NP-полных задач, но ни для одной из них пока не удалось найти полиномиального алгоритма решения. Отметим, что для многих из них предложены приближенные полиномиальные алгоритмы. Сегодня ученые предполагают следующее соотношение классов - Р <> NP, то есть NP \ Р <> 0, и ни одна задача из класса NPC не может быть решена, по крайней мере, сегодня, с полиномиальной сложностью.

16. Методы разработки алгоритмов.

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

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

Динамическое программирование - способ решения сложных задач путём разбиения их на более простые подзадачи. Он применим к задачам с оптимальной подструктурой, выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной. В этом случае время вычислений, по сравнению с «наивными» методами, можно значительно сократить. Ключевая идея в динамическом программировании достаточно проста. Как правило, чтобы решить поставленную задачу, требуется решить отдельные части задачи (подзадачи), после чего объединить решения подзадач в одно общее решение. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико. Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем. Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде рекурсивной последовательности более простых подзадач.

Этот метод, как и предыдущий, можно отнести к одному из общих «рецептов» разработки алгоритмов. Его суть заключается в следующей процедуре: алгоритм начинается с принятия начального предположения или построения начального решения задачи. Затем начинается (насколько возможно) быстрое движение «вверх» от начального уровня по направлению к лучшим решениям. Когда алгоритм достигает точки, из которой больше невозможно двигаться «наверх», он останавливается. Такой метод применяется, например, в задачах поиска экстремумов (максимумов и минимумов) среди некоторой совокупности числовых данных. Начальное решение можно сформулировать так: пусть экстремальным значением является значение первого элемента из заданной совокупности данных. Лучшим решением по отношению к начальному является такой элемент совокупности, у которого значение больше ( в случае поиска максимума) или меньше (в случае поиска минимума) по отношению к начальному значению или к промежуточному “лучшему” решению. Критерием окончания алгоритма (точкой из которой больше невозможно двигаться “наверх”) является просмотр всех элементов из заданной совокупности.