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

1. Виды алгоритмов поиска. Линейный алгоритм. Данный алгоритм является простейшим алгоритмом поиска и в отличие, например, от двоичного поиска, не накладывает никаких ограничений на функцию и имеет простейшую реализацию. Поиск значения функции осуществляется простым сравнением очередного рассматриваемого значения (как правило, поиск происходит слева направо, т.е. от меньших значений аргумента к большим) и, если значения совпадают (с той или иной точностью), то поиск считается завершённым. Двоичный поиск (также известен, как метод деления пополам и метод половинного деления) — алгоритм нахождения заданного значения монотонной (невозрастающей или неубывающей) функции. Поиск основывается на теореме о промежуточных значениях. Используется в информатике, вычислительной математике и математическом программировании.

2. Сортировка методом вставки на первом шаге алгоритма выполняется сортировка первых двух элементов массива. Далее добавляется третий элемент, который занимает позицию среди элементов в соответствие со своим значением. Затем в этот список вставляется четвёртый элемент и т. Д. Процесс продолжается до тех пор, пока все элементы не будут отсортированы.

  • Сортировка методом выбора Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке.

  • Быстрая сортировка. Общая схема: из массива выбирается некоторый опорный элемент a[i], запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо, теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого, для обоих под массивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру. В конце получится полностью отсортированная последовательность.

  • Метод Шелла. Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]), ... , (a[7], a[15]).

2. Потом сортируем каждую из четырех групп по 4 элемента (a[0], a[4], a[8], a[12]), ..., (a[3], a[7], a[11], a[15]).

3. Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14]). 4. В конце сортируем вставками все 16 элементов.

4. В конце сортируем вставками все 16 элементов.

4Что такое список: пустая структура – это список; список – это начальный узел (голова) и связанный с ним список. struct Node {char word[40]; // слово int count; // счетчик повторений Node *next; // ссылка на следующий элемент };

Указатель на эту структуру:typedef Node *PNode;

Адрес начала списка: PNode Head = NULL;

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

FIFO = First InFirst Out

«Кто первым вошел, тот первым вышел».

Операции с очередью: 1).добавить элемент в конец очереди (PushTail = втолкнуть в конец); 2). удалить элемент с начала очереди (Pop).

6. Дерево – это структура данных, состоящая из узлов и соединяющих их направленных ребер (дуг), причем в каждый узел (кроме корневого) ведет ровно одна дуга.

Корень – это начальный узел дерева.

Лист – это узел, из которого не выходит ни одной дуги.

С помощью деревьев изображаются отношения подчиненности (иерархия, «старший – младший», «родитель – ребенок»).

Предок узла x – это узел, из которого существует путь по стрелкам в узел x.

Потомок узла x – это узел, в который существует путь по стрелкам из узла x.

Родитель узла x – это узел, из которого существует дуга непосредственно в узел x.

Сын узла x – это узел, в который существует дуга непосредственно из узла x.

Брат узла x (sibling) – это узел, у которого тот же родитель, что и у узла x.

Высота дерева – это наибольшее расстояние от корня до листа (количество дуг).

Рекурсивное определение:

    1. Пустая структура – это дерево.

    2. Дерево – это корень и несколько связанных с ним деревьев.

Двоичное (бинарное) дерево – это дерево, в котором каждый узел имеет не более двух сыновей.

    1. Пустая структура – это двоичное дерево.

    2. Двоичное дерево – это корень и два связанных с ним двоичных дерева (левое и правое поддеревья).

Применение:

    1. поиск данных в специально построенных деревьях (базы данных);

    2. сортировка данных;

    3. вычисление арифметических выражений;

    4. кодирование (метод Хаффмана).

Структура узла:

struct Node {

Int data; // полезные данные

Node *left, *right; // ссылки на левого // и правого сыновей

};

typedef Node *PNode;

Ключ – это характеристика узла, по которой выполняется поиск (чаще всего – одно из полей структуры).

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

Как искать ключ, равный x:

    1. если дерево пустое, ключ не найден;

    2. если ключ узла равен x, то стоп.

    3. если ключ узла меньше x, то искать x в левом поддереве;

    4. если ключ узла больше x, то искать x в правом поддереве.

Обход дерева – это перечисление всех узлов в определенном порядке.

7Граф – это набор вершин (узлов) и соединяющих их ребер (дуг).

Направленный граф (ориентированный, орграф) – это граф, в котором все дуги имеют направления.

Цепь – это последовательность ребер, соединяющих две вершины (в орграфе – путь).

Цикл – это цепь из какой-то вершины в нее саму.

Взвешенный граф (сеть) – это граф, в котором каждому ребру приписывается вес (длина).

Связный граф – это граф, в котором существует цепь между каждой парой вершин.

k-cвязный граф – это граф, который можно разбить на k связных частей.

Полный граф – это граф, в котором проведены все возможные ребра (n вершин → n(n-1)/2 ребер).

Матрица смежности – это матрица, элемент M[i][j] которой равен 1, если существует ребро из вершины i в вершину j, и равен 0, если такого ребра нет.

Весовая матрица – это матрица, элемент W[i][j] которой равен весу ребра из вершины i в вершину j (если оно есть), или равен , если такого ребра нет.

Жадный алгоритм – это многошаговый алгоритм, в котором на каждом шаге принимается решение, лучшее в данный момент.

Шаг в задаче Прима-Краскала – это выбор еще невыбранного ребра и добавление его к решению.

В задаче Прима-Краскала жадный алгоритм дает оптимальное решение!

В целом может получиться не оптимальное решение (последовательность шагов)!

Алгоритм Дейкстры (E.W. Dijkstra, 1959)

  1. присвоить всем вершинам метку ∞;

  2. среди нерассмотренных вершин найти вершину j с наименьшей меткой;

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

  4. если остались необработанные вершины, перейти к шагу 2;

  5. метка = минимальное расстояние.

7Указатель – это переменная, в которую можно записывать адрес другой переменной (или блока памяти).

Объявление:

char *pC; // адрес символа

// (или элемента массива)

int *pI; // адрес целой переменной

float *pF; // адрес вещественной переменной

Как записать адрес:

int m = 5, *pI;

int A[2] = { 3, 4 };

pI = & m; // адрес переменной m

pI = & A[1]; // адрес элемента массива A[1]

pI = NULL; // нулевой адрес

  • при объявлении указателя надо указать тип переменных, на которых он будет указывать, а перед именем поставить знак *;

  • знак & перед именем переменной обозначает ее адрес;

  • знак * перед указателем в рабочей части программы (не в объявлении) обозначает значение ячейки, на которую указывает указатель;

  • для обозначения недействительного указателя используется константа NULL (нулевой указатель);

  • при изменении значения указателя на n он в самом деле сдвигается к n-ому следующему числу данного типа, то есть для указателей на целые числа на n*sizeof(integer) байт;

  • указатели печатаются по формату %p.

Нельзя использовать указатель, который указывает неизвестно куда (будет сбой или зависание)!

Динамические массивы

Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом.

Особенности:

    • все элементы имеют один тип

    • весь массив имеет одно имя

    • все элементы расположены в памяти рядом

Примеры:

    • список учеников в классе

    • квартиры в доме

    • школы в городе

    • данные о температуре воздуха за год

  • для выделения памяти в языке Си используются функции malloc и calloc;

  • в языке C++ удобнее использовать оператор new;

указатель = new тип [размер];

  • результат работы оператора new – адрес выделенного блока памяти, который нужно сохранить в указателе;

  • если оператор new вернул нулевой указатель (NULL), память выделить не удалось;

  • с динамическим массивом можно работать так же, как и с обычным (статическим);

  • для освобождения блока памяти нужно применить оператор delete:

delete указатель;

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

  2. Методы, подходы и технологии повышения производительности в работе с текстовыми процессорами.

  3. Общая характеристика и функциональные возможности табличных процессоров.

  4. Особенности использования табличных процессоров для графического представления данных.

13.Системы управления базами данных. Характеристика и функциональные возможности СУБД MS Access. СУБД Access использует реляционную модель базы данных, в которой данные представлены в виде взаимосвязанных таблиц (отношений по англ. - relations).

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

СУБД Access позволяет работать с объектами базы данных, к которым относятся таблицы, запросы, формы, отчеты, страницы доступа, макросы и модули.

14.Проектирование таблиц средствами СУБД MS Access. Понятие конструктора таблиц. Таблицы служат для хранения данных в определенной структуре. Таблицы непосредственно хранят информацию, относящуюся к конкретной предметной области.

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

пять вариантов создания таблицы: режим таблицы; мастер таблиц; импорт таблиц; связь с таблицами; конструктор.

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

Создание таблицы в режиме конструктора.

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

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