- •Введение
- •1.Понятие экономической информационной системы (эис)
- •1.1. Понятие системы
- •1.2. Понятие эис. Назначение эис
- •1.3.Классификация эис
- •1.4. Основные принципы и методы построения эис
- •1.4.1. Принципы построения и функционирования эис.
- •1.4.2.Структурный и объектно-ориентированный подходы к проектированию.
- •1.4.3.Понятие жц эис.
- •2.Теоретические основы работы с информацией
- •2.1. Понятие информации
- •2.2. Измерение количества информации
- •Задания на дом
- •2.3.Кодирование информации
- •2.3.1.Оптимальное основание кода
- •2.3.2.Запись натурального числа в двоичной системе
- •2.3.3.Код Грэя
- •2.3.4.Оптимальное кодирование
- •2.3.5.Помехозащищенное кодирование
- •2.4.Методы организации данных в памяти эвм
- •2.4.1.Типы данных, структуры данных и абстрактные типы данных
- •2.4.2.Время выполнения программ
- •2.4.3.Списки
- •2.4.4.Реализация списков
- •Реализация списков посредством массивов
- •Реализация списков с помощью указателей
- •Реализация списков с помощью курсоров
- •2.4.5.Стеки
- •2.4.6.Реализация стеков
- •2.4.7.Очереди
- •2.4.8.Реализация очередей
- •2.4.9.Графы и деревья
- •2.4.10.Некоторые сд для хранения графов и деревьев
- •3.Особенности работы с экономической информацией
- •3.1.Классификация и кодирование экономической информации.
- •3.2.Единая система классификации и кодирования
- •3.3.Штриховое кодирование
- •Алгоритм расчета контрольного разряда ean
- •4.Модели данных
- •4.1.Атрибуты, составные единицы информации, показатели, документы
- •4.2.Операции над сеи
- •4.3.Реляционная модель данных
- •4.3.1. Отношения, как основа реляционной модели данных
- •4.3.2. Операции над отношениями
- •Операции объединения, пересечения и разности отношений
- •Операция декартова произведения отношений
- •Отношение «список программистов» и результат выполнения проекции
- •Операция натурального соединения отношений
- •4.3.3. Нормализация отношений
- •4.3.4. Функциональные зависимости
- •4.3.5. Нормальные формы
- •Результат первого шага приведения к 2нф отношения преподаватель_предмет (отношение преподаватель в 2нф)
- •Результат первого и второго шагов приведения к 2нф отношения преподаватель_предмет (все отношения в 2нф)
- •4.3.8. Пример проектирования реляционной бд
- •5.Модели знаний
- •5.1. Классификация знаний
- •5.2. Продукционная модель представления знаний
- •5.3.Представление знаний в виде семантической сети
- •5.4. Фреймовая модель представления знаний
- •5.5. Логическая (предикатная) модель представления знаний
- •6.Моделирование предметных областей в экономике
- •6.1.Понятие модели предметной области
- •6.2.Структурная модель предметной области
- •6.2.1.Функциональная методология idef0
- •6.2.2. Функциональная методика потоков данных
- •6.3.Объектная модель предметной области
- •6.4. Сравнение методик моделирования предметной области
- •7.Алгоритмы, наиболее часто использующиеся при обработке информации в эис
- •7.1.Алгоритмы поиска
- •7.1.1.Поиск элемента в неупорядоченном массиве
- •7.1.2.Поиск элемента в упорядоченном массиве.
- •7.1.3.Фонетический поиск
- •7.2.Алгоритмы сортировки
- •7.2.1.Сортировка методом пузырька.
- •7.2.2.Сортировка вставками
- •7.2.3.Сортировка выбором
- •7.2.4.Пирамидальная сортировка
- •7.2.5.Быстрая сортировка.
- •7.2.6.Сортировка слиянием
- •7.3.Поиск на графах
- •7.3.1.Поиск в глубину
- •7.3.2.Поиск в ширину
- •7.4.Топологическая сортировка графа
- •7.5.Сетевое планирование
- •7.5.1.Алгоритм расчета наиболее ранних сроков наступления событий
- •7.5.2.Алгоритм расчета наиболее поздних сроков наступления событий
- •7.5.3.Алгоритм расчета резервов времени.
- •Литература Рекомендуемая основная литература
- •Рекомендуемая дополнительная литература
- •Приложение 1.Форматы штрих-кодов
- •Приложение 2. Коды некоторых стран
7.2.5.Быстрая сортировка.
Алгоритм быстрой сортировки является, по-видимому, самым эффективным алгоритмом сортировки массивов. В этом алгоритме для сортировки элементов массива X[1],X[2],...,X[N] из этих элементов выбирается некоторый элемент, значение которого берется в качестве опорного значения v, относительно которого переупорядочиваются элементы массива. Переупорядочивание заключается в том, чтобы для некоторого индекса j все элементы X[1],...,X[j] имели значение меньше v, а все элементы X[j+1],...,X[N] имели значение больше или равно v. Затем процедура рекурсивно применяется к частям массива, состоящим из элементов X[1],...,X[j] и X[j+1],...,X[N]. Желательно выбрать опорное значение так, чтобы сортируемый массив разбивался на две примерно равные части.
На рис.7.11 показаны шаги выполнения процедуры быстрой сортировки, выполняемые для массива, состоящего из чисел 3,1,4,1,5,9,2,6,5,3. На каждом шаге значение v выбирается как наибольшее значение из двух самых левых различных элементов части текущей части массива. Сортировка завершается, когда части массива, на которые разбивается исходный массив в процессе рекурсивных вызовов процедуры, будут содержать одинаковые элементы.
Алгоритм быстрой сортировки представлен блок-схемами на рис.7.12. Реализация алгоритма представлена в листинге 7.9.
Время выполнения алгоритма быстрой сортировки в худшем случае равно O(n2). Однако, в среднем время выполнения алгоритма быстрой сортировки равно O(nlog2n). Практика применения алгоритма быстрой сортировки показывает, что он более эффективен чем алгоритм пирамидальной сортировки, у которого время выполнения в худшем случае равно O(nlog2n).
Листинг 7.8
procedure QuickSort(var X:TMas;N:integer);
begin
QS(1,N,X)
end;
procedure QS(i,j:integer);
var pivot:elementtype; {Опорное значение}
pivotindex:integer; {Индекс элемента массива равного pivot}
k:integer; {Начальный индекс группы элементов >= pivot}
begin
pivotindex=findpivot(i,j);
if pivotindex<>0 then {Различные ключи найдены?}
begin
pivot:=X[pivotindex];
k:=partition(i,j,pivot);
QS(i,k-1);
QS(k,j)
end
end; {QS}
function findpivot(i,j:integer):integer;
var firstkey:elementtype; {Значение первого элемента, т.е. X[i]}
k:integer; {Текущий индекс при поиске различных ключей}
begin
firstkey:=X[i];
k:=i+1;
while not((k>j)or(X[k]<>firstkey)) do k:=k+1;
if k>j then return (0) {Различные элементы не найдены}
else if X[k]>firstkey then return(k)
else return(i)
end;
function partition(i,j:integer; pivov:typeelement):integer;
var l,r:integer;
begin
l:=i; r:=j;
while not(l>r) do
begin
SW(X[l],X[r]);
while X[l]<pivot do l:=l+1;
while X[r]>=pivot do r:=r-1;
end;
return(l)
end;
Реализацию процедуры SW см. в листинге 7.3
