- •0Міністерство освіти і науки, молоді та спорту україни
- •«Теорія алгоритмів» Методичні вказівки
- •2.1 Види алгоритмів
- •2.2 Організація лінійних алгоритмів .
- •2.3 Організація розгалужень в са
- •2.4 Організація циклів.
- •Розділ 3. Моделі обчислень
- •3.1 Скінченний автомат, як модель перетворювача дискретної інформації
- •3.2 Визначення та властивості скінченого автомату
- •3.3 Автомат Мілі
- •3.4 Автомат Мура
- •3.5 Машина Тюрінга.
- •3.5.1 Історія
- •3.5.2 Визначення машини т.
- •3.5.3 Можливості машини Тюрінга
- •3.5.4 Приклади
- •4.1 Необхідність структурування даних. Поняття Структури даних
- •4.2 Послідовне і зв’язне розподілення даних в пам’яті еом.
- •4.2.2 Зв'язаний розподіл в пам'яті.
- •4.3 Лінійні та нелінійні структури даних.
- •4.3.1 Лінійні струтури даних
- •Однозв'язні списки
- •Двохзв'язні списки
- •4.3.2 Нелінійні структури даних
- •4.4 Статичні структури даних.
- •4.5 Уявлення в пам’яті машини множин; операції над множинами. Уявлення графів. Дерева і бінарні дерева. Характеристики дерев. Ліс. Уявлення бінарних дерев. Перехід від дерева до бінарного дерева.
- •4.5.1 Множини. Опис множин, операції над множинами.
- •4.5.2 Поняття графа як структури даних.
- •Застосування графів
- •4.5.3 Поняття дерева як структури даних
- •4.5.4 Бінарне дерево
- •Перехід від дерева до бінарного дерева
- •4.6 Порядок обходу вузлів дерева: обернений і внутрішній. Властивості обходу вузлів дерева: прямий, обернений і внутрішній. Властивості обходу дерев. Порядок та властивості обходу дерева.
- •5.1 Предмет теорії комбінаторних алгоритмів (обчислювань)
- •5.2 Правила множення і суми для знаходження
- •5.3 Види задач підрахунку числа елементів множин
- •1. Метод рекурентних співвідношень.
- •2. Метод включення і виключення.
- •5.4 Елементи комбінаторики. Набори: набори з повторюванням; специфікація набору
- •Розділ 6 Ефективність алгоритмів
- •6.1. Характеристики алгоритмів.
- •6.2 Ємна та часова складність. Поліноміальна зв’язність.
- •6.3 Класи p та np
Однозв'язні списки
Однозв'язним списком (singly linked list) називається такий, де кожен елемент зв'язаний тільки з попереднім чи послідуючим.
Двохзв'язні списки
Для гнучкої роботи зі зв'язаними списками в кожен вузол можна включити навіть два зв'язка, що будуть указувати на два сусідніх елементи. Такі списки називають двохзв'язними.
Двохзв'язним списком (doubly linked list) називається такий список, де кожен елемент зв'язаний і з попереднім і з наступним.
Циклічно зв'язаним списком (circulary linked list) називається такий список, у якому останній вузол зв'язаний з першим вузлом. Тому завжди існує можливість доступу до будь-якого елемента списку. починаючи з довільно обраного.
Такий список можна описати як однозв'язний чи двозв'язаний:
Стеки - це дискретні, зв'язані, динамічні, рекурсивні інформаційні структури.
Для стеків характерно:
Складаються з елементів того самого типу. Тип елементів може бути кожним.
Зв'язок між елементами і доступ до стек здійснюється за допомогою типізованих покажчиків. По цьому на ряді з інформацією кожен елемент стека повинна мати покажчики на попередній елемент.
Кількість елементів стека заздагеліть не задається. Воно може змінюватися в процесі виконання програми. Розмір одного елемента стека не може перевищувати 64 Кбайт.
При описі типу - стек, використовується рекурсія.
Доступ до елементів стека послідовний і обмежений. Вштовхування елемента в стек (Push), виштовхування елемента зі стека (Pop) можливі тільки з одного кінця структури - вершини стека (Top). Тому при створенні і використанні стека потрібно заготовити перемінну покажчик на вершину стека Top. Це може бути нетипізований покажчик типу Pointer. Доступ до інформації в такій структурі реалізується за принципом "Останнім прийшов, першим пішов" Lifo (Last in, First out). Завдяки цій особливості стекам іноді дають наступне визначення:
Стек - це лінійний список, у якому всі операції вставки і видалення відбуваються тільки на одному з кінців списку.
Стеки зручно застосовувати в тих випадках, коли потрібно швидке включення, чи виключення елементів без змістовного змісту даних. Стеки широко застосовуються в трансляторах при реалізації рекурсивних процедур і функцій (при кожнім виклику чи процедури функції її стан запам'ятовується в стек і обробляється в зворотному порядку), при реалізації математичних обчислень (калькулятори).
Черги - це дискретні, зв'язані, динамічні, рекурсивні інформаційні структури.
Для черг характерно:
Складаються з елементів того самого типу. Тип елементів може бути будь-яким.
Зв'язок між елементами і доступ до черг здійснюється за допомогою типізованих і нетипізованих покажчиків. По цьому на ряді з інформацією кожен елемент черги повинний мати покажчик на наступний елемент.
Кількість елементів черги завчасно не задається. Воно може змінюватися в процесі виконання програми. Розмір одного елемента черги не може перевищувати 64 Кбайт.
При описі типу - черга, використовується рекурсія.
Доступ до елементів черги послідовний і обмежений. Він можливий із двох кінців. Один кінець черги, з якого можливе виключення елементів називається "головою" (Head), другий кінець - "хвіст" (Tail), з його здійснюється постановка елементів у чергу. Тому при створенні і використанні черги потрібно заготовити перемінні покажчики: на "голову" (Head) і "хвіст" (Tail). Це можуть бути нетипізовані покажчики типу Pointer. Доступ до інформації в такій структурі реалізується за принципом "Першим прийшов, першим пішов" Fifo (First in, First out). Завдяки цій особливості стекам іноді дають наступне визначення:
Черга - це лінійний список, у якому всі операції вставки відбуваються на одному з кінців списку а видалення - на іншому.
Ця структура даних в інформатику і програмування прийшла з життя - аналіз реальних черг (середня довжина черги, час перебування замовлення в черги, імовірність замовлення в постановці на чергу при обмеженні її довжини, дисципліна обслуговування черги). В інформатиці черги застосовуються для реалізації буфера клавіатури, багатозадачності, списки у виді черг реалізовані в мовах програмування Lisp, Prolog, Logo.
Деки - це дискретні, зв'язані, динамічні, рекурсивні інформаційні структури.
Для деків характерно:
Складаються з елементів того самого типу. Тип елементів може бути будь-яким.
Зв'язок між елементами і доступ до деку здійснюється за допомогою типізованих вказівників. По цьому, на ряду з інформацією, кожен елемент дека повинний мати вказівники на попередній елемент.
Кількість елементів дека заздагеліть не задається. Вона може змінюватися у процесі виконання програми. Розмір одного елемента дека не може перевищувати 64 Кбайт.
При описі типу - деків, використовується рекурсія.
Доступ до елементів дека послідовний і обмежений. Додавання і видалення елементів дека можливо з обох його кінців. Тому при створенні і використанні дека потрібно заготовити перемінні вказівники на вершини дека Left і Right. Це може бути нетипізований вказівник типу Pointer. Завдяки таким можливостям доступу декам іноді дають наступне визначення:
Дек - це лінійний список, у якому всі операції вставки і видалення можуть відбуватися на різних кінцях списку.
