Что такое дерево понятий
Структуры данных. Деревья
Статья познакомит вас с понятием дерева как структуры данных, пояснит в каких случаях и для чего можно их применять:
1 Что такое деревья (в программировании)?
Математическое определение дерева — «граф без петель и циклов» вряд-ли пояснит рядовому человеку какие выгоды можно извлечь из такой структуры данных.
В некоторых книгах, посвященным разработке алгоритмов, деревья определяются рекурсивно. Дерево является либо пустым, либо состоит из узла (корня), являющегося родительским узлом для некоторого количества деревьев (это количество определяет арность дерева) [1, 2].
Рабочее определение (в рамках этой статьи): дерево — это способ организации данных в виде иерархической структуры.
Когда применяются древовидные структуры:
Двоичный поиск [3] выполняется над отсортированным массивом. На каждом шаге искомый элемент сравнивается со значением, находящимся посередине массива. В зависимости от результатов сравнения — либо левая, либо правая части могут быть «отброшены».
Иерархия — способ упорядочивания объектов, соответственно применять ее можно для ускорения поиска. Именно этому посвящена остальная часть статьи.
2 Деревья и другие структуры данных
Итак, у нас есть много данных — возможно это информация о температуре за несколько лет, а может быть — данные о фирмах в вашем городе. Как хранить их внутри вашего приложения? — Правильный ответ зависит от того, как именно вы будете пользоваться этими данными.
В таблице приведены асимптотические оценки часто используемых операций над некоторыми структурами данных. На случай если вы еще не освоили асимптотический анализ, в таблице показано примерное значение количества действий, необходимых для выполнения операции над контейнером из 10 тысяч элементов.
Операция | неупорядоченный массив | упорядоченный массив | неупорядоченный двусвязный список | сбалансированное дерево поиска |
---|---|---|---|---|
4 Kd-деревья
Во многих программах появляется необходимость хранения и эффективной обработки объектов на плоскости. Это не только картографические приложения, но и все двумерные игры. Задумывались ли вы о том, как эту задачу решают игровые движки?
Мы уже разобрались с тем, что для эффективной реализации поиска объекты нужно хранить упорядоченными. Однако, как хранить точки? — ведь у них есть две (или три) координаты, а сортировка по одной из них не обеспечит приемлемую скорость поиска. Именно эти проблемы решают Kd-деревья.
Общая идея kd-деревьев заключается в разделении плоскости, содержащей объекты на части (прямоугольные области) таким образом, что в каждой области содержится один объект. При этом, между областями можно выстроить иерархические зависимости, за счет которых можно существенно повысить эффективность поиска. Существуют различные типы kd-деревьев, отличающиеся выбором секущей плоскости.
Задача: есть множество точек, находящихся на плоскости, нужно выстроить объекты в иерархическую структуру, исходя из их координат для обеспечения эффективного поиска. Описанные ниже подходы можно обобщить до более сложных геометрических объектов (не точек) и пространств больших размерностей.
Первый вариант решения:
С такой структурой данных, алгоритм вывода всех точек, входящих в Прямоугольник может выглядеть так:
Цветом на приведенной выше схеме обозначена область поиска. Она не пересекается с областью B (расположенной левее А ). Даже если бы в этой области были миллионы точек — мы «отсекли» бы их за одну итерацию алгоритма — то есть мы получили полноценный двоичный поиск на плоскости. Визуализация алгоритма:
При перемещении объектов может возникать необходимость перестроения дерева — если объект переместился из одной области «родительского» объекта в другую.
Описанный подход называется Kd-деревья с циклическим проходом по измерениям. Возможны и другие варианты выбора секущей плоскости — например каждый узел квадрадерева делит свою часть плоскости на 4 части (левая верхняя, левая нижняя, правая верхняя, права нижняя). Если в какой-то части оказывается более 1 объекта — то она делится дальше. Октадеревья адаптируют эту идею к трехмерному пространству.
Построение «дерева» понятий помогает Вам более оперативно увидеть связи и отношения между системой понятий, заметить признаки, характеризующие основные понятия.
Мы хотим подчеркнуть, что построение «дерева» понятий позволяет получить только первичное представление о сущности исследуемого явления, и потому требует дальнейшей работы и критического анализа соответствующей литературы.
Принцип построения «дерева» понятий состоит в следующем:
— выбираете ключевое понятие (словосочетание) темы;
— найдите в словарях (философском, психологическом) определение понятия;
— из определения выберете ключевые понятия, в свою очередь, каждому из них найдите свое определение;
— вновь выберите ключевые слова и т.д.
Составьте схему, которая будет выглядеть следующим образом:
| ||||||
| | | ||||
| | | | | | |
Продолжать процесс построения «дерева» понятий необходимо до тех пор, пока сможете дать рабочего определения основному понятию, четко выделив основные его признаки проявления. Чтобы дать определение понятию, то его нужно подвести под общее и указать отличительные признаки.
Проиллюстрируем сказанное конкретными примерами:
Проблемная тема «Развитие нравственной культуры учащихся-подростков». После построения «дерева» понятий мы получили следующее рабочее определение: Нравственная культура учащихся – интегрированное качество личности, которое характеризуется:
— знанием нравственных норм;
— умением взаимодействовать с природой и людьми,
Мы не случайно употребили термин «рабочее определение», тем самым подчеркивая, что в процессе работы над различными источниками, определение может претерпеть изменение: могут появиться дополнительные признаки, либо ряд из них будут откорректированы.
Составление «дерева понятия» лишь первый шаг в определении и раскрытии сущности исследуемого явления (процесса). Работа с различными научными источниками позволит уточнить представление о том, что подвергается исследованию.
VI этап. Составление программы диагностического «среза». Продумайте программу диагностического «среза», т.к. только данные, полученные после его проведения, позволят окончательно скорректировать предполагаемую Вашу работу.
В программе выделите цель диагностического («нулевого») «среза», критерии (см. признаки Вашего основного определения), показатели и уровни проявления изучаемого явления, продумайте методы и подберите методики.
Общий вид программы диагностического «среза» проиллюстрируем на конкретном примере: проблемная тема«Развитие нравственной культуры учащихся-подростков».
Критерии и показатели | Уровни проявления признаков | Способы получения информации | ||
Высокий | Средний | Низкий | ||
Знание нравственных норм | Знания нравственных норм усвоены в системе | Усвоены отдельные нравственные нормы | Усвоен негативный нравственный опыт | Методика «ранжирования пословиц и поговорок» (прилож. № 1) |
а) знанием нравственных норм;
б) умением взаимодействовать с людьми и природой с учетом нравственных норм;
в) умением заниматься нравственным самосовершенствованием.
Первый критерий (признак) нравственной культуры школьника – знание нравственных норм. Он может проявляться у школьника в различной степени: на высоком, среднем, низком уровнях. Следует отметить, что уровней проявления признаков может быть более трех: и 4, и 5, и 6 и более (хотя вряд ли большое количество признаков целесообразно). В графе 5 «Способы получения информации» указывается методика диагностики, делается ссылка либо на какой-либо источник (литература), либо на приложение.
VII этап. Разработка проекта опытно-экспериментальной работы.Проект опытно-экспериментальной работы по проблемной теме представьте в виде таблицы (см. табл. 2).
Критерии и показатели исследуемого явления | Компоненты опытно-экспериментальной работы | |||||
Цели и задачи опытно-эксперимен-тальной работы | Содер-жание | Средства | Формы | Методы | Задания | |
Знание нравст- венных норм | Откоррек-тировать представление о добре и зле; и т.д. | Понятия «добро» и «зло». и т.д. | Общение, игра. | Индиви-дуальная, групповая. | Словесные, практичес-кие, проб-лемные, методы самостоя-тельной работы, индуктив-ные, игра как стимул, практический контроль | Диспут «Что такое «добро» и «зло»». Игра «Сделка» |
Примечание. В процессе описания данного этапа необходимо будет описать уже не в табличном варианте, а в словесном, что предполагалось, и что было осуществлено для развития и коррекции исследуемого феномена.
Примечание. Более подробно об объеме выборки педагогического признака в общей совокупности исследуемых объектов см.: Теория и практика педагогического эксперимента / Под ред. А.И. Пискунова, Г.В. Воробьева. – М.,1979. – С.151-152.
Полученные результаты оформите в таблицы, графики, диаграммы. На основе полученных выводов уточните проект опытно-педагогической работы, т.е. цели, содержание и организацию формирующего эксперимента.
Отберите для формирующего эксперимента два класса, группы учащихся (равных по возможностям, уровню подготовленности и т.д.). Организуйте с ними работу согласно проекту. В ходе эксперимента проводите промежуточные «срезы», следите за их динамикой, в случае необходимости вносите коррективы в содержание исследовательской деятельности.
XI этап. Оформление результатов опытно-экспериментальной работы.
Структура работы, описывающей исследовательскую деятельность, включает в себя следующие части: титульный лист, содержание, введение, основной текст (главы, параграфы), заключение, список использованной литературы, приложения (если они имеются)
Оглавление включает перечисление частей работы, начиная с введения и до приложений, с указанием страниц начала каждой главы, раздела.
Во введении раскрываются актуальность темы, ее значение в практической деятельности и науки педагогики, психологии, методики конкретного предмета, связанные с этим причины выбора данной темы; степень ее освещения в литературе с указанием основных ученых-исследователей; цели и задачи, которые ставит перед собой исследователь.
Основной текст обычно разбивается на главы, поделенные на параграфы. В них освещаются вопросы темы. Главы и параграфы должны иметь примерно равный объем. Обычно в первой главе описываются теоретические основы исследования, во второй – содержание, организация и результаты эксперимента.
В заключении подводятся итоги исследований, в обобщенном виде излагаются выводы и предложения.
Библиография составляется в порядке цитирования источников.
В приложениипомещаются схемы, графики, таблицы и другие материалы, подготовленные автором.
Результаты работы над проблемной темой:доклад, инструктивно-методический материал, информационное издание, монография, научно-популярное издание, научный отчет, программа, проект, проспект, словарь, автореферат, диссертация, избранные сочинения, справочное издание, стандарты, тезисы докладов, статья учебное издание, энциклопедия, дидактическое или методическое пособие или разработка, учебник, учебное пособие, сборник задач и пр.
Системообразующим фактором в непрерывном развитии потенциала учителя при этом становится личностно ориентированное самообразование учителя
При планировании работы над проблемной темой можно рекомендовать учителю следующую схему плана работы на несколько лет, в которой предусмотрены задачи, содержание и обязательный результат каждого этапа работы над проблемной темой (см. табл. 22).
ЗАДАНИЕ 1. ПОСТРОЕНИЕ «ДРЕВА ПОНЯТИЯ»
ББК. 81.2 Русск-9
Контрольные задания по русскому языку и культуре речи для студентов-заочников/НГТУ; Сост. А.О. Велижанина. Н.Новгород, 2004. 33 с.
Методические рекомендации включают в себя контрольные задания, соответствующие целям и содержанию курса «Русский язык и культура речи», и рекомендации к их выполнению.
Предназначены студентам-заочникам и преподавателям русского языка и культуры речи.
Редактор Э.А. Жирнова
Подп. в печ. 23.06.04.Формат 60 х 84 ‘/16. Бумага офсетная. Печать офсетная. Печ. л. 2,25. Уч.-изд. л. 1,5. Тираж 500 экз. Зак. 464.
Нижегородский государственный технический университет. Типография НГТУ. 603600, Нижний Новгород, ул. Минина, 24.
Целью курса «Русский язык и культура речи» является формирование у студентов духовно-нравственной позиции на речь как на механизм жизнедеятельности человека, обеспечивающий познание окружающего мира и установление отношений с его системами, и на язык как среду становления человека; развитие личной ответственности за свою речевую деятельность; формирование речевой культуры.
В связи с этим структура курса представляет собой систему трёх взаимосвязанных основных блоков: ценностного (мировоззренческого), нормативно-стилистического, коммуникативного (ситуативно-текстового).
При сравнительно небольшом объёме аудиторных часов курса на заочном отделении предполагается, прежде всего, самостоятельное освоение теоретико-практического содержания дисциплины. Учебным планом предусмотрено выполнение студентами-заочниками контрольной письменной работы по русскому языку и культуре речи.
В освоении и осознании сущности, средств, характерных особенностей каждой части курса призваны помочь студентам-заочникам контрольные задания по «Русскому языку и культуре речи». Задания составлены в соответствии с заявленной основной целью курса, при этом они являются средством как освоения содержания дисциплины, так и самостоятельного развития речевой культуры личности и результатом, в большей степени определяющим успешность итоговой аттестации студента по предмету «Русский язык и культура речи».
Каждый студент выполняет свой вариант работы, включающей три задания (построение «древа понятия», освоение речевых норм и устранение речевых ошибок, написание сочинения-рассуждения). Это, с нашей точки зрения, позволит студенту проявить самостоятельность и неформальное отношение к теоретической компоненте курса, творчество и независимость суждений, при этом аргументированность и последовательность в изложении мыслей; умение работать с нормативной литературой по русскому языку и культуре речи, преобразуя новые знания в речевой навык. Качество выполненной студентом работы даст возможность преподавателю сделать вывод о глубине и основательности проработки и освоения им содержания курса.
Контрольная работа выполняется в отдельной тетради с полями, на титульном листе которой необходимо указать вуз, факультет, курс, группу, фамилию, имя, отчество студента, номер варианта; должность, фамилию, имя, отчество преподавателя; дату сдачи контрольной работы. Каждое задание следует начинать с новой страницы.
ЗАДАНИЕ 1. ПОСТРОЕНИЕ «ДРЕВА ПОНЯТИЯ»
Для построения средства самостоятельного поиска знаний, названного его автором, проф. К.Я. Вазиной, «древом понятия», необходимо определить слово для исследования. Отнестись к выбору слова нужно неформально: Вы должны осознать потребность в постижении общекультурного значения слова, в расширении его смыслового пространства. Слово может быть любым (семья, любовь, истина, наука и т.д.), лишь бы оно было выбрано не на авось. Далее следует вооружиться словарями: «Толковым словарём живого великорусского языка» В.И. Даля (обязательно!), любым толковым словарём, например «Толковым словарём русского языка» СИ. Ожегова и Н.Ю. Шведовой, словарём иностранных слов (если слово иноязычного происхождения), этимологическим, энциклопедическим и другими словарями.
Графически «древо понятия» можно представить следующим образом (рис. 1).
|
Выводное знание: ■ Рис.1.Структура «древа понятия» |
Понятие
Выводное знание должно включать в себя ответы на следующие вопросы:
1. Почему для исследования Вами выбрано именно это слово (определение цели исследования)?
2. Какие новые смыслы исследуемого слова получены в процессе построения «древа понятия», как они углубили, уточнили, изменили Ваше понимание слова?
3. Есть ли в «древе понятия» противоположные, на первый взгляд, взаимоисключающие определения? О чём может свидетельствовать их наличие? Каким образом их можно «соединить»?
4. Включает ли в себя «древо понятия» ценностную, мировоззренческую компоненту? способы деятельностного постижения, освоения смысла данного понятия?
5. Каково Ваше «новое» понимание значения исследуемого слова?
ЗАДАНИЕ 2. ОСВОЕНИЕ РЕЧЕВЫХ НОРМ I вариант
1. Расставьте ударения в словах:
Агент, агрономия, жалюзи, жизнеобеспечение, мальчиковый, манишь, раджа, разогнутый, осведомить, острога, проясниться (очиститься от туч).
2. Образуйте форму (заполните таблицу):
Все что нужно знать о древовидных структурах данных
Jul 1, 2018 · 14 min read
Деревья прекрасны. Вот рисунок, который я сделал ребенком
Когда вы впервые учитесь кодировать, общепринято изучать массивы в качестве «основной структуры данных».
В конце концов, вы также изучаете хэш-таблицы. Для получения степени по «Компьютерным наукам» (Computer Science) вам придется походить на занятия по структурам данных, на которых вы узнаете о связанных списках, очередях и стеках. Эти структуры данных называются «линейными», поскольку они имеют логические начало и завершение.
Однако в самом начале и зучения деревьев и графов мы можем оказаться слегка сбитыми с толку. Нам привычно хранить данные линейным способом, а эти две структуры хранят данные совершенно иначе.
Данная статья поможет вам лучше понять древовидные структуры данных и устранить все недоразумения на их счет.
Из этой статьи вы узнаете:
Давайте начнем наше учебное путешествие 🙂
Определения
Когда вы только начинаете изучать программирование, обычно бывает проще понять, как строятся линейные структуры данных, чем более сложные структуры, такие как деревья и графы.
Деревья являются широко известными нелинейными структурами. Они хранят данные не линейным способом, а упорядочивают их иерархически.
Давайте вплотную займемся реальными примерами
Что я имею в виду, когда я говорю иерархически?
Представьте себе генеалогическое древо отношений между поколениями: бабушки и дедушки, родители, дети, братья и сестры и т.д. Мы обычно организуем семейные деревья иерархически.
Мое фамильное дерево
Приведенный рисунок — это мое фамильное древо. Тосико, Акикадзу, Хитоми и Такеми — мои дедушки и бабушки.
Тошиаки и Джулиана — мои родители.
ТК, Юдзи, Бруно и Кайо — дети моих родителей (я и мои братья).
Структура организации — еще один пример иерархии.
Структура компании является примером иерархии
В HTML, объектная модель документа (DOM) представляется в виде дерева.
Объектная модель документа (DOM)
Техническое определение
Дерево представляет собой набор объектов, называемых узлами. Узлы соединены ребрами. Каждый узел содержит значение или данные, и он может иметь или не иметь дочерний узел.
Первый узел дерева называется корнем. Если этот корневой узел соединен с другим узлом, тогда корень является родительским узлом, а связанный с ним узел — дочерним.
Все узлы дерева соединены линиями, называемыми ребрами. Это важная часть деревьев, потому что она управляет связью между узлами.
Листья — это последние узлы на дереве. Это узлы без потомков. Как и в реальных деревьях, здесь имеется корень, ветви и, наконец, листья.
Другими важными понятиями являются высота и глубина.
Высота дерева — это длина самого длинного пути к листу.
Глубина узла — это длина пути к его корню.
Справочник терминов
Бинарные деревья
Теперь рассмотрим особый тип деревьев, называемых бинарными или двоичными деревьями.
“В информатике бинарным (двоичным) деревом называется иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками.” — Wikipedia
Рассмотрим пример бинарного дерева.
Давайте закодируем бинарное дерево
Как мы реализуем простое двоичное дерево, которое инициализирует эти три свойства?
Вот наш двоичный класс дерева.
Когда мы создаем наш узел, он не имеет потомков. Просто есть данные узла.
Давайте это проверим:
Перейдем к части вставки. Что нам нужно здесь сделать?
Мы реализуем метод вставки нового узла справа и слева.
Давайте это нарисуем 🙂
Вот программный код:
Еще раз, если текущий узел не имеет левого дочернего элемента, мы просто создаем новый узел и устанавливаем его в качестве left_child текущего узла. Или мы создаем новый узел и помещаем его вместо текущего левого потомка. Назначим этот левый дочерний узел в качестве левого дочернего элемента нового узла.
И мы делаем то же самое, чтобы вставить правый дочерний узел.
Но не полностью. Осталось протестировать.
Давайте построим следующее дерево:
Подытоживая изображенное дерево, заметим:
Таким образом, вот код для нашего дерева следующий:
Теперь нам нужно подумать об обходе дерева.
У нас есть два варианта: поиск в глубину (DFS) и поиск по ширине (BFS).
• Поиск в глубину (Depth-first search, DFS) — один из методов обхода дерева. Стратегия поиска в глубину, как и следует из названия, состоит в том, чтобы идти «вглубь» дерева, насколько это возможно. Алгоритм поиска описывается рекурсивно: перебираем все исходящие из рассматриваемой вершины рёбра. Если ребро ведёт в вершину, которая не была рассмотрена ранее, то запускаем алгоритм от этой нерассмотренной вершины, а после возвращаемся и продолжаем перебирать рёбра. Возврат происходит в том случае, если в рассматриваемой вершине не осталось рёбер, которые ведут в не рассмотренную вершину. Если после завершения алгоритма не все вершины были рассмотрены, то необходимо запустить алгоритм от одной из не рассмотренных вершин.
• Поиск в ширину (breadth-first search, BFS) — метод обхода дерева и поиска пути. Поиск в ширину является одним из неинформированных алгоритмов поиска. Поиск в ширину работает путём последовательного просмотра отдельных уровней дерева, начиная с узла-источника. Рассмотрим все рёбра, выходящие из узла. Если очередной узел является целевым узлом, то поиск завершается; в противном случае узел добавляется в очередь. После того, как будут проверены все рёбра, выходящие из узла, из очереди извлекается следующий узел, и процесс повторяется.
Давайте подробно рассмотрим каждый из алгоритмов обхода.
Поиск в глубину (DFS)
DFS исследует все возможные пути вплоть до некоторого листа дерева, возвращается и исследует другой путь (осуществляя, таким образом, поиск с возвратом). Давайте посмотрим на пример с этим типом обхода.
Результатом этого алгоритма будет: 1–2–3–4–5–6–7.
Давайте разъясним это подробно.
Проход в глубь дерева, а затем возврат к исходной точке называется алгоритмом DFS.
После знакомства с этим алгоритмом обхода, рассмотрим различные типы DFS-алгоритма: предварительный обход (pre-order), симметричный обход (in-order) и обход в обратном порядке (post-order).
Предварительный обход
Именно это мы и делали в вышеприведенном примере.
1. Записать значение узла.
2. Перейти к левому потомку и записать его. Это выполняется тогда и только тогда, когда имеется левый потомок.
3. Перейти к правому потомку и записать его. Это выполняется тогда и только тогда, когда имеется правый потомок.