Similar presentations:
Дерева і вирази
1. Дерева і вирази
12.04.2023Всякая вещь есть форма проявления
беспредельного разнообразия.
Козьма Прутков
2. Подання виразів деревами
В представленні арифметичного виразу, щоскладається з цілих чисел, змінних, операцій,
бінарним деревом знак операції розміщується в
корені дерева, перший операнд - у лівому
піддереві, другий - у правому.
Всі числа та змінні виразу представлені
листками, а знаки операцій - внутрішніми
вузлами.
3. Подання виразів деревами
Наприклад: 3*(5-x)+y+
y
*
3
-
5
x
4. Подання виразів деревами
Різні порядки обходу дерев безпосередньозв`язані з відповідними формами запису виразів.
Прямий та обернений порядки обходу
відповідають прямому та інверсному польським
записам виразу: + * 3 - 5 x y ;
35x-*y+ .
Проходження дерева в симетричному порядку
відповідає
повному
дужковому
запису:
((3 * (5 - x)) + y) , або частковому дужковому
запису, якщо враховані властивості операцій:
3 * (5 - x) + y .
5. Обробка виразів, представлених деревами
Розглянемо вирази, що містять тількиневід`ємні цілі числа, знаки операцій +, -, *, /,
позначення змінних x, y, z та дужки ().
Припускаємо, що пропуски та символи нового
рядка можливі в будь якому місці запису виразу,
представленому повним дужковим записом.
Бінарне дерево будемо зберігати у стандартній
формі, використовуючи розглянуті раніше типи
даних. Вважаємо, що у дереві знаки операцій та
змінні у вузлах задані кодами своїх символів, а
числа зберігаються з оберненими знаками.
6. Обробка виразів, представлених деревами
Основні підзадачі:введення виразів (використовуємо повний
дужковий запис);
виведення виразу (повний дужковий запис);
обробка виразу:
аналітичне диференціювання виразів;
спрощення виразів.
Pr_1
7. Введення виразів
Повний дужковий запис виразу є рекурсивноюструктурою, синтаксис якої можна подати БНФ:
<вираз> ::= <число> | <змінна> | ( <вираз>
<операція> <вираз> )
<число> ::= {<цифра>}*
<цифра> ::= 0 | 1 | 2| 3 | 4 | 5 | 6 | 7 | 8 | 9
<змінна> ::= x | y | z
<операція> ::= + | - | * | /
Це й визначає організацію функцій
розпізнавання.
для
8. Виведення виразів
Друкування виразу у повному дужковомузаписі
використовує
обхід
дерева
у
симетричному порядку.
9. Аналітичне диференціювання виразів
Аналітичне диференціювання виразів (зазмінною х) здійснюється згідно з формулами:
x` = 1; a` = 0; (a – константа, або інша змінна)
(u + v)` = u` + v` ;
(u - v)` = u` - v` ;
(u*v)` = u`*v + u*v` ;
(u/v)` = (u`*v – u*v`) / (v*v) .
Це й визначає організацію функції для
диференціювання. Копіювання дерева-виразу
оформлено окремою функцією.
10. Аналітичне диференціювання виразів
При диференціюванні отримуємо не зовсімзвичні результати.
Наприклад:
((3 * (x + 1)) – (z / x))` =
(0 * (x +1) + 3 * (1 + 0)) – (0 * x – z * 1) / (x *x)
Причина – відсутні спрощення при виконанні
диференціювання.
Бажано спростити отримане дерево-вираз.
11. Спрощення виразів
Спрощення виразів - за формулами:u+0=u;0+u=u;
u–0=u;
u*0=0; 0*u=0;
u*1=u; 1*u=u;
0/u=0; u/1=u;
Це й визначає організацію функції для
спрощення. В окрему функцію оформлено
вилучення дерева.
((3 * (x + 1)) – (z / x))` = (3 – (0 - z) / (x * x)) Pr_2
12. Вирази та дерева
Звісно, що розмаїття способів представленнянавіть для арифметичних виразів не зводиться до
розглянутих.
Наприклад, для арифметичного виразу, що
містить невід`ємні цілі числа, змінні x, y, z та
операції +, -, *, / й представляється бінарним
деревом у стандартні формі, можна використати
й інше кодування операндів та операцій:
цілі числа представляти своїми значеннями;
операції - кодами: ‘+’ -1, ‘-’ -2, ‘*’ -3, ‘/’ -4 ;
змінні - кодами: x -5, y -6, z -7 .
13. Зауваження
Навмиснобула спрощена задача аналізу
помилкових ситуацій при введенні виразів (до
першої помилки, але продовжуючи процес).
Не є принциповим обмеження – лише до трьох
змінних у виразі: x, y, z (легко розширюється на
довільні кількість та імена змінних довжини 1).
Спрощення дерев-виразів нескладно суттєво
розширити, наприклад, за рахунок здійснення
обчислення константних виразів.
14. Підсумки
Були розглянуті можливості представленняформул деревами.
Використання дерев для представлення формул
виявилось зручним для виконання нетривіальної
роботи з формулами, здійснення аналітичних
перетворень.
Внаслідок рекурсивної природи даних досить
прозорими та привабливими виглядають саме
рекурсивні алгоритми.
15. Поради
Обирати(у разі можливості) найбільш
адекватний спосіб представлення для формул.
Розібратися
з термінологією, способами
подання формул.
Самостійно реалізувати інші дії з деревамиформулами, розглянути для побудови дерева
інші способи запису виразів.
16. Задачі
Написати функцію для друкування виразу,поданого бінарним деревом, що містить цілі
числа, змінні x, y, z та знаки операцій +, -, *, /
з мінімальною кількістю дужок. Вважати, що
зовнішні дужки не друкуються, операції
однакового старшинства виконуються зліва
направо.
Написати функцію для обчислення значення
виразу , поданого бінарним деревом, що містить
цілі числа, змінні x, y, z та знаки операцій +, -, *,
/, при заданих значеннях змінних.
17. Задачі
Написатифункцію
для
спрощення
арифметичного виразу, зображеного бінарним
деревом. Повинні виконуватися перетворення,
коли:
– в операції “+” доданок 0;
– в операції “-” другий операнд 0;
– в операції “*” операнд 0 або 1;
– в операції “/” ділене 0 або дільник 1.
Передбачити
можливість
обчислення
константних виразів й врахування обчислених
значень при спрощенні.
18. Задачі
Розглянути питання представлення та обробкилогічних виразів. Записати функції для роботи з
формулами, що містять логічні константи, змінні,
операції: кон'юнкції, диз'юнкції, заперечення,
суми за модулем два.
Написати
функцію для перевірки, чи
представляє дерево «правильний арифметичний
вираз».