1. Улучшенные методы сортировки. Сортировка Шелла, Хоара, улучшенная сортировка выбором. Сортировка с помощью дерева.
Сортировка – упорядочение элементов множества по возрастанию или убыванию.
Сортировку можно разбить на 2 вида:
1. Простые методы сортировки – выбором, пузырьковая, вставками.
2. Улучшенные методы сортировки – Шелла, Хоара.
Сортировка Шелла - общая идея заимствована из сортировки вставками и основывается на уменьшении шагов(расстояние между сортируемыми элементами на конкретном этапе сортировки). Сначала сортируются все элементы, отстоящие друг от друга на три позиции. Затем сортируются элементы, расположенные на расстоянии двух позиций. Наконец, сортируются все соседние элементы.
Проход 1 f d a c b e
\___\___\___/ / /
\___\_____/ / /
\_______/
Проход 2 c b a f d e
\___\___|___|___/ /
\______|______/
Проход 3 a b c d e f
|___|___|___|___|___|
Результат a b c d e f
Конкретная последовательность шагов может быть и другой. Единственное правило состоит в том, чтобы последний шаг был равен 1. Например, такая последовательность: 9, 5, 3, 2, 1
/* Сортировка Шелла. */
void shell(char *items, int count)
{
register int i, j, gap, k;
char x, a[5];
a[0]=9; a[1]=5; a[2]=3; a[3]=2; a[4]=1;
for(k=0; k < 5; k++) {
gap = a[k];
for(i=gap; i < count; ++i) {
x = items[i];
for(j=i-gap; (x < items[j]) && (j >= 0); j=j-gap)
items[j+gap] = items[j];
items[j+gap] = x;
}
}
}
Внутренний цикл for имеет два условия проверки. Очевидно, что сравнение x<items[j] необходимо для процесса сортировки. Выражение j>=0 предотвращает выход за границу массива items. Эти дополнительные проверки в некоторой степени понижают производительность сортировки Шелла.
В слегка модифицированных версиях данного метода сортировки применяются специальные элементы массива, называемые сигнальными метками. Они не принадлежат к собственно сортируемому массиву, а содержат специальные значения, соответствующие наименьшему возможному и наибольшему возможному элементам. Это устраняет необходимость проверки выхода за границы массива. Однако применение сигнальных меток элементов требует конкретной информации о сортируемых данных, что уменьшает универсальность функции сортировки.
Быстрая сортировка Хоара – в ее основе лежит сортировка обменами.
Быстрая сортировка построена на идее деления. Общая процедура заключается в том, чтобы выбрать некоторое значение, называемое компарандом(операнд в операции сравнения. Иногда называется также основой и критерием разбиения) ,а затем разбить массив на две части. Все элементы, большие или равные компаранду, перемещаются на одну сторону, а меньшие — на другую. Потом этот процесс повторяется для каждой части до тех пор, пока массив не будет отсортирован. Например, если исходный массив состоит из символов f e d a c b, а в качестве компаранда используется символ d, первый проход быстрой сортировки переупорядочит массив следующим образом:
Начало f e d a c b
Проход 1 b c a d e f
Затем сортировка повторяется для обеих половин массива, то есть b с а и d e f. Как вы видите, этот процесс по своей сути рекурсивный, и, действительно, в чистом виде быстрая сортировка реализуется как рекурсивная функция.
Значение компаранда можно выбирать двумя способами — случайным образом либо усреднив небольшое количество значений из массива. Для оптимальной сортировки необходимо выбирать значение, которое расположено точно в середине диапазона всех значений. Однако для большинства наборов данных это сделать непросто. В худшем случае выбранное значение оказывается одним из крайних. Тем не менее, даже в этом случае быстрая сортировка работает правильно. В приведенной ниже версии быстрой сортировки в качестве компаранда выбирается средний элемент массива.
/* Функция, фызывающая функцию быстрой сортировки. */
void quick(char *items, int count)
{
qs(items, 0, count-1);
}
/* Быстрая сортировка. */
void qs(char *items, int left, int right)
{
register int i, j;
char x, y;
i = left; j = right;
x = items[(left+right)/2]; /* выбор компаранда */
do {
while((items[i] < x) && (i < right)) i++;
while((x < items[j]) && (j > left)) j--;
if(i <= j) {
y = items[i];
items[i] = items[j];
items[j] = y;
i++; j--;
}
} while(i <= j);
if(left < j) qs(items, left, j);
if(i < right) qs(items, i, right);
}
В этой версии функция quick() готовит вызов главной сортирующей функции qs(). Это обеспечивает общий интерфейс с параметрами items и count, но несущественно, так как можно вызывать непосредственно функцию qs() с тремя аргументами.
Необходимо упомянуть об одном особенно проблематичном аспекте быстрой сортировки. Если значение компаранда в каждом делении равно наибольшему значению, быстрая сортировка становится "медленной сортировкой" со временем выполнения порядка n2. Поэтому внимательно выбирайте метод определения компаранда. Этот метод часто определяется природой сортируемых данных. Например, в очень больших списках почтовой рассылки, в которых сортировка происходит по почтовому индексу, выбор прост, потому что почтовые индексы довольно равномерно распределены — компаранд можно определить с помощью простой алгебраической функции. Однако в других базах данных зачастую лучшим выбором является случайное значение. Популярный и довольно эффективный метод — выбрать три элемента из сортируемой части массива и взять в качестве компаранда значение, расположенное между двумя другими.
Сортировка выбором
Отыскивается максимальный (минимальный) элемент и переносится в конец массива. Затем этот метод применяется ко всем элементам, кроме последнего (он уже находится на своем месте).
Другой вариант метода - перенос найденного элемента в начало массива и последующее применение метода ко всем элементам, кроме первого.
Сортировка двоичным деревом
Двоичным(бинарным) деревом назовем упорядоченную структуру данных, в которой каждому элементу - предшественнику или корню (под)дерева - поставлены в соответствие по крайней мере два других элемента (преемника). Причем для каждого предшественника выполнено следующее правило: левый преемник всегда меньше, а правый преемник всегда больше или равен предшественнику.
Вместо 'предшественник' и 'преемник' также употребляют термины 'родитель' и 'сын'. Все элементы дерева также называют 'узлами'. При добавлении в дерево нового элемента его последовательно сравнивают с нижестоящими узлами, таким образом вставляя на место. Если элемент >= корня - он идет в правое поддерево, сравниваем его уже с правым сыном, иначе - он идет в левое поддерево, сравниваем с левым, и так далее, пока есть сыновья, с которыми можно сравнить. Процесс построения дерева из последовательности 44 55 12 42 94 18 06 67:
44 44 44 44 44
\ / \ / \ / \
55 12 55 12 55 12 55
\ \ \
42 42 94
(**) 44 44 (*) 44
/ \ / \ / \
12 55 12 55 12 55
\ \ / \ \ / \ \
42 94 06 42 94 06 42 94
/ / / /
18 18 18 67
- Билет 1.
- 1. Инкапсуляция, наследование, полиморфизм. Классы, объекты и отношения между ними. Диаграммы логического уровня.
- 2. Симметричные блочные криптоалгоритмы. Сеть Фейстеля.
- Билет 2
- 1. Объявление и реализация классов на языке Паскаль.
- 2. Интерфейс. Пользовательский интерфейс. Классификация пользовательских интерфейсов.
- Билет 3.
- 1. Графы. Основные определения. Машинное представление графов в последовательной памяти и связанной памяти.
- 2. Общая схема симметричной криптосистемы. Алгоритм построения цепочек.
- 3. Написать процедуру, которая выполняет вставку компоненты по заданному ключу.
- Билет 4.
- 1. Нормальный алгоритм Маркова.
- 2. Парадигмы интерфейсов.
- Билет 5.
- 1. Понятие процесса. Состояние процессов. Алгоритмы планирования процессов.
- 2. Общие сведения об ассиметричных криптоалгоритмах. Понятие электронной цифровой подписи.
- 3. Вычислить факториал числа 8.
- Билет 6.
- 1. Файловая системаFat.
- 2. Основные компоненты графических пользовательских интерфейсов.
- 3. Если элементы массивыD[1…5] равны соответственно 4, 1, 5, 3, 2, то значение выражениеD[d[3]]-d[d[5]] равно?
- Билет 7
- 1. Структуры распределенных вычислительных систем(топология, физические и логические элементы сетей эвм)
- 2. Встроенные средства контроля доступа в современных ос.
- 3. Указать к какому классу относится каждый из перечисленныхIPадресов:
- Билет 8
- 1.Трансляторы, компиляторы и интерпретаторы: определение, общая схема работы. Варианты взаимодействия блоков транслятора.
- 2. Эргономические требования, предъявляемые к дизайну пользовательских интерфейсов.
- 3. Указать к какому классу относится каждый из перечисленныхIPадресов:
- Билет 9
- 1. Сети Петри. Моделирование процессов на основе сетей Петри.
- 2. Нормализация таблиц при проектировании баз данных. Нормальные формы (1нф, 2нф, 3нф, нфбк).
- 3. Составить программу, которая формирует очередь, добавляя в неё произвольное количество компонент.
- Билет 10.
- 1. Понятие алгоритма. Интуитивное понятие алгоритма.
- 2. Функции субд.
- Билет 11.
- 1. Структура данных типа стек. Логическая структура стека. Машинное представление стека и реализация операций.
- 2. Принципы и виды отладки программного средства. Автономная отладка программного средства. Комплексная отладка программного средства.
- 3. Дан массив типаwordразмерностьюn. Найти сумму всех элементов, не превышающих заданногоm, далее вывести на экран.
- Билет 12.
- 1. Сети Петри. Моделирование процессов на основе сетей Петри.
- 2. Модели объектов проектирования .
- Билет 13.
- 1. Концепции информационного моделирования. Создание моделей на языкеUml.
- 2. Модели систем управления данными: сетевая, иерархическая, реляционная модель.
- Билет 14.
- 1. Принципы создания компонент в визуальных средах разработки.
- 2. Жизненный цикл программного обеспечения. Модели жизненного цикла по: каскадная, спиральная. Стадии, фазы работы жизненного цикла.
- Билет 15.
- 1. Деревья. Основные определения. Логическое представление и изображение деревьев. Бинарные деревья. Машинное представление деревьев в памяти эвм. Алгоритмы прохождения деревьев.
- 2. Реляционная модель данных. Базовые понятия. Отношения и свойства отношений. Составляющие реляционной модели данных.
- Билет 16.
- 1. Предваренная, скулемовская и клазуальная формы. Логическое следование. Унификация. Алгоритм унификации. Исчисление метода резолюций.
- 2. Структура внешнего описания пс. Качество по. Критерии и примитивы качества.
- Билет 17.
- 1. Понятия прерывания. Виды прерываний. Механизмы прерываний.
- 2. Стадии и этапы разработки базы данных.
- 3. Дан массив типаwordразмерностьюn. Найти сумму всех элементов не прерывающих заданногоm, далее вывести на экран.
- Билет 18.
- 1. Понятие о способах коммутации в распределенных вычислительных системах(коммутации каналов, коммутация пакетов).
- 2. Процессы управления разработкой пс. Структура управления разработки пс. Планирование составление расписания по разработке пс. Аттестация пс.
- 3. НаписатьHtmLкод для отображения в браузере таблицы:
- Билет 19.
- 1. Характеристики транспортного и прикладного уровней стека протоколовTcp/ip.
- 2. Трехуровневая архитектура схем баз данных в субд.
- 3. НаписатьHtmLкод для отображения в браузере таблицы:
- Билет 20.
- 1. Формальные языки и грамматики. Классификация грамматик по Хомскому.
- 2. Методы разработки структуры пс. Восходящая разработка пс. Нисходящая разработка. Конструктивный подход. Архитектурный подход разработки пс.
- Билет 21.
- 1. Конечные автоматы, автомат со стековой памятью (магазин).
- 2. Организация шин.
- Билет 22.
- 1. Сети Петри. Моделирование процессов на основе сетей Петри.
- 2. Организация памяти эвм.
- Билет 23.
- 1. Понятия прерывания. Виды прерываний. Механизмы прерываний.
- 2. Инструментальные среды разработки и сопровождения программных средств и принципы их классификации. Основные классы инструментальных сред разработки и сопровождения программных средств.
- Билет 24.
- 1. Динамическое поведение объектов. Состояния, события, сигналы и сообщения. Модели взаимодействия объектов.
- 2. Типы структур вычислительных машин и систем, перспективы и развития.
- Билет 25
- 1. Структура данных типа стек. Логическая структура стека. Машинное представление стека и реализация операций.
- 2. Основные понятия, определения и назначение сапр
- 3. Составить программу, которая формирует очередь, добавляя в неё произвольное количество компонент.
- Билет 26.
- 1. Сравнительный анализ алгоритмов поиска: линейный, двоичный.
- 2. Факторы, определяющие развитие архитектуры вычислительных систем.
- 3. Составить программу, которая формирует очередь, добавляя в неё произвольное количество компонент.
- Билет 27.
- 1. Рекурсивные функции. Лямбда- исчисление Черча.
- 2. Обеспечивающие системы сапр.
- Билет 28.
- 1. Память. Типы адресов. Виды распределения памяти.
- 2. Архитектура системы команд.
- 3. Найти в массиве максимальный элемент и его индекс. Вывести на печать.
- Билет 29.
- 1. Аппаратура передачи данных (модемы).
- 2. Проектные процедуры в сапр.
- Билет 30.
- 1. Характеристика канального и сетевого уровней стека протоколовTcp/ip.
- 2. Стековая архитектура вычислительных машин.
- Билет 31
- 1. Синтаксический разбор. Классификация методов синтаксического разбора.
- 2. Интеграция систем автоматизации проектирования и управления(cad–cam–capp– системы).
- Билет 32
- 1. Понятие алгоритма. Интуитивное понятие алгоритма.
- 2. Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств. Особенности объектного подхода к разработке внешнего описания программного средства.
- 3. Указать к какому классу относится каждый из перечисленныхIPадресов:
- Билет 33.
- 1. Объявление и реализация классов на языке Паскаль.
- 2. Архитектура клиент-сервер. Распределенные базы данных.
- Билет 34.
- 1. Характеристики транспортного и прикладного уровней стека протоколовTcp/ip.
- 2. Вычислительные методы решения задач на эвм. Приближения функций. Интерполяция и Метод наименьших квадратов.
- Билет 35.
- 1. Компоненты и интерфейсы. Диаграммы физического уровня.
- 2. Правовые вопросы организации Интернет-сайта.
- Билет 36.
- 1. Структуры данных типа очередь. Логическая структура очереди. Машинное представление очередиFifOи реализация операций. Очереди с приоритетами.
- 2. Моделирование как процесс познания. Математическая модель, понятие вычислительного эксперимента и его структура.
- 3. Составить программу, которая формирует стек, добавляя в него произвольное количество компонент.
- Билет 37
- 1. Улучшенные методы сортировки. Сортировка Шелла, Хоара, улучшенная сортировка выбором. Сортировка с помощью дерева.
- 2. Правовые вопросы, возникающие при использовании электронной почты.
- 3. Составить программу, которая формирует стек, добавляя в него произвольное количество компонент.
- Билет 38.
- 1. Классификация ос. Требования, предъявляемые к ос.
- 2. Понятие системы. Математическое определение системы. Классификация систем.
- Билет 39.
- 1. Понятия файла. Структура файла. Реализация файлов
- 2. Виды объектов авторского права. Виды авторских прав. Программы для эвм и базы данных, как объектов авторского права.
- 3. Подсчитать сколько раз в массиве встречается заданный элементN. Вывести количество данных вхождений.
- Билет 40.
- 1. Характеристики локальных вычислительных сетей типаEthernet.
- 2. Нормальный алгоритм Маркова.
- 3. Написать кодcssфайла в котором при помощи псевдоклассов описывается поведение ссылок отличное от стандартного.
- Билет 41.
- 1. Взаимодействие узлов с использованием стека протоколовTcp/ip.
- 2. Объекты патентного права.
- 3. Указать к какому классу относится каждый из перечисленныхIPадресов:
- Билет 42.
- 1. Машина Тьюринга.
- 2. Уровни моделирования. Общая характеристика и особенности. Моделирование на микроуровне. Обобщенная модель и моделирование тепловых систем (краевая задача для уравнения теплопроводности)
- 2) Уравнение теплопроводности
- Билет 43.
- 1. Архитектура системы команд.
- 2. Уровни моделирования. Моделирование на макроуровне. Типичная общая модель и моделирование электрических систем.
- Билет 44.
- 1. Структуры данных типа очередь. Логическая структура очереди. Машинное представление очередиFifOи реализация операций. Очереди с приоритетами.
- 2. Принципы построения современных эвм.
- 3. Найти в массиве максимальный элемент и его индекс. Вывести на печать.
- Билет 45.
- 1. Характеристика канального и сетевого уровней стека протоколовTcp/ip.
- 2. Численное решение задачи Коши для обыкновенных дифференциальных уравнений. Метод Эйлера. Одношаговые и многошаговые методы.
- 3. Указать к какому классу относится каждый из перечисленныхIPадресов: