- •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
3.5.4 Приклади
Наведемо програму для машини Тюрінга, яка обчислює функцію x+y, де x,y - натуральні числа. Необхідно домовитися про представлення цих чисел. Стандартним для машини Тюрінга є представлення натурального числа n послідовністю з n+1 одиниць.
Ідея вирішення могла б полягати у тому, щоб замінити крайній зліва та крайній справа символи "1" на "0", а роздільник "0" - на "1". Якби були доступні відповідні команди, це можна було б зробити просто і швидко, але ми обмежені жорсткими рамками машини Тюрінга. За таких умов схема алгоритму полягає в такому: рухатися вправо до виявлення першої одиниці (початок першого числа); як тільки вона буде виявлена, замінити її на нуль і перейти в інший стан s1. Потім рухатися вправо, поки 0, який розділяє два числа, не буде замінений на 1; при цьому знову змінити стан. Далі рухатися вправо до появи першого нуля (кінця другого доданку). Після цього зсунутися вліво, замінити останню 1 на 0 та зупинитися.
Програма може мати вигляд:
0s0 → 0 s0R
1s0 → 0 s1R
1s1 → 1 s1R
0s1 → 1 s2R
1s2 → 1 s2R
0s2 → 0 s3L
1s3 → 0 s4H.
Наведений приклад показує, що машина Тюрінга є дуже незручною для програмування. Ці незручності пов'язані з тим, що:
* немає довільного доступу до пам'яті; якщо, наприклад, машина вказує на першу комірку, а потрібно перейти до десятої, машина повинна послідовно переглянути другу, третю і т.д. комірку;
* неструктурованість записів на стрічці; заздалегідь невідомо, де закінчується одне число і починається інше;
* дуже обмежений набір команд; відсутні, наприклад, основні арифметичні операції.
Розділ 4. Структури данних
4.1 Необхідність структурування даних. Поняття Структури даних
Проблема структурування даних, інформації і знань виникає в результаті потреби створювати ефективні людино-машині комплекси для вирішення складних управлінських завдань. При цьому необхідно:
1) об'єднувати людей в команди,
2) створювати спеціальне програмне забезпечення,
3) використовувати комп'ютерні системи,
4) розробляти методику роботи персоналу з системою і виучувати персонал.
Лише в цьому випадку можна вирішувати поставлені завдання за допомогою інформаційних технологій швидше, надійніше і більш ефективно.
З одного боку, комп'ютери підсилюють "інтелектуальний" потенціал не лише окремо кожної людини, але і групи людей в цілому. З іншого боку, використання інформаційних технологій виводить людей на абсолютно нові, вищі рівні складності вирішення завдань, породжує нові сфери діяльності, які раніше були недоступні навіть розумінню.
Для того, щоб конструктивно зрозуміти проблему структуризації даних, інформації і знань, необхідно поглянути на неї в комплексі. По-перше, з позиції взаємодії людини з комп'ютером. По-друге, потрібно розібратися з термінологією - що таке дані, інформація і знання. По-третє, потрібно зрозуміти основні особливості людської пам'яті, мислення, розумної поведінки і чим вони відрізняються від пристрою і функціонування комп'ютерних систем.
Основний недолік людської пам'яті - забуття дрібних і не дуже дрібних фактів. Така "якість" нам часто заважає на практиці. З іншого боку, з психологічної точки зору - це одне з переваг нашої пам'яті, яке дозволяє людині адаптуватися до різних ситуацій, уникаючи зайвих стресових перевантажень.
Комп'ютерні системи такими "недугами" не страждають. З пам'яттю на дрібні деталі і на довгострокове запам'ятовування в комп'ютерів все гаразд. У цій якості комп'ютерні системи дуже добре доповнюють можливості людини. Проте, така не контрольована комп'ютерна здатність необмеженого запам'ятовування обертається серйозними проблемами пошуку необхідної інформації у великих масивах і її впорядковування.
З причини радикальної відмінності в структурах, принципах і формах інформаційних процесів у людини і комп'ютерних систем виникають дуже складні проблеми в реалізації спільної роботи людей і комп'ютерів. Використання комп'ютерних систем, інформаційних технологій і телекомунікацій породжує цілий спектр проблем, які властиві взаємодії людини з комп'ютером. Поняття людино-машиної взаємодії (англ. HCI - Human Computer Interaction) належить до розряду складних проблем, тому займає особливе місце в інформатиці.
Отже, проблема структуризації даних, інформації і знань є комплексною проблемою. Один з компонентів цієї проблеми зазвичай зв'язується з "Базами даних", інший - з "Призначеним для користувача інтерфейсом", третій - з "Інформаційною культурою людини і суспільства, інформаційною письменністю", четвертий - з "Технологіями збору і зберігання інформації", п'ятий - з "Технологіями представлення інформації". Цей список можна продовжувати далі.
Але найголовніше, що слід усвідомити, - проблема структуризації даних, інформації і знань є комплексною, і тому її потрібно вирішувати як прикладну проблему на стику багатьох галузей знань і технологій.
Дані - це основа інформації і відносяться до способу вистави, зберігання і елементарним операціям обробки інформації.
Дотримуючись концепції, що дані - це текст в деякому алфавіті, то поняття структури даних відноситься до синтаксичних правил представлення текстових структур.
На рівні структури даних можна виділити три аспекти роботи з даними:
Визначення даних (використовуючи правила структуризації, наприклад, що породжують граматики).
Маніпулювання даними і їх обробка (наприклад: збір, обчислення, перетворення, класифікація даних).
Управління даними (адміністрування даних: сортування, пошук, редагування).
Наприклад, файл - це послідовність з елементів однакової структури - записів. У свою чергу запис - є структурою, що складається з полів. Поле - це мінімальна іменована структура даних. Приклад - файл "Бібліотека"; запис - "Книга"; поля - "Автор" і "Назва".
Аналізуючи поняття структури даних, можна зробити простий вивід: дані - це структурована і формалізована символьна структура, яку можна легко представити, наприклад, у вигляді тексту.
Тепер можна дати конкретніше визначення данних на машинному рівні представлення інформації.
Незалежно від вмісту і складності будь-які дані в пам'яті ЕОМ представляються послідовністю двійкових розрядів, або бітів, а їх значеннями є відповідні двійкові числа. Дані, що розглядаються у вигляді послідовності бітів, мають дуже просту організацію або, іншими словами, слабо структуровані.
Під СТРУКТУРОЮ ДАНИХ в загальному випадку розуміють безліч елементів даних і безліч зв'язків між ними. Таке визначення охоплює всі можливі підходи до структуризації даних, але в кожному конкретному завданні використовуються ті або інші його аспекти. Тому вводиться додаткова класифікація структур даних, напрями якої відповідають різним аспектам їх розгляду. Перш ніж приступати до вивчення конкретних структур даних, дамо їх загальну класифікацію за декількома ознаками.
Поняття "ФІЗИЧНА структура даних" відображає спосіб фізичного представлення даних в пам'яті машини і називається ще структурою зберігання, внутрішньою структурою або структурою пам'яті.
Розгляд структури даних без обліку її вистави в машинній пам'яті називається абстрактною або ЛОГІЧНОЮ структурою. У загальному випадку між логічною і відповідною їй фізичною структурами існує відмінність, міра якої залежить від самої структури і особливостей того середовища, в якому вона має бути відбита. Унаслідок цієї відмінності існують процедури, що здійснюють відображення логічної структури у фізичну і, навпаки, фізичної структури в логічну. Ці процедури забезпечують, крім того, доступ до фізичних структур і виконання над ними різних операцій, причому кожна операція розглядається стосовно логічної або фізичної структури даних.
Розрізняються ПРОСТІ (базові, примітивні) структури (типи) дані і ІНТЕГРОВАНІ (структуровані, композитні, складні). Простими називаються такі структури даних, які не можуть бути розчленовані на складові частини, більші, ніж біти. З точки зору фізичної структури важливою є та обставина, що в даній машинній архітектурі, в даній системі програмування ми завжди можемо заздалегідь сказати, який буде розмір даного простого типа і яка структура його розміщення в пам'яті. З логічної точки зору прості дані є неділимими одиницями. Інтегрованими називаються такі структури даних, складовими частинами яких є інші структури даних - прості або у свою чергу інтегровані. Інтегровані структури даних конструюються програмістом з використанням засобів інтеграції даних, що надаються мовами програмування.
Залежно від відсутності або наявності явно заданих зв'язків між елементами даних слід розрізняти НЕЗВ'ЯЗНІ структури (вектори, масиви, рядки, стеки, черги) і ЗВ'ЯЗНІ структури (зв'язні списки).
Вельми важлива ознака структури даних - її мінливість - зміна числа елементів і (або) зв'язків між елементами структури. У визначенні мінливості структури не відбитий факт зміни значень елементів даних, оскільки в цьому випадку всі структури даних мали б властивість мінливості. За ознакою мінливості розрізняють структури СТАТИЧНІ, НАПІВСТАТИЧНІ, ДИНАМІЧНІ. Класифікація структур даних за ознакою мінливості приведена на рис. 1. Базові структури даних, статичні, напівстатичні і динамічні характерні для оперативної пам'яті і часто називаються оперативними структурами. Файлові структури відповідають структурам даних для зовнішньої пам'яті.
Рис.1. Класифікація структур даних
Важлива ознака структури даних - характер впорядкованості її елементів. За цією ознакою структури можна ділити на ЛІНІЙНІ І НЕЛІНІЙНІ структури.
Залежно від характеру взаємного розташування елементів в пам'яті лінійні структури можна розділити на структури з ПОСЛІДОВНИМ розподілом елементів в пам'яті (вектори, рядки, масиви, стеки, черги) і структури з ДОВІЛЬНИМ ЗВ'ЯЗНИМ розподілом елементів в пам'яті ( одинзв'язні, двозвязкові списки). Приклад нелінійних структур - багатозв'язкові списки, дерева, графи.
У мовах програмування поняття "Структури даних" тісно пов'язане з поняттям "Типи даних". Будь-які дані, тобто константи, змінні, значення функцій або вираження, характеризуються своїми типами.
Інформація за кожним типом однозначно визначає :
1) структуру зберігання даних вказаного типа, тобто виділення пам'яті і представлення даних в ній, з одного боку, і інтерпретація двійкової вистави, з іншою;
2) безліч допустимих значень, які може мати той або інший об'єкт описуваного типа;
3) безліч допустимих операцій, які застосовні до об'єкту описуваного типа.
