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

Билет №20

1.Понятие алгоритма и его свойства. Программа и принцип программного управления. Поколения ЭВМ.

Алгоритм - точное предписание исполнителю совеpшить определенную последовательность действий для достижения поставленной цели за конечное число шагов.

Свойства алгоритма:

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

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

Результативность (конечность) – алгоритм должен приводить к решению задачи за конечное число шагов.

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

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

Принципы программного управления

Используемый в современных компьютерах принцип программного управления был предложен в 1945 году Дж. фон Нейманом. Этот принцип включает следующие положения.

1. Информация кодируется в двоичной форме и разделяется на единицы информации, называемые словами.

2. Разнотипные слова информации различаются по способу использования, но не способами кодирования.

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

4. Алгоритм представляется в форме последовательности управляющих слов, называется командами. Алгоритм, представленный в терминах машинных команд, называется программой.

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

Поколения ЭВМ

Поколение

Годы

Элементная база

Быстродействие

Объем ОП

Устройства ввода-вывода

1

С 1946

Электронная лампа

10-20 тыс. операций в 1с.

2 Кбайт

Перфоленты, перфокарты

2

С 1955

Транзистор

100-1000 тыс. операций в 1с.

2-32 Кбайт

Магнитная лента, магнитные барабаны

3

С 1966

Интегральная схема (ИС)

1-10 млн. операций в 1с.

64 Кбайт

Многотерминальные системы

4

С 1975

Большая интегральная схема (БИС)

1-100 млн. операций в 1с.

1-64 Мбайт

Сети ПЭВМ

5

С 90-х годов 20 в.

Сверхбольшая интегральная схема (СБИС)

Более 100 млн. операций в 1с.

Оптические и лазерные устройства

2.Понятие сортировки массивов. Методы сортировки. Разработать программный модуль для сортировки любым методом.

Сортировка – алгоритм для упорядочивания элементов в списке.

Список алгоритмов сортировки

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

Алгоритмы устойчивой сортировки

Сортировка выбором (Selection sort) — Сложность алгоритма: O(n2); поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка

Сортировка пузырьком (англ. Bubble sort ) — сложность алгоритма: O(n2); для каждой пары индексов производится обмен, если элементы расположены не по порядку.

Сортировка перемешиванием (Шейкерная, Cocktail sort, bidirectional bubble sort) — Сложность алгоритма: O(n2)

Гномья сортировка — имеет общее с сортировкой пузырьком и сортировкой вставками. Сложность алгоритма — O(n2).

Сортировка вставками (Insertion sort) — Сложность алгоритма: O(n2); определяем где текущий элемент должен находиться в упорядоченном списке и вставляем его туда

Сортировка слиянием (Merge sort) — Сложность алгоритма: O(n log n); требуется O(n) дополнительной памяти; выстраиваем первую и вторую половину списка отдельно, а затем — сливаем упорядоченные списки

Сортировка с помощью двоичного дерева (англ. Tree sort) — Сложность алгоритма: O(n log n); требуется O(n) дополнительной памяти

Алгоритм сортировки Timsort (англ. Timsort) — Сложность алгоритма: O(n log n); требуется O(n) дополнительной памяти; Комбинированный алгоритм (используется сортировка вставками и сортировка слиянием. Разработан для использования в языке Python[4]

Сортировка подсчётом (Counting sort) — Сложность алгоритма: O(n+k); требуется O(n+k) дополнительной памяти (рассмотрено 3 варианта)

Блочная сортировка (Корзинная сортировка, Bucket sort) — Сложность алгоритма: O(n); требуется O(k) дополнительной памяти и знание о природе сортируемых данных, выходящее за рамки функций "переставить" и "сравнить".

Алгоритмы неустойчивой сортировки

Сортировка выбором (Selection sort) — сложность алгоритма: O(n^2); поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка

Сортировка Шелла (Shell sort) — сложность алгоритма: O(n \log^2{n}); попытка улучшить сортировку вставками

Сортировка расчёской (Comb sort) — сложность алгоритма: O(n \log{n})

Пирамидальная сортировка (сортировка кучи, Heapsort) — сложность алгоритма: O(n \log{n}); превращаем список в кучу, берём наибольший элемент и добавляем его в конец списка

Плавная сортировка (Smoothsort) — сложность алгоритма: O(n \log{n})

Быстрая сортировка (Quicksort), в варианте с минимальными затратами памяти — сложность алгоритма: O(n \log{n}) — среднее время, O(n^2) — худший случай; широко известен как быстрейший из известных для упорядочения больших случайных списков; с разбиением исходного набора данных на две половины так, что любой элемент первой половины упорядочен относительно любого элемента второй половины; затем алгоритм применяется рекурсивно к каждой половине. При использовании O(n) дополнительной памяти, можно сделать сортировку устойчивой.

Introsort — сложность алгоритма: O(n \log{n}), сочетание быстрой и пирамидальной сортировки. Пирамидальная сортировка применяется в случае, если глубина рекурсии превышает \log{n}.

Patience sorting — сложность алгоритма: O(n \log{n}) — наихудший случай, требует дополнительно O(n) памяти, также находит самую длинную увеличивающуюся подпоследовательность

Stooge sort — рекурсивный алгоритм сортировки с временной сложностью O(n^{\log_{1{,}5}{3}}) \approx O(n^{2.71}).

Поразрядная сортировка (она же цифровая сортировка) — сложность алгоритма: O(nk); требуется O(k) дополнительной памяти.

Непрактичные алгоритмы сортировки

Bogosort — O(n·n!) в среднем. Произвольно перемешать массив, проверить порядок.

Сортировка перестановкой — O(n·n!) — худшее время. Для каждой пары осуществляется проверка верного порядка и генерируются всевозможные перестановки исходного массива.

Глупая сортировка (Stupid sort) — O(n3); рекурсивная версия требует дополнительно O(n2) памяти

Bead Sort — O(n) or O(√n), требуется специализированное аппаратное обеспечение

Блинная сортировка (Pancake sorting) — O(n), требуется специализированное аппаратное обеспечение

Алгоритмы, не основанные на сравнениях

Блочная сортировка (Корзинная сортировка, Bucket sort)

Лексикографическая или поразрядная сортировка (Radix sort)

Сортировка подсчётом (Counting sort)

Прочие алгоритмы сортировки

Топологическая сортировка

Внешняя сортировка

Пузырьковая сортировка С#:

void BubbleSort(ref int[] A)

{

for (int i = 0; i < A.Length; i++)

{

for (int j = 0; j < A.Length - 1; j++)

{

if (A[j] > A[j + 1])

{

int z = A[j];

A[j] = A[j + 1];

A[j + 1] = z;

}

}

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]