Четырехдерево
В этой статье нечеткий стиль цитирования . ( Апрель 2015 г. ) |
Четырехдерево | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Тип | Дерево | |||||||||||
Изобретенный | 1974 | |||||||||||
Изобретён | Рафаэль Финкель и Джей Эл Бентли | |||||||||||
|
Квадродерево древовидная — это структура данных , в которой каждый внутренний узел имеет ровно четыре дочерних узла. Деревья квадрантов являются двумерным аналогом окт-деревьев и чаще всего используются для разделения двумерного пространства путем рекурсивного разделения его на четыре квадранта или области. Данные, связанные с листовой клеткой, различаются в зависимости от приложения, но листовая ячейка представляет собой «единицу интересной пространственной информации».
Подразделенные области могут быть квадратными или прямоугольными или могут иметь произвольную форму. Эта структура данных была названа квадродеревом Рафаэлем Финкелем и Дж. Л. Бентли в 1974 году. [1] Подобное разбиение также известно как Q-дерево .
Все формы квадродеревьев имеют некоторые общие черты:
- Они разлагают пространство на адаптируемые клетки.
- Каждая ячейка (или ведро) имеет максимальную вместимость. При достижении максимальной вместимости ведро разбивается.
- Каталог дерева соответствует пространственной декомпозиции квадродерева.
Древовидная пирамида ( Т-пирамида ) — «полное» дерево; каждый узел Т-пирамиды имеет четыре дочерних узла, кроме конечных узлов; все листья находятся на одном уровне, уровне, соответствующем отдельным пикселям изображения. Данные в древовидной пирамиде могут компактно храниться в массиве как неявная структура данных, аналогично тому, как полное двоичное дерево может компактно храниться в массиве . [2]
Типы [ править ]
Квадродеревья можно классифицировать по типу данных, которые они представляют, включая области, точки, линии и кривые. Квадродеревья также можно классифицировать по тому, не зависит ли форма дерева от порядка обработки данных. Ниже приведены распространенные типы квадродеревьев.
Квадродерево регионов [ править ]
Дерево квадрантов региона представляет собой разделение пространства в двух измерениях путем разложения региона на четыре равных квадранта, подквадранта и т. д., при этом каждый листовой узел содержит данные, соответствующие определенному субрегиону. Каждый узел в дереве либо имеет ровно четыре дочерних элемента, либо не имеет дочерних элементов (листовой узел). Высота деревьев квадрантов, которые следуют этой стратегии декомпозиции (т.е. подразделения подквадрантов до тех пор, пока в подквадранте есть интересные данные, для которых желательна дополнительная детализация), чувствительна и зависит от пространственного распределения интересных областей в разлагаемом пространстве. Дерево квадрорегионов — это разновидность дерева .
Квадродерево региона глубиной n может использоваться для представления изображения, состоящего из 2 н × 2 н пикселей, где значение каждого пикселя равно 0 или 1. Корневой узел представляет всю область изображения. Если пиксели в какой-либо области не полностью имеют 0 или 1, она подразделяется. В этом приложении каждый листовой узел представляет собой блок пикселей, все из которых имеют 0 или 1. Обратите внимание на потенциальную экономию места при использовании этих деревьев для хранения изображений; изображения часто имеют множество областей значительного размера, которые имеют одинаковое значение цвета повсюду. Вместо того, чтобы хранить большой двумерный массив каждого пикселя изображения, квадродерево может захватывать ту же информацию, потенциально на много уровней деления выше, чем ячейки с разрешением в пикселях, которые нам в противном случае потребовались бы. Разрешение и общий размер дерева ограничены размерами пикселей и изображения.
Квадродерево региона также может использоваться как представление поля данных с переменным разрешением. Например, температуры в области могут храниться в виде квадродерева, где каждый листовой узел хранит среднюю температуру по субрегиону, который он представляет.
Квадродерево точек [ править ]
Точечное квадродерево [3] представляет собой адаптацию двоичного дерева, используемого для представления двумерных точечных данных. Оно обладает чертами всех квадродеревьев, но является настоящим деревом, поскольку центр подразделения всегда находится в точке. Часто он очень эффективен при сравнении двумерных упорядоченных точек данных, обычно работающих за время O (log n) . Стоит упомянуть квадродеревья точек из-за полноты, но их превзошли k деревья -d как инструменты обобщенного бинарного поиска. [4]
Квадрадеревья точек строятся следующим образом. Учитывая следующую точку для вставки, мы находим ячейку, в которой она находится, и добавляем ее в дерево. Новая точка добавляется таким образом, что содержащая ее ячейка разделяется на квадранты вертикальными и горизонтальными линиями, проходящими через точку. Следовательно, ячейки имеют прямоугольную форму, но не обязательно квадратную. В этих деревьях каждый узел содержит одну из входных точек.
Поскольку разделение плоскости определяется порядком вставки точек, высота дерева чувствительна и зависит от порядка вставки. Вставка в «плохом» порядке может привести к тому, что высота дерева будет линейной по количеству входных точек (в этот момент оно станет связным списком). Если набор точек статичен, можно выполнить предварительную обработку для создания дерева сбалансированной высоты.
Структура узлов для квадродерева точек [ править ]
Узел точечного квадранта аналогичен узлу бинарного дерева , с той основной разницей, что он имеет четыре указателя (по одному на каждый квадрант) вместо двух («левый» и «правый»), как в обычном бинарном дереве. . Также ключ обычно разбивается на две части, ссылаясь на координаты x и y. Таким образом, узел содержит следующую информацию:
- четыре указателя: Quad['NW'], Quad['NE'], Quad['SW'] и Quad['SE']
- точка; который, в свою очередь, содержит:
- ключ; обычно выражается как координаты x, y
- ценить; например имя
Квадродерево точки-региона (PR) [ править ]
Квадрадеревья точки-области (PR) [5] [6] очень похожи на квадродеревья регионов. Разница заключается в типе информации, хранящейся в ячейках. В квадродереве региона хранится единое значение, применимое ко всей площади ячейки листа. Однако ячейки квадродерева PR хранят список точек, которые существуют в ячейке листа. Как упоминалось ранее, для деревьев, следующих этой стратегии декомпозиции, высота зависит от пространственного распределения точек. Как и дерево квадрантов точек, дерево квадрантов PR также может иметь линейную высоту, если ему задан «плохой» набор.
Краевое квадродерево [ править ]
Краевые квадродеревья [7] [8] (так же, как квадродеревья PM) используются для хранения линий, а не точек. Кривые аппроксимируются путем разделения ячеек с очень высоким разрешением, особенно до тех пор, пока на ячейку не будет приходиться один сегмент линии. Вблизи углов/вершин рёберные квадродеревья будут продолжать делиться, пока не достигнут максимального уровня разложения. Это может привести к крайне несбалансированным деревьям, что может привести к срыву цели индексации.
Квадродерево полигональной карты (PM) [ править ]
Квадродерево полигональной карты (или PM Quadtree) — это вариант квадродерева, который используется для хранения коллекций многоугольников, которые могут быть вырожденными (то есть иметь изолированные вершины или ребра). [9] [10] Большая разница между квадродеревьями PM и реберными квадродеревьями заключается в том, что рассматриваемая ячейка не подразделяется, если сегменты встречаются в вершине ячейки.
Существует три основных класса PM Quadtrees, которые различаются в зависимости от того, какую информацию они хранят в каждом черном узле. Кваддеревья PM3 могут хранить любое количество непересекающихся ребер и не более одной точки. Деревья квадроциклов PM2 аналогичны деревьям квадроциклов PM3, за исключением того, что все ребра должны иметь одну и ту же конечную точку. Наконец, квадродеревья PM1 похожи на PM2, но черные узлы могут содержать точку и ее ребра или просто набор ребер, которые имеют общую точку, но вы не можете иметь точку и набор ребер, которые не содержат эту точку.
Сжатые деревья квадрантов [ править ]
В этом разделе обобщены подразделы из книги Сариэля Хар-Пеледа . [11]
Если бы нам пришлось хранить каждый узел, соответствующий разделенной ячейке, мы могли бы в конечном итоге сохранить много пустых узлов. Мы можем сократить размер таких редких деревьев, сохраняя только те поддеревья, листья которых содержат интересные данные (т.е. «важные поддеревья»). На самом деле мы можем еще больше сократить размер. Когда мы сохраняем только важные поддеревья, процесс сокращения может оставить длинные пути в дереве, где промежуточные узлы имеют степень два (ссылка на одного родительского и одного дочернего элемента). Получается, что нам нужно хранить только узел в начале этого пути (и свяжите с ним некоторые метаданные для представления удаленных узлов) и прикрепите поддерево, коренящееся в его конце, к . Эти сжатые деревья по-прежнему могут иметь линейную высоту при наличии «плохих» входных точек.
Хотя при выполнении этого сжатия мы обрезаем большую часть дерева, все же можно добиться логарифмического поиска, вставки и удаления, используя преимущества Z кривых -порядка . Кривая Z -порядка отображает каждую ячейку полного квадродерева (и, следовательно, даже сжатого квадродерева) в время в одномерную линию (и отображает ее обратно в время тоже), создавая полный порядок в элементах. Следовательно, мы можем хранить квадродерево в структуре данных для упорядоченных наборов (в которой мы храним узлы дерева).
Прежде чем продолжить, мы должны сформулировать разумное предположение: мы предполагаем, что даны два действительных числа. выраженный в двоичном виде, мы можем вычислить в time индекс первого бита, которым они отличаются. Мы также предполагаем, что мы можем вычислить в найдите наименьшего общего предка двух точек/ячейок в квадродереве и установите их относительный Z -упорядочение, и мы сможем вычислить функцию пола в время.
При этих предположениях местоположение данной точки (т.е. определение ячейки, которая будет содержать ), операции вставки и удаления могут выполняться в время (т.е. время, необходимое для поиска в базовой структуре данных упорядоченного набора).
Чтобы выполнить локацию точки для (т.е. найти его ячейку в сжатом дереве):
- Найдите существующую ячейку в сжатом дереве, которая была раньше. в Z -порядке. Позвоните на этот сотовый .
- Если , возвращаться .
- В противном случае найдите то, что было бы наименьшим общим предком точки. и клетка в несжатом дереве квадрантов. Назовите эту клетку-предка .
- Найдите существующую ячейку в сжатом дереве, которая была раньше. в Z -порядке и верните его.
Не вдаваясь в подробности, для выполнения вставок и удалений мы сначала определяем местоположение объекта, который хотим вставить/удалить, а затем вставляем/удаляем его. Необходимо позаботиться о том, чтобы соответствующим образом изменить форму дерева, создавая и удаляя узлы по мере необходимости.
Некоторые распространенные варианты использования квадродеревьев [ править ]
- Представление изображения
- Обработка изображений
- Генерация сетки [12]
- Пространственное индексирование , запросы местоположения точек и запросы диапазона.
- Эффективное обнаружение столкновений в двух измерениях
- Просмотр отсечения данных о местности по усечению пирамиды
- Хранение разреженных данных, таких как информация о форматировании электронной таблицы. [13] или для некоторых матричных вычислений [ нужна ссылка ]
- Решение многомерных полей ( вычислительная гидродинамика , электромагнетизм )
- Программа моделирования «Игры жизни» Конвея . [14]
- Оценка состояния [15]
- Квадродеревья также используются в области фрактального анализа изображений.
- Максимальные непересекающиеся множества
Обработка изображений с использованием квадродеревьев [ править ]
Деревья квадрантов, особенно квадродерево региона , хорошо подходят для приложений обработки изображений. Мы ограничим наше обсуждение данными двоичного изображения, хотя квадродеревья областей и выполняемые над ними операции обработки изображений также подходят для цветных изображений. [4] [16]
Объединение/пересечение изображений [ править ]
Одним из преимуществ использования квадродеревьев для манипулирования изображениями является то, что операции объединения и пересечения множеств можно выполнять просто и быстро. [4] [17] [18] [19] [20] Учитывая два двоичных изображения, объединение изображений (также называемое наложением ) создает изображение, в котором пиксель черный, если любое из входных изображений имеет черный пиксель в одном и том же месте. То есть пиксель выходного изображения является белым только тогда, когда соответствующий пиксель в обоих входных изображениях белый, в противном случае выходной пиксель будет черным. Вместо того чтобы выполнять операцию попиксельно, мы можем более эффективно вычислять объединение, используя способность квадродерева представлять несколько пикселей одним узлом. В целях обсуждения ниже, если поддерево содержит как черные, так и белые пиксели, мы будем говорить, что корень этого поддерева окрашен в серый цвет.
Алгоритм работает путем обхода двух входных квадродеревьев ( и ) при построении выходного квадродерева . Неформально алгоритм следующий. Рассмотрим узлы и соответствующие одной и той же области на изображениях.
- Если или черный, соответствующий узел создается в и окрашен в черный цвет. Если только один из них черный, а другой серый, серый узел будет содержать поддерево. Это поддерево не обязательно пересекать.
- Если (соответственно, ) белый, (соответственно, ), а поддерево под ним (если есть) копируется в .
- Если оба и серые, то соответствующие потомки и считаются.
Хотя этот алгоритм работает, он сам по себе не гарантирует квадродерево минимального размера. Например, рассмотрим результат, если бы мы объединили шахматную доску (где каждая плитка представляет собой пиксель) размером с его дополнением. В результате получается гигантский черный квадрат, который должен быть представлен квадродеревом только с корневым узлом (окрашенным в черный цвет), но вместо этого алгоритм создает полное 4-арное дерево глубины. . Чтобы исправить это, мы выполняем обход результирующего квадродерева снизу вверх, где проверяем, имеют ли четыре дочерних узла одинаковый цвет, и в этом случае мы заменяем их родительский элемент листом того же цвета. [4]
Пересечение двух изображений происходит практически по одному и тому же алгоритму. Один из способов представить пересечение двух изображений — это объединить белые пиксели. Таким образом, чтобы выполнить пересечение, мы меняем местами упоминания черного и белого в алгоритме объединения.
Маркировка подключенных компонентов [ править ]
Рассмотрим два соседних черных пикселя в бинарном изображении. Они являются смежными, если имеют общий ограничивающий горизонтальный или вертикальный край. В общем, два черных пикселя соединяются , если до одного можно добраться из другого, перемещаясь только к соседним пикселям (т. е. между ними существует путь черных пикселей, где каждая последовательная пара является соседней). Каждый максимальный набор связанных черных пикселей является связным компонентом . Используя представление изображений в виде квадродерева, Самет [21] показал, как мы можем найти и пометить эти связные компоненты за время, пропорциональное размеру квадродерева. [4] [22] Этот алгоритм также можно использовать для раскраски полигонов.
Алгоритм работает в три этапа:
- установить отношения смежности между черными пикселями
- обработать отношения эквивалентности с первого шага, чтобы получить одну уникальную метку для каждого компонента связности
- пометьте черные пиксели меткой, связанной с их подключенным компонентом
Чтобы упростить обсуждение, предположим, что дочерние элементы узла в квадродереве следуют Z -порядку (ЮЗ, СЗ, ЮВ, СВ). Поскольку мы можем рассчитывать на эту структуру, мы знаем, как перемещаться по дереву квадрантов для любой ячейки, чтобы найти соседние ячейки на разных уровнях иерархии.
Первый шаг завершается пост-заказным обходом дерева квадрантов. За каждый черный лист мы смотрим на узел или узлы, представляющие ячейки, которые являются северными соседями и восточными соседями (т. е. северные и восточные ячейки, которые имеют общие ребра с ячейкой ). Поскольку дерево организовано в Z -порядке, у нас есть инвариант, согласно которому южные и западные соседи уже позаботились и учтены. Пусть рассматриваемым в настоящее время северным или восточным соседом будет . Если представляет черные пиксели:
- Если только один из или имеет метку, присвойте эту метку другой ячейке
- Если ни у одного из них нет меток, создайте одну и назначьте ее обоим.
- Если и имеют разные метки, запишите эквивалентность этой метки и двигайтесь дальше
Второй шаг можно выполнить с помощью структуры данных объединения-поиска . [23] Мы начинаем с каждой уникальной этикетки как отдельного набора. Для каждого отношения эквивалентности, отмеченного на первом этапе, мы объединяем соответствующие множества. После этого каждый отдельный оставшийся набор будет связан с отдельным связным компонентом изображения.
Третий шаг выполняет еще один обход после заказа. На этот раз для каждого черного узла объединения-найти мы используем операцию поиска (со старой меткой ) найти и назначить его новая метка (связанная со связным компонентом которого это часть).
Генерация сетки с использованием квадродеревьев [ править ]
В этом разделе обобщена глава из книги Хар-Пеледа и де Берга и др. [24] [25]
Создание сетки — это, по сути, триангуляция набора точек , для которой может быть выполнена дальнейшая обработка. Таким образом, желательно, чтобы результирующая триангуляция имела определенные свойства (например, неоднородность, не «слишком тонкие» треугольники, большие треугольники в редких областях и маленькие треугольники в плотных и т. д.), чтобы сделать дальнейшую обработку более быстрой и удобной. менее подвержен ошибкам. Квадродеревья, построенные на наборе точек, можно использовать для создания сеток с нужными свойствами.
Рассмотрим лист квадродерева и соответствующую ему ячейку . Мы говорим является сбалансированным (для построения сетки), если стороны ячейки пересекаются угловыми точками соседних ячеек не более одного раза с каждой стороны. Это означает, что уровни квадродеревьев листьев, прилегающих к отличаться не более чем на единицу от уровня . Когда это верно для всех листьев, мы говорим, что все квадродерево сбалансировано (для генерации сетки).
Рассмотрим ячейку и окрестности ячеек одинакового размера с центром в . Мы называем эту окрестность расширенным кластером . Мы говорим, что квадродерево хорошо сбалансировано, если оно сбалансировано, и для каждого листа который содержит точку из набора точек, его расширенный кластер также находится в квадродереве, и расширенный кластер не содержит других точек из набора точек.
Создание сетки происходит следующим образом:
- Постройте квадродерево по входным точкам.
- Убедитесь, что дерево квадрантов сбалансировано. Для каждого листа, если есть слишком большой сосед, разделите его. Это повторяется до тех пор, пока дерево не будет сбалансировано. Мы также следим за тем, чтобы для листа, в котором есть точка, узлы расширенного кластера каждого листа находились в дереве.
- Для каждого листового узла которое содержит точку, если расширенный кластер содержит другую точку, мы далее подразделяем дерево и при необходимости перебалансируем. Если бы нам нужно было разделить, для каждого ребенка из мы обеспечиваем узлы расширенный кластер находятся в дереве (и при необходимости перебалансируются).
- Повторяйте предыдущий шаг, пока дерево не станет хорошо сбалансированным.
- Преобразуйте квадродерево в триангуляцию.
Мы считаем угловые точки ячеек дерева вершинами нашей триангуляции. Перед этапом трансформации у нас есть несколько ящиков с точками в некоторых из них. Шаг преобразования выполняется следующим образом: для каждой точки деформируйте ближайший угол ее ячейки к ней и триангулируйте полученные четыре четырехугольника, чтобы получились «красивые» треугольники (заинтересованного читателя отсылаем к главе 12 «Ар-Пеледа»). [24] для более подробной информации о том, что делает треугольники «красивыми»).
Остальные квадраты триангулируются по некоторым простым правилам. Для каждого правильного квадрата (без точек внутри и без угловых точек на его сторонах) введите диагональ. Благодаря тому, как мы разделили точки с помощью свойства хорошей балансировки, ни один квадрат с углом, пересекающим сторону, не является искривленным. Таким образом, мы можем триангулировать квадраты с пересекающимися углами следующим образом. Если есть одна пересекающаяся сторона, квадрат превращается в три треугольника путем добавления длинных диагоналей, соединяющих пересечение с противоположными углами. Если есть четыре пересекающихся стороны, мы делим квадрат пополам, добавляя ребро между двумя из четырех пересечений, а затем соединяем эти две конечные точки с оставшимися двумя точками пересечения. Для остальных квадратов мы вводим точку посередине и соединяем ее со всеми четырьмя углами квадрата, а также с каждой точкой пересечения.
В конце всего этого у нас есть красивая триангулированная сетка нашего набора точек, построенная из квадродерева.
Псевдокод [ править ]
Следующий псевдокод показывает один из способов реализации квадродерева, обрабатывающего только точки. Существуют и другие подходы.
Предварительные условия [ править ]
Предполагается, что эти структуры используются.
// Simple coordinate object to represent points and vectors struct XY { float x; float y; function __construct(float _x, float _y) {...} } // Axis-aligned bounding box with half dimension and center struct AABB { XY center; float halfDimension; function __construct(XY _center, float _halfDimension) {...} function containsPoint(XY point) {...} function intersectsAABB(AABB other) {...} }
Класс QuadTree [ править ]
Этот класс представляет как одно четырехъядерное дерево, так и узел, в котором оно находится.
class QuadTree { // Arbitrary constant to indicate how many elements can be stored in this quad tree node constant int QT_NODE_CAPACITY = 4; // Axis-aligned bounding box stored as a center with half-dimensions // to represent the boundaries of this quad tree AABB boundary; // Points in this quad tree node Array of XY [size = QT_NODE_CAPACITY] points; // Children QuadTree* northWest; QuadTree* northEast; QuadTree* southWest; QuadTree* southEast; // Methods function __construct(AABB _boundary) {...} function insert(XY p) {...} function subdivide() {...} // create four children that fully divide this quad into four quads of equal area function queryRange(AABB range) {...} }
Вставка [ править ]
Следующий метод вставляет точку в соответствующий квадрат дерева квадроциклов, при необходимости разбивая его.
class QuadTree { ... // Insert a point into the QuadTree function insert(XY p) { // Ignore objects that do not belong in this quad tree if (!boundary.containsPoint(p)) return false; // object cannot be added // If there is space in this quad tree and if doesn't have subdivisions, add the object here if (points.size < QT_NODE_CAPACITY && northWest == null) { points.append(p); return true; } // Otherwise, subdivide and then add the point to whichever node will accept it if (northWest == null) subdivide(); // We have to add the points/data contained in this quad array to the new quads if we only want // the last node to hold the data if (northWest->insert(p)) return true; if (northEast->insert(p)) return true; if (southWest->insert(p)) return true; if (southEast->insert(p)) return true; // Otherwise, the point cannot be inserted for some unknown reason (this should never happen) return false; } }
Диапазон запроса [ изменить ]
Следующий метод находит все точки, содержащиеся в диапазоне.
class QuadTree { ... // Find all points that appear within a range function queryRange(AABB range) { // Prepare an array of results Array of XY pointsInRange; // Automatically abort if the range does not intersect this quad if (!boundary.intersectsAABB(range)) return pointsInRange; // empty list // Check objects at this quad level for (int p = 0; p < points.size; p++) { if (range.containsPoint(points[p])) pointsInRange.append(points[p]); } // Terminate here, if there are no children if (northWest == null) return pointsInRange; // Otherwise, add the points from the children pointsInRange.appendArray(northWest->queryRange(range)); pointsInRange.appendArray(northEast->queryRange(range)); pointsInRange.appendArray(southWest->queryRange(range)); pointsInRange.appendArray(southEast->queryRange(range)); return pointsInRange; } }
См. также [ править ]
- Адаптивное уточнение сетки
- Разделение двоичного пространства
- Бинарная мозаика
- k -d дерево
- Октри
- R-дерево
- UB-дерево
- Пространственная база данных
- Мощение
- Кривая Z-порядка
Ссылки [ править ]
Опросы Алуру [4] и Самет [22] [16] дайте хороший обзор квадродеревьев.
Примечания [ править ]
- ^ Финкель, РА; Бентли, Дж. Л. (1974). «Четырехдеревья — структура данных для поиска по составным ключам» . Акта Информатика . 4 (1): 1–9. дои : 10.1007/BF00288933 . S2CID 33019699 . Проверено 6 ноября 2019 г.
- ^ Милан Шонка, Вацлав Главац, Роджер Бойл. «Обработка изображений, анализ и машинное зрение» . 2014. п. 108-109.
- ^ Финкель, РА; Бентли, Дж. Л. (1974). «Четверные деревья: структура данных для поиска по составным ключам». Акта Информатика . 4 . Спрингер-Верлаг: 1–9. дои : 10.1007/bf00288933 . S2CID 33019699 .
- ^ Jump up to: Перейти обратно: а б с д и ж Алуру, С. (2004). «Кваддеревья и октдеревья». В Д. Мехте и С. Сахни (ред.). Справочник по структурам данных и приложениям . Чепмен и Холл/CRC. стр. 19-1 -- 19-26. ISBN 9781584884354 .
- ^ Оренштейн, Дж. А. (1982). «Многомерные попытки, используемые для ассоциативного поиска». Письма об обработке информации . 14 (4). Эльзевир: 150–157. дои : 10.1016/0020-0190(82)90027-8 .
- ^ Самет, Х. (1984). «Дерево квадрантов и связанные с ним иерархические структуры данных» (PDF) . Обзоры вычислительной техники ACM . 16 (2). АКМ: 187–260. дои : 10.1145/356924.356930 . S2CID 10319214 .
- ^ Уорнок, Дж. Э. (1969). «Алгоритм скрытой поверхности для компьютерных полутоновых изображений». Факультет компьютерных наук Университета Юты . ТР 4-15.
- ^ Шнайер, М. (1981). «Два иерархических линейных представления объектов: реберные пирамиды и реберные квадродеревья». Компьютерная графика и обработка изображений . 17 (3). Эльзевир: 211–224. дои : 10.1016/0146-664X(81)90002-2 .
- ^ Ханан Самет и Роберт Уэббер. «Хранение коллекции полигонов с использованием Квадродеревья». Транзакции ACM в графике, июль 1985 г.: 182–222. InfoLAB . Интернет. 23 марта 2012 г.
- ^ Нельсон, Р.С.; Самет, Х. (1986). «Последовательное иерархическое представление векторных данных» . ACM SIGGRAPH Компьютерная графика . 20 (4): 197–206. дои : 10.1145/15886.15908 .
- ^ Хар-Пелед, С. (2011). «Кваддеревья – иерархические сетки». Алгоритмы геометрической аппроксимации . Математические обзоры и монографии Vol. 173, Американское математическое общество.
- ^ Ванта, Дамиан; Смолик, Вальдемар Т.; Крышин, Яцек; Врублевский, Пшемыслав; Мидура, Матеуш (2021). «Метод конечного объема с использованием неоднородной структурированной сетки квадродерева для моделирования электроемкостной томографии» . Труды Национальной академии наук Индии, раздел A. 92 (3): 443–452. дои : 10.1007/s40010-021-00748-7 . S2CID 244224810 .
- ^ Сестофт, Питер (2014). Технология реализации электронных таблиц: основы и расширения . Массачусетский технологический институт Пресс. стр. 60–63. ISBN 9780262526647 .
- ^ Томас Г. Рокицки (1 апреля 2006 г.). «Алгоритм сжатия пространства и времени» . Проверено 20 мая 2009 г.
- ^ Хеннинг Эберхардт, Веса Клампп, Уве Д. Ханебек, Деревья плотности для эффективной нелинейной оценки состояния , Материалы 13-й Международной конференции по объединению информации, Эдинбург, Великобритания, июль 2010 г.
- ^ Jump up to: Перейти обратно: а б Самет, Х. (1989). «Иерархические пространственные структуры данных». Симпозиум по большим пространственным базам данных : 191–212.
- ^ Хантер, генеральный директор (1978). Эффективные вычисления и структуры данных для графики . доктор философии диссертация, факультет электротехники и информатики Принстонского университета.
- ^ Хантер, генеральный менеджер; Стейглиц, К. (1979). «Операции над изображениями с использованием квадродеревьев». Транзакции IEEE по анализу шаблонов и машинному интеллекту . 2 (2): 145–153. дои : 10.1109/tpami.1979.4766900 . ПМИД 21868843 . S2CID 2544535 .
- ^ Шнайер, М. (1981). «Расчеты геометрических свойств с использованием квадродеревьев». Компьютерная графика и обработка изображений . 16 (3): 296–302. дои : 10.1016/0146-664X(81)90042-3 .
- ^ Мехта, Динеш (2007). Справочник по структурам данных и приложениям . Чепмен и Холл/CRC Press. п. 397.
- ^ Самет, Х. (1981). «Маркировка связанных компонентов с использованием квадродеревьев». Журнал АКМ . 28 (3): 487–501. CiteSeerX 10.1.1.77.2573 . дои : 10.1145/322261.322267 . S2CID 17485118 .
- ^ Jump up to: Перейти обратно: а б Самет, Х. (1988). «Обзор квадродеревьев, октодеревьев и связанных с ними иерархических структур данных». В Эрншоу, РА (ред.). Теоретические основы компьютерной графики и САПР . Спрингер-Верлаг. стр. 51–68.
- ^ Тарьян, Р.Э. (1975). «Эффективность хорошего, но не линейного алгоритма объединения множеств» (PDF) . Журнал АКМ . 22 (2): 215–225. дои : 10.1145/321879.321884 . hdl : 1813/5942 . S2CID 11105749 .
- ^ Jump up to: Перейти обратно: а б Хар-Пелед, С. (2011). «Хорошие триангуляции и сетки». Алгоритмы геометрической аппроксимации . Математические обзоры и монографии Vol. 173, Американское математическое общество.
- ^ де Берг, М.; Чеонг, О.; ван Кревелд, М.; Овермарс, Миннесота (2008). «Генерация неоднородной сетки квадродеревьев». Алгоритмы и приложения вычислительной геометрии (3-е изд.). Спрингер-Верлаг.
Общие ссылки [ править ]
- Рафаэль Финкель и Дж. Л. Бентли (1974). «Четверные деревья: структура данных для поиска по составным ключам». Акта Информатика . 4 (1): 1–9. дои : 10.1007/BF00288933 . S2CID 33019699 .
- Марк де Берг , Марк ван Кревелд , Марк Овермарс и Отфрид Шварцкопф (2000). Вычислительная геометрия (2-е исправленное изд.). Издательство Спрингер . ISBN 3-540-65620-0 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) Глава 14: Quadtrees: стр. 291–306. - Самет, Ханан ; Уэббер, Роберт (июль 1985 г.). «Хранение коллекции полигонов с использованием квадродеревьев» (PDF) . Проверено 23 марта 2012 г.