
2)Динамическая память 1 байт = 8 бит
1 параграф = 24 байт
1 Кб = 210 байт
1 Мб = 220 байт
1 сегмент = 64 Кб = 216 байт
Модель оперативной памяти адрес = (сегмент, смещение)
Абсолютный адрес =
сегмент *16 + смещение
Параметры сравнения |
Статические переменные |
Динамические переменные |
Способ распределения памяти |
Автоматическое (во время компиляции) |
Управляется программой |
Место расположения |
Глобальные переменные – в сегменте кода, локальные – в сегменте стека |
В динамической памяти (куче) |
Способ доступа |
По имени (идентификатор) |
По адресу (указатель на место расположения в памяти) |
Примеры работы с динамической памятью #include <stdio.h>
#include <stdlib.h>
Int main() {
float *t;
int i,n;
printf(”\nn=”);
scanf(”%d”,&n);
t= (float *)malloc(n*sizeof(float));
for(i=0;i<n;i++) {
printf (”x[%d]=”, i);
scanf(”%f”,&(t[i]));
}
for(i=0;i<n;i++) {
if (i % 2 == 0) printf (”\n”);
printf(”\tx[%d]=%f”, i, t[i]);
}
free (t);
return 0;
}
3) Указатель – это переменная, значением которой является адрес области памяти
Описание указателей на Си int *t, n; n = *t; //разыменование; t = &n; //адрес Указатели и массивы int b[5] = {1, 1};
int *p, i;
for (i = 2; i < 5; i++)
b[i] = b[i-1]+b[i-2];
//-----------------
for (p = b+2; p != b+5; p++)
*p = *(p-1) + *(p-2);
33 Раскраска графа Определение. Пусть G=(V, E) – неориентированный граф и k – натуральное число.
Функция f: V®{1,…,k} называется раскраской графа.
Раскраска называется правильной, если для любых смежных вершин x,yÎV справедливо неравенство f(x) ≠ f(y). Число k – количество красок раскраски f.
Определение. Наименьшее число красок, необходимое для правильной раскраски графа G называется хроматическим числом графа G.
Правильную раскраску таким числом красок будем называть оптимальной.
Хроматическое число обозначается через χ(G).
Алгоритм раскраски графа Упорядочиваем вершины графа G: V={v1,v2,…,vn}.
Вершину v1 красим первой краской.
Предположим, что вершины v1,…,vi уже раскрашены и на это использовано k красок.
Если на раскрашенные вершины, смежные с vi+1, использованы все краски, то vi+1 раскрашиваем k+1 краской.
Если среди k красок найдется краска, которая не использована для вершин, смежных с vi+1, то вершину vi+1 красим этой краской. Пример проблемы Проблема возникла в математике в середине 19 века.
Первоначально вопрос формулировался так: сколько нужно красок для раскраски любой географической карты, при которой соседние страны раскрашены в разные цвета?
Достаточно ли четырех красок для раскраски любой географической карты?
Достаточно ли четырех красок, чтобы раскрасить любой планарный граф (граф, в котором можно так расположить вершины, что ребра, соединяющие их, не пересекаются).
Задачи Необходимо выполнить некоторое множество V={v1,v2,…,vn} работ.
Имеется множество S={s1,s2,…,sr} ресурсов, необходимых для выполнения этих работ.
Каждая работа использует часть указанных ресурсов.
Одновременно могут выполняться работы, использующие разные ресурсы.
Все работы выполняются за одно и то же время t.
Необходимо распределить ресурсы так, чтобы общее время выполнения всех работ было минимальным.
Рассмотрим граф G с множеством вершин V. Две различные вершины v и v’ графа G смежны тогда и только тогда, когда для выполнения работ v и v’ требуется хотя бы один общий ресурс.
Наименьшее время выполнения всех работ равно χ(G)·t.
Оптимальная раскраска графа G определяет распределение ресурсов. 35) Эйлеровы графы Если граф имеет цикл (не обязательно простой), содержащий все ребра графа по одному разу, то такой цикл называется эйлеровым циклом, а граф называется эйлеровым графом.
Эйлеров цикл содержит не только все ребра (по одному разу), но и все вершины графа (возможно по несколько раз). Ясно, что эйлеровым может быть только связный граф.
Очевидно, что не все даже связные графы эйлеровы.
Эйлеров граф можно нарисовать на бумаге, не отрывая от нее карандаша. Вышеопределенные понятия распространяются аналогично на мультиграфы. Алгоритм поиска Эйлерова цикла Начиная с произвольной вершины, строим путь, удаляя ребра и запоминая вершины в стеке, до
тех пор пока множество смежности очередной вершины не окажется пустым, что означает, что путь удлинить нельзя.
Заметим, что при этом мы с необходимостью придем в ту вершину, с которой начали. В противном случае это означало бы, что вершина v имеет нечетную степень, что невозможно по условию.
Таким образом, из графа были удалены ребра цикла, а вершины цикла были сохранены в стеке S. Заметим, что при этом степени всех вершин остались четными. Далее вершина v выводится в качестве первой вершины эйлерового цикла, а процесс продолжается, начиная с вершины, стоящей на вершине стека. Вход: эйлеров граф G(V, E), заданный списками смежности (Γ[v] — список вершин смежных с вершиной v).
Выход: последовательность вершин эйлерового цикла.
S := Ø { стек для хранения вершин }
выбрать v ∈ V { произвольная вершина }
v → S { положить v в стек S }
пока S ≠ Ø выполнять
v ← S; v → S { v — верхний элемент стека }
если Γ[v] = Ø
то v ← S; вывод v
иначе
выбрать u ∈ Γ[v]
{ взять первую вершину из списка смежности }
u → S
Γ[v] := Γ[v] \ {u};
Γ[u] := Γ[u] \ {v} { удалить ребро (v, u) }
конец если
конец пока 36) Гамильтоновым циклом (путем) называют простой цикл (путь), содержащий все вершины графа.Граф, содержащий гамильтонов цикл, называется гамильтоновым графом.
Алгоритм. Поиск гамильтоновых циклов выбрать произвольную вершину a
a ® PATH
N(a) ¬ V(a) //вершины, смежные с а
пока PATH ≠Æ выполнять
x ¬ top(PATH)
если N(x) ≠Æ
то взять y Î N(x)
N(x) ¬ N(x) - y
если вершина y не находится в PATH
то y ® PATH
N(a) ¬ V(a)
если PATH содержит все вершины
то если y смежна с a
то выдать цикл
иначе удалить вершину x из PATH Связи между Эйлеровым и Гамельтоновым циклом Реберным графом Gl графа G называется граф имеющий столько же вершин, сколько ребер у графа G. Ребро между двумя вершинами графа Gl существует тогда и только тогда, когда ребра графа G, соответствующие этим двум вершинам, смежны (т. е. инцидентны одной и той же вершине графа G).
Имеют место следующие утверждения о взаимоотношениях между эйлеровыми и гамильтоновыми циклами:
Если G имеет эйлеров цикл, то Gl имеет как эйлеров, так и гамильтонов циклы.
Если G имеет гамильтонов цикл, то Gl также имеет гамильтонов цикл. 6)Стек-это линейный список, в котором все включения и исключения (и всякий доступ) делаются в одном конце списка Очередь -- это линейный список, в котором все включения производятся на одном конце списка, все исключения – на другом его конце.
Дек (очередь с двумя концами ) - это линейный список, в котором все включения и исключения производятся на обоих концах списка Операции со стеками makenull (S) – делает стек S пустым
create(S) – создает стек
top (S) – выдает значение верхнего элемента стека, не удаляя его
pop(S) – выдает значение верхнего элемента стека и удаляет его из стека
push(x, S) – помещает в стек S новый элемент со значением x
empty (S) - если стек пуст, то функция возвращает 1 (истина), иначе – 0 (ложь). Операции над очередью
1 makenull (Q) – делает очередь Q пустой
2 create(Q) – создает очередь
3 first (Q) – выдает значение первого элемента очереди, не удаляя его
4 outqueue(Q) – выдает значение первого элемента очереди и удаляет его из очереди
5 inqueue(x, Q) – помещает в конец очереди Q новый элемент со значением x
empty (Q) - если очередь пуста, то функция возвращает 1 (истина), иначе – 0 (ложь). Реализация очереди
struct list
{
int data;
struct list * next;
}
typedef struct queue
{
struct list *first;
struct list *end;
} Queue;
8) Отношения Определение. Пусть А и В —множества.
Отношением из А в В называется любое подмножество множества АхВ.
Если А = B, то говорят, что отношение задано, или определено, на А (или просто, что это — отношение на множестве A).
Если R — отношение из A в B и (а, b)ÎR, то пишут аRb.
A — область определения отношения R,
В —множество его значений.
Определение. Отношение {(b, а) | (а, b) Î R} называется обратным к отношению R и часто обозначается через R-1.
Свойство отношений Определение. Пусть A—множество и R — отношение на A. Отношение R называется
рефлексивным, если аRа для всех a из А,
симметричным, если аRb влечет bRa для a и b из A,
транзитивным, если аRb и bRс влекут аRс для а, b и с из A. Элементы а, b и с не обязаны быть различными.
Рефлексивное, симметричное и транзитивное отношение называется отношением эквивалентности.
Важное свойство любого отношения эквивалентности R, определенного на множестве A, заключается в том, что оно разбивает множество A на непересекающиеся подмножества, называемые классами эквивалентности.
Типы графов Ориентированный
Смешанный
Изомерный
Вершины, соединённые ребром или дугой, называются смежными.
Рёбра, имеющие общую вершину, тоже называются смежными.
Ребро (или дуга) и любая из его вершин называются инцидентными.
Маршрут в
графе - это последовательность вершин
и рёбер
,
где любые два "соседа" инцидентны.
Рёбра и вершины в маршруте могут
повторяться. Если начальная и конечная
вершины совпадают, то маршрут
называется замкнутым.
Если все вершины и рёбра маршрута
различны, то он называется цепью.
Замкнутая цепь - это цикл. Длина
маршрута равна
числу входящих в него рёбер.
Ориентированный
граф G(V,
)
называется сильно
связным,
если для любых его вершин u и vсуществуем
путь из u в v и
путь из v в u