GeoSELECT.ru



Программирование / Реферат: Булева алгебра (Программирование)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Булева алгебра (Программирование)


Технический университет Молдовы



РЕФЕРАТ ПО ПРОГРАММИРОВАНИЮ
ТЕМА: Булева алгебра.



Факультет
CIM

Группа
С - 092

Подготовил
Плис Владимир.

Проверил.



Кишинёв 1999 г.


План:
Введение.
1) Предмет математической логики.
2) Калькуляция высказываний.
3) Заключение.
Библиография.



ВВЕДЕНИЕ



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



МАТЕМАТИЧЕСКАЯ ЛОГИКА

ПРЕДМЕТ МАТЕМАТИЧЕСКОЙ ЛОГИКИ

Простейшие закономерности выводов открывались человечеством эмпирическим
путем в ходе общественного производства (например, простейшие соотношения
арифметики и геометрии). Открытие более сложных законов связано с
результатами науки формальной логики. Первое крупное обобщение формальной
логики принадлежит Аристотелю. В формальной логике с самого начала
применялись (в единичных случаях) математические методы, но развитие логики
не успевало за применением таких методов по сравнению с другими областями
математики. Поэтому формальная логика отстала от потребностей науки (в
первую очередь от требований математики); отставание оказалось особенно
очевидным в новую эру. Главными недостатками формальной логики являлись
следующие .
1. Она не сумела привести законы выводов к небольшому количеству надежных
логических законов; поэтому подтвердила правильность некоторых выводов на
основе экспериментов, которые позже были опровергнуты примерами,
доказывающими обратное.
2. Она была неспособна анализировать значительную часть выводов,
применяемых в повседневной и научной жизни; доказать правильность или
неправильность таких выводов. (Например, не могла доказать, что из
правильности предложения «Каждая трапеция является четырехугольником»
вытекает правильность предложения «Кто рисует трапецию, тот рисует
четырехугольник).
Задача математизации формальной логики была поставлена и осуществлена
Лейбницем. Его работу продолжили математики XIX века. На рубеже столетия с
открытием противоречий в теории множеств (см. гл. «Теория множеств»)
развитие математической логики получило широкий размах. В настоящее время
результаты математической логики используются во всех традиционных областях
формальной логики; открыты совершенно новые области. В
настоящее время «традиционная» формальная логика по сравнению с
математической логикой имеет значение только для истории науки.
Математическая логика не претендует на открытие законов мышления вообще,
или еще в меньшей степени на анализ философских проблем, связанных с
человеческим мышлением. Эти вопросы больше относятся к «логике» (в более
общем смысле слова) и к философии. (В дальнейшем под словом «логика» будем
подразумевать математическую логику.)

ЧТО ТАКОЕ ВЫВОД?

Для более точного определения предмета математической логики следовало бы
уточнить, что подразумевается под термином логически правильного вывода.
Чтобы сформулировать хотя бы одно временное определение, рассмотрим пример
вывода. (В соответствии с традиционной формой записывания, предпосылки
отделяются от окончательного вывода горизонтальной чертой):

1. (Предпосылки) Если будет раздача премии, то мы выполнили план.

Будет раздача премии.
(Окончательный вывод) Мы выполнили план.


Если принять правильность предпосылок, то следует принять и
правильность окончательного вывода. Другой, аналогичный пример :

Если мне выпадет туз, то я иду ва-банк.

Мне выпал туз.
Я иду ва-банк.

Обычно вместо предложений (мне выпал туз) и (я иду ва-банк) могут быть
записаны любые такие изъявительные предложения, значения которых может быть
правильно или ложно; следует оставить неизменными только расположение слов
«если» и «то» и расположение предположений, то есть структуру вывода. Пусть
А и В обозначает любые заменяющие предложения. Структуру вывода можно
выразить следующей схемой;

Если А, то В

А

В


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



КАЛЬКУЛЯЦИЯ ВЫСКАЗЫВАНИЙ



ВЫСКАЗЫВАНИЕ


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

ОТРИЦАНИЕ И КОНЪЮНКЦИЯ


Двумя простейшими примерами вышеприведенной операции являются отрицание и
конъюнкция. (Операция и результат операции здесь обозначается одним и тем
же названием.)
Под отрицанием высказывания А подразумевается высказывание «Неправильно,
что А» (или некоторая грамматически преобразованная форма данного
высказывания).
По значению выражения «неправильно» отрицание А правильно тогда и только
тогда, если самое А неправильно; следовательно, отрицание действительно
есть операция калькуляции высказываний (в соответствии с вышеприведенным
определением).

Пример: Отрицанием предложения «мотор работает» является предложение
«неправда, что мотор работает» или, иначе: «мотор не работает».
Отрицание является одночленной операцией. Отрицание «А» обозначается
символом «~А» (читается : «не А»). Применяются также и обозначения «~ А»,
«— А», «А».
Под конъюнкцией двух высказываний А и В подразумевается высказывание «А и
В» (или некоторая грамматически измененная форма данного высказывания). По
значению союза «и» конъюнкция является правильной тогда и только тогда,
если оба ее члена правильны.
Таким образом, конъюнкция также является операцией калькуляции
высказываний. Операция конъюнкции «А и В» представляет собой двучленную
операцию; ее обозначают, «А & В», «АВ». При возникновении конъюнкции союз
«и» иногда заменяется другим союзом (например, «Анатолий здесь, но Бориса
нет» или «Анатолий здесь, хотя Борис ушел» и т. д.). Это не влияет на
правильность или ложность результата, имеет только эмоциональное значение.
Иногда союз вообще пропускается. Если сказуемые двух предложений, связанных
между собой путем конъюнкции, совпадают, то общее сказуемое представлено
только в одном из предложений. Например, конъюнкция «я питаюсь хлебом и
питаюсь водой» после преобразования имеет следующий вид: «я питаюсь хлебом
и водой».
Изучение остальных операций калькуляции высказываний уточняется и
облегчается с помощью следующего рассуждения.
Пусть свойства высказываний «правильное» и «ложное» называются логическими
значениями и обозначаются знаками пил. Правильность (или ложность)
некоторого высказывания А выражается и в такой форме, что логическим
значением высказывания А является п (или л).
Если задаются логические значения отдельных членов в некоторой операции
калькуляции высказываний, то данной операцией логическое значение
результата определяется однозначно. Это позволяет определение таких
операций для логических значений (кроме вышеприведенного определения для
высказываний) следующим образом: На место и членов и результата
подставляются логические значения; причем, вместо результата подставляется
логическое значение высказывания, образующееся данной операцией из
высказываний с соответствующими членам логическими значениями.

Например, отрицания логических значений определяются так:
(так как отрицание правильного высказывания является ложным),
(так как отрицание ложного высказывания является правильным);

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



АЛГЕБРА ЛОГИЧЕСКИХ ЗНАЧЕНИЙ


Операции, проводимые на логических значениях, называются логическими
операциями. Для выражения любых логических значении вводятся логические
переменные; они обозначаются символами p, q, r, ..., р, р, … Итак,
логические переменные могут принимать два «значения»:
п или л.
При использовании нескольких операций последовательно порядок выполнения
отдельных операции обозначается скобками; например, ~(р) А q) (иногда
скобки опускаются). Например, вместо выражения (7p)/q пишется 7р / q при
предварительном пояснении, что в случае появления выражения без скобок знак
относится только к следующему знаку.
В общем смысле слова n-членной логической операцией называется каждая
такая функция, областью существования которой является упорядоченное
множество всех выражений, образуемых из логических значений пиле длиной
выражения n, а значением ее является одно из двух логических значений п и
л.
Любая логическая операция может быть выражена через операции отрицания и
конъюнкции.

НЕКОТОРЫЕ ДРУГИЕ ЛОГИЧЕСКИЕ ОПЕРАЦИИ

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

В области одномерных логических операций фактический интерес представляет
только отрицание.

дизъюнкция

Операция называется дизъюнкцией и обозначается символом «p/q» (иначе ее
называют альтернацией, адъюнкцией, логическим сложением), или «р + q».
Дизъюнкция выражается с помощью операций конъюнкции и отрицания.
Связь, созданная между двумя высказываниями при помощи уступительного
союза «или», является такой операцией, которой в области логических
значений соответствует операция дизъюнкции: высказывание является ложным
тогда и только тогда, если оба высказывания ложны.
(Союз «или» в таком случае применяется в значении допущения, если
допускается правильность обоих высказываний). Например: «выпал дождь или
полили парк». Поэтому такое соединение двух высказываний также называется
дизъюнкцией. (Символ «V» читается также как «или»).
Операция конъюнкция выражается с помощью операций дизъюнкции.
Таким образом, руководствуясь теоремой, что каждая логическая операция
может быть выражена с помощью только операций дизъюнкции и отрицания

«ни-ни»

ИМПЛИКАЦИЯ


Операция «р влечёт q» и называется импликацией (с предварительным членом р
и с последующим членом q).

Допустим, что если р = п, то значение выражения р влечёт q будет или п,
или л в зависимости от того, является ли значение q п, или л. Это
аналогично тому, что высказывание типа «если А, то В», в котором первый
член А является правильным, считается или правильным, или ложным в
зависимости от того, правильный или ложный второй его член В. Поэтому
соединению типа «если А, то В» соответствует импликация в области
логических значений. Но в то же время при ложном высказывании А предложение
типа «если А, то В» может вообще не считаться высказыванием Например: если
горит лампочка, то лифт работает.
Если высказывание «горит лампочка» правильно, то правильностью
высказывания «лифт работает» однозначно решается правильность
вышеприведенного предложения. Но если высказывание «горит лампочка» ложно,
то ничего нельзя сказать о правильности вышеприведенного предложения. Можно
сказать : надо подождать, пока лампочка загорится Приведем пример, в
котором не будет даже возможности «подождать»:
Если 2 * 2 = 5, то Дунай является европейской рекой. Если принять то, что
соединение типа «если . . .то» соответствует операции импликации, при
соблюдении последнего тождества высказывание «если А, то В» выражалось бы с
помощью операций конъюнкции и отрицания в следующем виде : «неправильно,
что : А и не В» (здесь присутствует выражение «не В» вместо выражения
«неправильно, что В»; таким образом, ясно, что выражение «неправильно,
что», расположенное в начале высказывания, относится не только к Л, но и к
выражению «А и не В»). В соответствии с этим приведенные выше два
предложения в примере могут быть переформулированы следующим образом:
а) Неправильно, что горит лампочка и лифт не работает.
б) Неправильно, что 2 * 2 = 5 и Дунай не является европейской рекой. Если
выражение «горит лампочка» ложно, то ложно и выражение «лампочка горит и
лифт не работает», а отрицание его — по а) — является правильным.
Выражение. «2 * 2 = 5» ложно, ложно также и выражение «Дунай не является
европейской рекой»; их конъюнкция — также ложна, а отрицание этой
конъюнкции — по б) — является правильным. Здесь нет противоречия по
сравнению с обычным пониманием вещей, так как обычно не обращают внимание
на правильность сложного предложения типа «если . . . то» в том случае,
когда первый член соединения является ложным.
Выражения вида «если А, то В» можно считать синонимами выражений вида
«неправильно, что: «А и не В»; они называются импликациями (с
предварительным членом А, с последующим членом В); для их обозначения
применяется символ А влечёт В.
Представленное в области логических значений понятие импликации типа р
влечёт q соответствует понятию вышеприведенной операции высказывания.
Операции на высказываниях, выражаемые с помощью союзов и частиц,
сформулированы недостаточно точно ; в большинстве случаев, они до некоторой
степени двусмысленны. По всей вероятности распознавание операций конъюнкции
и отрицания наименее проблематично в их грамматической форме представления.
Поэтому большое значение имеет возможность выражения любой логической
операции через операции конъюнкции и отрицания. Как было показано выше, это
позволило нам истолковать образование сложного предложения вида «если . . .
то» как операцию.
Упоминаются еще некоторые грамматические синонимы операции «А влечёт В»:
«В, если только Л», «Только тогда А, если В», «Достаточным условием В
является А», «Необходимым условием А является В», «В если не А».
И конъюнкция и дизъюнкция выражаются с помощью операций импликации и
отрицания.
Поэтому любая логическая операция может быть выражена с помощью операций
отрицания и импликации.

ЭКВИВАЛЕНТНОСТЬ


Последний вид выражения операции эквивалентности.
Так как высказывание p эквивалентно q = n тогда и только тогда, когда p =
q, то данная логическая операция соответствует образованию сложного
предложения вида «А тогда и только тогда, когда В». Понимание и логическое
значение предложения такого характера, образованного из двух любых
высказываний, иногда затруднительно для восприятия человека, как и
понимание предложения вида «если . . . то». Например, «2 < 3 тогда и только
тогда, если светит солнце».
Поэтому данное предложение понимается операцией калькуляции высказываний
исключительно в том случае, если считать его синонимом высказываний вида
«неправильно, что А и не В, и, неправильно, что не А и В». В этом случае
данная операция «А влечёт В» и называется эквивалентностью.
Часто встречаются следующие синонимы данной операции: «Для А необходимо и
достаточно б», «А именно тогда, когда В».



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



Библиография


1. Малая математическая энциклопедия. Э. Фрид., И. Пастор., И. Рейман.,
П. Ревес., И. Ружа. Издательсво академии наук Венгрии. Будапешт 1976
г.
2. Математический анализ. ЧастьIII. В.А.Зоричь. Москва «наука». 1984
г.
3. Пособие по математика для поступающих в ВУЗЫ. Под редакцией Г. Н.
Яковлева Москва «наука» 1988 г.







Реферат на тему: Быстрые алгоритмы сортировки
МІНІСТЕРСТВО НАУКИ І ОСВІТИ УКРАЇНИ
Херсонський Державний Педагогічний Університет
Фізико-математичний факультет
Кафедра інформаційних технологій



Швидкі алгоритми сортування



Курсова робота



Виконавець



Керівник



Херсон 2001
Зміст


Вступ 3


1. Аналіз швидких алгоритмів сортування 6

1.1. Сортування деревом 6
1.2. Пірамідальне сортування 9
1.3 Швидке сортування Хоара 12
1.4 Метод цифрового сортування 14

2. Практична реалізація мовою Паскаль швидких алгоритмів сортування 16


Висновки 22


Список використаних джерел 24



Вступ

В наш час нові інформаційні технології посідають дуже важливе місце не
лише в спеціалізованих, але й в повсякденних сферах життя. Комп’ютери
застосовуються в бізнесі, менеджменті, торгівлі, навчанні та багатьох
інших сферах діяльності людини.
Комп’ютерні технології дуже зручні для виконання різноманітних
операцій, але в різних сферах застосування ці операції різні. Тому, кожна
окрема галузь, яка використовує специфічні технічні засоби, потребує своїх
власних програм, які забезпечують роботу комп’ютерів.
Розробкою програмного забезпечення займається така галузь науки, як
програмування. Вона набуває все більшого й більшого значення останнім
часом, адже з кожним днем комп’ютер стає все більш необхідним, все більш
повсякденним явищем нашого життя. Адже обчислювальна техніка минулих років
вже майже повністю вичерпала себе і не задовольняє тим потребам, що
постають перед людством.
Таким чином, нові інформаційні технології дуже актуальні в
наш час і потребують багато уваги для подальшої розробки та вдосконалення.
Поряд з цим, велике значення має також і програмування, яке є одним із
фундаментальних розділів інформатики і тому не може залишатись осторонь.
Програмування містить цілу низку важливих внутрішніх задач. Однією з
найбільш важливих таких задач для програмування є задача сортування. Під
сортуванням звичайно розуміють перестановки елементів будь-якої
послідовності у визначеному порядку. Ця задача є однією з найважливіших
тому, що її метою є полегшення подальшої обробки певних даних і,
насамперед, задачі пошуку. Так, одним з ефективних алгоритмів пошуку є
бінарний пошук. Він працює швидше ніж, наприклад, лінійний пошук, але його
можливо застосовувати лише за умови, що послідовність вже упорядкована,
тобто відсортована.
Взагалі, відомо, що в будь-якій сфері діяльності, що використовує
комп’ютер для запису, обробки та збереження інформації, усі дані
зберігаються в базах даних, які також потребують сортування. Певна
впорядкованість для них дуже важлива, адже користувачеві набагато легше
працювати з даними, що мають певний порядок. Так, можна розташувати всі
товари по назві або відомості про співробітників чи студентів за прізвищем
або роком народження, тощо.
Задача сортування в програмуванні не вирішена повністю. Адже, хоча й
існує велика кількість алгоритмів сортування, все ж таки метою
програмування є не лише розробка алгоритмів сортування елементів, але й
розробка саме ефективних алгоритмів сортування. Ми знаємо, що одну й ту
саму задачу можна вирішити за допомогою різних алгоритмів і кожен раз зміна
алгоритму приводить до нових, більш або менш ефективних розв’язків задачі.
Основними вимогами до ефективності алгоритмів сортування є перш за все
ефективність за часом та економне використання пам’яті. Згідно цих вимог,
прості алгоритми сортування (такі, як сортування вибором і сортування
включенням) не є дуже ефективними.
Алгоритм сортування обмінами, хоча і завершує свою роботу (оскільки він
використовує лише цикли з параметром і в тілі циклів параметри примусово не
змінюються) і не використовує допоміжної пам’яті, але займає багато часу.
Навіть, якщо внутрішній цикл не містить жодної перестановки, то дії будуть
повторюватись до тих пір, поки не завершиться зовнішній цикл.
Алгоритм сортування вибором ефективніше сортування обмінами за
критерієм М(n), тобто за кількістю пересилань, але також є не дуже
ефективним. З цих причин було розроблено деякі нові алгоритми сортування,
що отримали назву швидких алгоритмів сортування. Це такі алгоритми, як
сортування деревом, пірамідальне сортування, швидке сортування Хоара та
метод цифрового сортування.
Метою нашої дослідницької роботи є ознайомлення з цими швидкими
алгоритмами сортування, спроба проаналізувати їх і висвітлити кожен з них і
написати програму, яка б виконувала сортування деякої послідовності за
допомогою різних швидких алгоритмів сортування.



1. Аналіз швидких алгоритмів сортування


1.1. Сортування деревом

Алгоритм сортування деревом ТreeSort власне кажучи є поліпшенням
алгоритму сортування вибором. Процедура вибору найменшого елемента
удосконалена як процедура побудови т.зв. сортуючого дерева. Сортуюче дерево
- це структура даних, у якій представлений процес пошуку найменшого
елемента методом попарного порівняння елементів, що стоять поруч. Алгоритм
сортує масив у два етапи.
I етап : побудова сортуючого дерева;
II етап : просівання елементів по сортуючому дереву.
Розглянемо приклад: Нехай масив A складається з 8 елементів (мал. 1, 1-
а рядок). Другий рядок складається з мінімумів елементів першого рядка,
які стоять поруч. Кожний наступний рядок складений з мінімумів елементів,
що стоять поруч, попереднього рядка.



Ця структура даних називається сортуючим деревом. У корені сортуючого
дерева розташований найменший елемент. Крім того, у дереві побудовані шляхи
елементів масиву від листів до відповідного величині елемента вузла -
розгалуження. (На мал.1 шлях мінімального елемента a5 - від листа a5 до
кореня відзначений товстою лінією.)
Коли дерево побудоване, починається етап просівання елементів масиву по
дереву. Мінімальний елемент пересилається у вихідний масив B і усі
входження цього елемента в дереві заміняються на спеціальний символ M.



Потім здійснюється просівання елемента уздовж шляху, відзначеного
символом M, починаючи з листка, сусіднього з M (На мал 2. униз) і до
кореня. Крок просівання - це вибір найменшого з двох елементів, що
зустрілися на шляху до кореня дерева і його пересилання у вузол,
відзначений M. Просівання 2-го елемента показано на мал 3. (Символ М
більше, ніж будь-який елемент масиву).

a6 = min(M, a6)
a6 = min(a6, a8)
a3 = min(a3, a6)
b2 := a3

Просівання елементів відбувається доти, поки весь вихідний масив не
буде заповнений символами M, тобто n раз:

For I := 1 to n do begin
Відзначити шлях від кореня до листка символом M;
Просіяти елемент уздовж відзначеного шляху;

B[I] := корінь дерева

end;

Обґрунтування правильності алгоритму очевидно, оскільки кожне чергове
просівання викидає в масив У найменший з елементів масиву А, що залишилися.
Сортуюче дерево можна реалізувати, використовуючи або двовимірний
масив, або одномірний масиві ST[1..N], де N = 2n-1 (див. наступний розділ).
Оцінимо складність алгоритму в термінах M(n), C(n). Насамперед відзначимо,
що алгоритм TreeSort працює однаково на усіх входах, так що його складність
у гіршому випадку збігається зі складністю в середньому.
Припустимо, що n - ступінь 2 (n = 2l). Тоді сортуюче дерево має l + 1
рівень (глибину l). Побудова рівня I вимагає n / 2I порівнянь і пересилань.
Таким чином, I-ий етап має складність:
C1(n) = n/2+n/4+ ... + 2+1 = n-1, M1(n) = C1(n) = n - 1
Для того, щоб оцінити складність II-го етапу З2(n) і M2(n) помітимо, що
кожен шлях просівання має довжину l, тому кількість порівнянь і пересилань
при просіванні одного елемента пропорційно l. Таким чином, M2(n) = O(l n),
C2(n) = O(l n).
Оскільки l = log2n, M2(n)=O(n log2 n)), C2(n)=O(n log2 n), Але З(n) =
C1(n) + C2(n), M(n) = M1(n) + M2(n). Тому що C1(n) < C2(n), M1(n) < M2(n),
остаточно одержуємо оцінки складності алгоритму TreeSort за часом:
M(n) = O(n log2 n), C(n) = O(n log2 n),
У загальному випадку, коли n не є ступенем 2, сортуюче дерево будується
трохи інакше. “Зайвий” елемент (елемент, для якого немає пари) переноситься
на наступний рівень. Легко бачити, що при цьому глибина сортуючого дерева
дорівнює [log2 n] + 1. Удосконалення алгоритму II етапу очевидно. Оцінки
при цьому змінюють лише мультиплікативні множники. Алгоритм TreeSort має
істотний недолік: для нього потрібно додаткова пам'ять розміру 2n - 1.


1.2. Пірамідальне сортування


Алгоритм пірамідального сортування HeapSort також використовує
представлення масиву у виді дерева. Цей алгоритм не вимагає допоміжних
масивів, сортуючи “на місці”. Розглянемо спочатку метод представлення
масиву у виді дерева:
Нехай A[1 .. n] - деякий масив. Зіставимо йому дерево, використовуючи
наступні правила:

1.A[1] - корінь дерева ;
2.Якщо A[i] - вузол дерева і 2i ( n,
то A[2*i] - вузол - “лівий син” вузла A[i]
3.Якщо A[i] - вузол дерева і 2i + 1 ( n,
то A[2*i+1] - вузол - “правий син” вузла A[i]

Правила 1-3 визначають у масиві структуру дерева, причому глибина
дерева не перевершує [log2 n] + 1. Вони ж задають спосіб руху по дереву від
кореня до листків. Рух вгору задається правилом 4:

4.Якщо A[i] - вузол дерева і i > 1,
то A[i mod 2] - вузол - “батько” вузла A[i];

Приклад: Нехай A = [45 13 24 31 11 28 49 40 19 27] - масив. Відповідне
йому дерево має вид:



Зверніть увагу на те, що всі рівні дерева, за винятком останнього,
цілком заповнені, останній рівень заповнений ліворуч і індексація елементів
масиву здійснюється вниз і праворуч. Тому дерево упорядкованого масиву
відповідає наступним властивостям:
A[i] ( A[2*i], A[i] ( A[2*i+1], A[2*i] ( A[2*i+1].
Як це не дивно, алгоритм HeapSort спочатку будує дерево, що відповідає
прямо протилежним співвідношенням:
A[i] ( A[2*i], A[i] ( A[2*i+1]
а потім змінює місцями A[1] (найбільший елемент) і A[n].
Як і TreeSort, алгоритм HeapSort працює в два етапи:
I. Побудова сортуючого дерева;
II. Просівання елементів по сортуючому дереву.
Дерево, що представляє масив, називається сортуючим, якщо виконуються
умови (6). Якщо для деякого i ця умова не виконується, будемо говорити, що
має місце (сімейний) конфлікт у трикутнику i.
Як на I-ом, так і на II-ому етапах елементарна дія алгоритму полягає в
вирішенні сімейного конфлікту: якщо найбільший із синів більше, ніж батько,
то переставляються батько і цей син (процедура ConSwap).
У результаті перестановки може виникнути новий конфлікт у тому
трикутнику, куди переставлений батько. У такий спосіб можна говорити про
конфлікт (роду) у піддереві з коренем у вершині i. Конфлікт роду
вирішується послідовним вирішенням сімейних конфліктів проходом по дереву
вниз. (На мал шлях вирішення конфлікту роду у вершині 2 відзначений).
Конфлікт роду вирішено, якщо прохід закінчився (i > n div 2), або ж в
результаті перестановки не виник новий сімейний конфлікт (процедура
Conflict).

Procedure ConSwap(i, j : Integer);
Var b : Real;
Begin
If a[i] < a[j] then begin
b := a[i]; a[i] := a[j]; a[j] := b
end
End;

Procedure Conflict(i, k : Integer);
Var j : Integer;
Begin
j := 2*i;
If j = k
then ConSwap(i, j)
else if j < k then begin
if a[j+1] > a[j] then j := j + 1;
ConSwap(i, j); Conflict(j, k)
end
End;

I етап – побудова сортуючого дерева - оформимо у виді рекурсивної
процедури, використовуючи визначення:
Якщо ліве і праве піддерева T(2i) і T(2i+1) дерева T(i) є сортуючими,
то для перебудови T(i) необхідно вирішити конфлікт роду в цьому дереві.

Procedure SortTree(i : Integer);
begin
If i br Таким чином, описана нами процедура Hoare залежить від параметрів k таbrm - початкового і кінцевого індексів відрізка масиву, який обробляється.brbr Procedure Swap(i, j : Integer);br Var b : Real;br Beginbr b := a[i]; a[i] := a[j]; a[j] := bbr End;brbr Procedure Hoare(L, R : Integer);br Var left, right : Integer;br x : Integer;br Beginbr If L R then beginbr x := A[(L + R) div 2]; {вибір бар'єра x}br left := L; right := R ;br Repeat {зустрічний прохід}br While A[left] < x do Inc(left); {перегляд уперед}br While A[right] > x do Dec(right); {перегляд назад}
If left right;
Hoare(L, right); {сортуємо початок}
Hoare(left, R) {сортуємо кінець}
end
End;

Program QuickSort;
Const n = 100;
Var A : array[1..n] of Integer;
{ процедури Swap, Hoare, введення і висновку }
Begin
Inp; Hoare(1, n); Out
End.

Аналіз складності алгоритму в середньому, що використовує гіпотезу про
рівну імовірність усіх входів, показує, що:
C(n) = O(n log2 n), M(n) = O(n log2 n)
У гіршому випадку, коли в якості бар'єрного вибирається, наприклад,
максимальний елемент підмассиву, складність алгоритму квадратична.



1.4 Метод цифрового сортування

Іноді при розв’язанні задач типу задачі сортування можна
використовувати особливості типу перетворюваних даних для одержання
ефективного алгоритму. Розглянемо одну з таких задач - задачу про звертання
підстановки.
Підстановкою безлічі 1..n назвемо двовимірний масив A[1..2, 1..n] виду
|1 |2 |........|n-1 |n |
| | |.. | | |
|J1 |j2 |........|jn-1 |jn |
| | |... | | |

у якому 2-ий рядок містить всі елементи відрізка 1..n. Підстановка B
називається зворотньою до підстановки A, якщо B виходить з A сортуванням
стовпчиків A у порядку зростання елементів 2-го рядка з наступною
перестановкою рядків. Потрібно побудувати алгоритм обчислення зворотньої
підстановки. З визначення випливає, що стовпчик [i, ji] підстановки A
потрібно перетворити в стовпчик [ji , i] і поставити на ji-те місце в
підстановці B.

{Type NumSet = 1..n;
Substitution = array[ 1..2, NumSet] of NumSet; }

Procedure Reverse ( Var A, B : Substitution);
Begin
For i := 1 to n do begin
B[A[2, i], 2] := i; B[A[2, i], 1] := A[2, i]
end
End;

Складність процедури Reverse лінійна, оскільки тіло арифметичного циклу
складається з двох операторів присвоювання, в той час як стовпчики
підстановки відсортовані.



2. Практична реалізація мовою Паскаль швидких алгоритмів сортування



Практичною метою нашої дослідницької роботи було написання мовою
Pascal програми, яка б виконувала сортування будь-якої послідовності
елементів. Для того, щоб продемонструвати роботу різних швидких алгоритмів
сортування, ми залишили вибір конкретного алгоритму на розсуд користувача
програми. Тобто, ми створили основну програму – меню, яка пропонує
користувачеві три можливі варіанти швидких алгоритмів сортування: швидке
сортування, сортування Хоара та сортування “злиттям”. Вибір певного
алгоритму здійснюється за допомогою оператору “case of”, тобто натисканням
клавіш клавіатури 1, 2 або 3. Також ми передбачили варіант, коли користувач
програми натискає будь-яку іншу клавішу: в цьому випадку на екрані
з’явиться повідомлення про помилку. Також, після проведення сортування за
вибраним алгоритмом, користувач зможе продовжити роботу й випробувати інший
алгоритм. Для цього потрібно натиснути клавіші клавіатури “у” або “д” або
набрати слово “yes” чи “да” коли після завершення роботи одного з обраних
алгоритмів сортування на екрані з’явиться запитання “Хотите ли вы
продолжить работу с данной программой?”. Якщо ж користувач уже випробував
усі алгоритми або за браком часу (або бажання) хоче завершити роботу з
програмою, то йому достатньо буде лише натиснути на клавіатурі клавіші “n”
або “н” чи набрати слова “no” або “нет” після того, як на екрані
з’явиться зазначене вище запитання.
Програма виконує сортування послідовності за трьома алгоритмами
сортування. Кожний окремий алгоритм представлений у вигляді окремої
процедури.
Так, процедура Qsort виконує швидке сортування масиву, що вводиться.
Під час роботи цього алгоритму відбувається аналіз даної послідовності
одночасно у двох напрямках ( зліва-направо і зправа-наліво) . комп’ютер
порівнює два елементи, що стоять поряд зліва. Якщо ці елементи стоять на
своїх місцях, тобто перший з них є меншим за другий, то комп’ютер порівнює
перший елемент з останнім. Якщо при порівнянні останній елемент виявиться
меншим за перший, то комп’ютер виконає перестановку цих двох елементів.
Такі дії будуть відбуватися до тих пір, поки індикатор, якій відповідає за
ліву частину послідовності (в нашій процедурі це “i”) не перейде на праву
частину, а індикатор, що відповідає за праву частину масиву (в нашій
процедурі це “j”) не перейде на праву частину. Далі та ж сама процедура
викликається рекурсивно. Тобто, якщо ліва частина вже відсортована, то ми
викликаємо ту саму процедуру і комп’ютер виконує ті самі дії, але в
параметрах процедури ми змінюємо ліву границю. Те саме відбувається, коли
відсортована права частина масиву.
По суті цей алгоритм працює на основі алгоритму сортування обмінами,
але цей алгоритм вважається швидким, оскільки перегляд послідовності
відбувається у двох напрямках одночасно. Реалізовано ж цей алгоритм за
допомогою оператору “if”, який відповідає за порівняння елементів, та
пересилань.

Procedure _Qsort (var a:mas; low, hi: byte);
Var i,j:byte;
begin
if hi> low then
begin i:= low;
j:= hi;
x:= a[i];
While i< j do
if a[i+1] right;
HoareSearch ( L, right);
HoareSearch (left, R);
end;
End;


Також у програмі представлена процедура, яка відповідає за введення
масиву. Вона не винесена окремо в головну програму і користувач не побачить
її на своєму екрані-меню. Він побачить лише ті три сортування, що написані
у вигляді процедур.
В своїй роботі ми написали програму, що сортує масив за допомогою лише
трьох алгоритмів сортування. Але можна створити процедури, які б містили
алгоритми сортування деревом та пірамідального сортування. Це не вплине
дуже суттєво на нашу програму. Потрібно буде лише додати ці процедури
оператор “Case of” головної програми і користувач зможе обирати їх і
використовувати їх так само, як і ті алгоритми, що вже були розглянуті нами
в нашій дослідницькій роботі.



Висновки

Отже, ми розглянули як працюють швидкі алгоритми сортування і
спробували визначити їх складність.
Застосування того чи іншого алгоритму сортування для вирішення
конкретної задачі є досить складною проблемою, вирішення якої потребує не
лише досконалого володіння саме цим алгоритмом, але й всебічного
розглядання того чи іншого алгоритму, тобто визначення усіх його переваг і
недоліків.
Звичайно, необхідність застосування саме швидких алгоритмів сортування
очевидна. Адже прості алгоритми сортування не дають бажаної ефективності в
роботі програми. Але завжди треба пам’ятати й про те, що кожний швидкий
алгоритм сортування поряд із своїми перевагами може містити і деякі
недоліки.
Так, алгоритм сортування деревом, хоча й працює однаково на всіх входах
(так, що його складність в гіршому випадку співпадає зі складністю в
середньому), але цей алгоритм має і досить суттєвий недолік: для нього
потрібна додаткова пам’ять розміром 2n-1.
Розглядаючи такий швидкий алгоритм сортування, як пірамідальне
сортування, можна зазначити, що цей алгоритм ефективніший ніж попередній,
адже він сортує “на місці” , тобто він не потребує додаткових масивів.
Крім того, цей алгоритм (“ з точністю до мультиплікативної константи” (4,
74)) оптимальний: його складність співпадає з нижньою оцінкою задачі,
тобто за критеріями C(n) та M(n) він має складність O(n log2 n), але
містить складний елемент в умові. Тобто, в умові A[left] має бути строго
менше ніж x , а A[right] - строго більше за x. Якщо ж замість “строго
більше” та “строго менше” поставити знаки, що позначають “більше, або
дорівнює” та “менше, або дорівнює”, то індекси left і right пробіжать
увесь масив і побіжать далі. Вийти з цієї ситуації можна було б шляхом
ускладнення умов продовження перегляду, але це б погіршило ефективність
програми.
В нашій роботі ми розглянули деякі швидкі алгоритми сортування та їх
реалізацію мовою Pascal, дослідили не лише переваги таких алгоритмів,
ефективність їх використання, але й визначили деякі недоліки окремих
алгоритмів, що заважають вживати їх для вирішення першої ліпшої задачі
сортування.
Отже, головною задачею, яку має вирішити людина, яка повинна розв’язати
задачу сортування – це визначення як позитивних, так і усіх негативних
характеристик різних алгоритмів сортування, передбачення кінцевого
результату. До того ж , треба враховувати головне – чи , можливо, цю
задачу задовольнить один з класичних простих алгоритмів сортування.



Список використаних джерел


1. Абрамов С. А., Зима Е. В. Начала программирования на языке
Pascal. - М.: Наука, 1987.
2. Абрамов В. Г. Введение в язык Pascal: Учебное пособие для студентов
вузов по специальности Прикладная математика. – М.: Наука, 1988.
3. Джонс Ж., Харроу К. Решение задач в системе Турбо-Паскаль/ Перевод с
английского Улановой, Широкого. – М.: Финансы и статистика, 1991.
4. Зуев Е. А. Язык программирования Турбо Паскаль 6.0, 7.0. – М.: Радио и
связь, 1993.
5. Культин Н. Б. Программирование в TurboPascal 7.0 и Delphi. - Санкт-
петербург,1999.
6. Львов М. С., Співаковський О. В. Основи алгоритмізації та програмування.
– Херсон, 1997.
7. Перминов О. Н. Программирование на языке Паскаль. – М.: Радио и связь,
1988.
8. Перминов О. Н. Язык программирования Pascal. – М.: Радио и свіязь,1989.
9. Турбо Паскаль 7.0 Издание 10-е стереотипное. – Санкт-Петербург:
“Печатный Двор”, 1999.
10. Фаронов В. В. TurboPascal 7.0 . Начальный курс. – М.: “Нолидж”, 2000.



-----------------------
a1

a2

a3

a4

a5

a6

a7

a8

a2

a3

a5

a8

a3

a5

a5

a2 = min(a1,a2)
a3 = min(a3,a4)
a5 = min(a5,a6)
a8 = min(a7,a8)

a3 = min(a2,a3)
a5 = min(a5,a8)

a5 = min(a3,a5)

мал 1

a1

a2

a3

a4

M

a6

a7

a8

a2


a3

M

a8

a3

M

M

a5

a3

a4

M

a6

a7

a8

a3

a6

a8

a3

a6

a3

a1

a2

a2

a5 a3

A[2i]

A[2i+1]

A[i]

45

13

24

31

11

28

49

40

19

27

В


мал 2






Новинки рефератов ::

Реферат: Тарханы в творчестве Михаила Лермонтова (Литература : русская)


Реферат: Теория вероятности и математическая статистика (Математика)


Реферат: Петер Пауль Рубенс как видный представитель барокко (Культурология)


Реферат: Николай Рубцов (Литература : русская)


Реферат: радиационные ЧС (Безопасность жизнедеятельности)


Реферат: Возникновение и развитие Киевской Руси (История)


Реферат: Чарли Чаплин (Искусство и культура)


Реферат: Барий и его соединения (Металлургия)


Реферат: "Мы были дети 1812 года…" (История)


Реферат: Иван Крамской (Искусство и культура)


Реферат: Автобиография Локка (Исторические личности)


Реферат: Динозавры (Биология)


Реферат: Курс лекций по управленческому учету (Бухгалтерский учет)


Реферат: Политический гений Екатерины 2 (История)


Реферат: Власть (Государство и право)


Реферат: Стратегический менеджмент (Менеджмент)


Реферат: Реорганизация бизнес-процессов при изменении информационной системы в крупной организации (Менеджмент)


Реферат: Фарадей (Исторические личности)


Реферат: Органы местного самоуправления (Государство и право)


Реферат: Парламент РБ (Право)



Copyright © GeoRUS, Геологические сайты альтруист