Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора информатика.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.68 Mб
Скачать

4. Задача сортировки. Алгоритмы сортировки. Сортировка и индексирование.

Постановка задачи

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

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

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

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

Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти:

Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах размера списка (n). Для типичного алгоритма хорошее поведение — это O(n log n) и плохое поведение — это O(n²). Идеальное поведение для упорядочения — O(n).

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

12. Логические яп. Декларативность программ. Решение логических задач.

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

Логический язык программирования - язык программирования, позволяющий выполнить описание проблемы в терминах фактов и логических формул, а собственно решение проблемы выполняет система с помощью механизмов логического вывода.Логическое программирование основано на теории математической логики. Самым известным языком логического программирования является Prolog, являющийся по своей сути универсальной машиной вывода, работающей в предположении замкнутости мира фактов. Свое название Пролог получил от слов "ПРОограммирование на языке ЛОГики". На самом деле Пролог не считается чистым языком логического программирования, но его создание - важный этап в этом направлении.

Новую область — логическое, или реляционное программирование, — открыло появление языка PROLOG (Пролог) (PROgramming in LOGic — программирование в терминах логики). Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время известны и другие языки, однако наиболее развитым и распространенным языком логического программирования является именно Пролог. Так, имеется свыше 15 различных его реализаций на ПЭВМ. Языки логического программирования, в особенности Пролог, широко используются в системах искусственного интеллекта.Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами (в терминах условий или ограничений) и цели (запроса). Процесс выполнения программы трактуется как процесс общезначимости логической формулы, построенной из программы по правилам, установленным семантикой используемого языка. Результат вычисления является побочным продуктом этого процесса. В реляционном программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Это свидетельствует о декларативности языка логического программирования. Она метко выражена в формуле Р. Ковальского: «алгоритм = логика + управление».

Языки логического программирования характеризуются:

  • высоким уровнем; строгой ориентацией на символьные вычисления;

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

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

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

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

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

Иногда декларативное описание может быть выполнено как программа. В других случаях нужно упорядочить утверждения таким образом, чтобы способ согласования целевых утверждений Прологом привел к решению задачи. Однако упорядочение утверждений само по себе не гарантирует получения работающей программы. Возможно, придется добавить некоторые детали для управления ходом выполнения программы: предикаты repeat, fail и отсечение. Такая информация указывает системе Пролог, как использовать факты и отношения. Полученную в результате программу следует рассматривать уже процедурно.Пролог - декларативный язык. В нем значительное место занимают описания. Процедурная часть представлена так называемыми "встроенными" предикатами, в задачу которых входит связь с файловой, и вообще, операционной системой. Представительство этих предикатов в программе невелико.Декларативный язык программирования (От лат. Declaratio – объявление) - язык программирования высокого уровня, построенный: - на описании данных; - на описании искомого результата. Декларативные языки подразделяются на функциональные и логические языки.

Способы решения логических задач.

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

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

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