У випадку двовимірного простору, ця структура даних розбиває простір на множину ієрархічно вкладених прямокутників, які можуть перетинатись. У разі тривимірного або багатовимірного простору це будуть прямокутні паралелепіпеди.
Алгоритми вставки і видалення використовують ці обмежуючі прямокутники для забезпечення того, щоб «близько розташовані» об'єкти були поміщені в одну листову вершину. Зокрема, новий об'єкт потрапить у ту листову вершину, для якої потрібно найменше розширення її прямокутника. Кожен елемент листової вершини зберігає два поля даних: спосіб ідентифікації даних, що описують об'єкт, (або самі ці дані) і прямокутник, який обмежує цей об'єкт.
Аналогічно, алгоритми пошуку (наприклад, перетин, включення, окіл) використовують обмежуючі прямокутники для прийняття рішення про необхідність пошуку в дочірній вершині. Таким чином, більшість вершин ніколи не використовуються при пошуку. Як і у випадку з B-деревами, ця властивість R-дерев обумовлює їх придатність для баз даних, де вершини можуть вивантажуватися на накопичувач в міру необхідності.
Для розділення переповнених вершин можуть застосовуватися різні алгоритми, що породжує поділ R-дерев на підтипи: квадратичні та лінійні.
Спочатку R-дерева не гарантували гарних характеристик для найгіршого випадку, хоча добре працювали на реальних даних. Однак, в 2004-му році був опублікований новий алгоритм, що визначає пріоритетні R-дерева. Стверджується, що цей алгоритм ефективний, як і найбільш ефективні сучасні методи, і в той же час є оптимальним для найгіршого випадку.[5]
Структура R-дерева
Кожна вершина R-дерева має змінну кількість елементів (не більше деякого заздалегідь заданого максимуму). Кожен елемент не листової вершини зберігає два поля даних: спосіб ідентифікації дочірньої вершини і обмежує прямокутник (кубоїд), що охоплює всі елементи цієї дочірньої вершини. Всі збережені кортежі зберігаються на одному рівні глибини, таким чином, дерево ідеально збалансовано. При проектуванні R-дерева потрібно задати деякі константи:
maxNumOfEntries — максимальне число дітей у вершини
minNumOfEntries — мінімальне число дітей у вершини, за винятком кореня.
Для коректної роботи алгоритмів необхідно, щоб minNumOfEntries <= maxNumOfEntries / 2. У кореневій вершині може бути від 2 до maxNumOfEntries нащадків. Часто вибирають minNumOfEntries = 2, тоді для кореня виконуються ті ж умови, що і для інших вершин. Також іноді розумно виділяти окремі константи для кількості точок в листових вершинах, так як їх часто можна робити більше.
Ідея R-дерева
Основна ідея структури даних полягає в групі прилеглих об'єктів і представляти їх з їх мінімальним обмежувальним прямокутником в наступному вищому рівні дерева; звідси ця буква «R» (англ.rectangle) у назві R-дерева. Так як всі об'єкти знаходяться в межах цього контурного прямокутника, запит, який не перетинає прямокутник також не може перетинати будь-який з об'єктів прямокутника. На рівні листка, кожен прямокутник описує один об'єкт; на більш високих рівнях агрегації все більше об'єктів. Це також можна розглядати як збільшення грубої апроксимації набору даних.
За аналогією з В-деревом, R-дерево також збалансоване дерево пошуку (так що всі вузли листя знаходяться на однаковій висоті), організовує дані в сторінках, і призначене для зберігання на диску (як воно використовується в базах даних). Кожна сторінка може містити максимальну кількість записів, які часто позначаються як . Це також гарантує мінімальні заповнення (для кореневого вузла, як виняток), проте краще виконання було представлено з мінімальним заповненням 30 %-40 % від максимальної кількості входів (B-дерева гарантують 50 % заповнення сторінки, а В*-дерева навіть 66 %). Причиною цього є необхідність більш складного балансування для просторових даних, на відміну від лінійних даних, що зберігаються в B-деревах.
Як і з більшістю дерев, алгоритми пошукових (наприклад, перетин, локалізації, пошук найближчого сусіда) досить прості. Ключова ідея полягає в тому, щоб використати обмежуючі рамки, для прийняття рішення, чи варто шукати всередині піддерева. Таким чином, більшість вузлів в дереві ніколи не читали під час пошуку. На відміну від B-дерев, це робить R-дерева, придатними для великих наборів даних і баз даних, де вузли можуть бути вивантажені в пам'яті, коли це необхідно, і все дерево не може зберігатися в оперативній пам'яті.
Основні труднощі R-дерев є створення ефективного дерева, яке, з одного боку, збалансоване (так що вузли листа знаходяться на тій же висоті) з іншого боку прямокутниками не покривають занадто багато порожнього простору і не перекривають один одного занадто (так що під час пошуку, менше піддерева повинні бути оброблені). Наприклад, початкова ідея для вставки різних елементів, щоб отримати ефективне дерево — вставляти в піддерево, яке вимагає найменшого розширення його обмежувальної рамки. Після того, як сторінка заповнилась, дані розбиваються на дві групи, які повинні охоплювати мінімальну площу кожного. Більшість досліджень і удосконалень для R-дерев спрямована на поліпшення шляху побудови дерева і можуть бути згруповані в два об'єкти: побудова ефективного дерева з нуля (відомий як насипний завантаженням) і виконання змін в існуючому дереві (вставка і видалення).
R-дерева не гарантують гарну продуктивність в поганому випадку[en], але в цілому добре працюють з реальними даними.[6] У той час як більш теоретичний інтерес, (насипна завантаженим) Пріоритетне R-дерево[en] — це найбільш оптимальний варіант R-дерева в найгіршому випадку,[5] але через підвищену складність, йому не приділялося багато уваги в практичних додатках до цих пір.
Коли дані організовані в R-дереві, найближчі К-сусіди (для будь-якого Lp-Norm) всіх точок ефективно можна обчислити за допомогою просторового об'єднання.[7] Це вигідно для багатьох алгоритмів, заснованих на найближчих К сусідах, наприклад Local Outlier Factor. DeLi-Clu,[8] Density-Link-Clustering є алгоритмом кластерного аналізу, який використовує структуру R-дерева для подібного роду просторового приєднання ефективно обчислювати кластеризацію OPTICS.
Побудова R-дерева відбувається, як правило, за допомогою багаторазового виклику операції вставки елемента в дерево. Ідея вставки схожа на вставку в B-дерево: пробуємо додати крапку в підходящу листову вершину, якщо вона переповнюється, поділяємо її і, поки вимагається, ділимо її предків. Наведемо нижче класичний алгоритм вставки, описаний Антоніном Гуттманном.
Функція insert
викликає chooseLeaf, щоб вибрати лист, куди ми хочемо вставити крапку. Якщо вставка здійснена, то дерево могло бути поділено, і розкол міг дійти до вершини. У цьому випадку chooseLeaf повертає дві розколоті вершини splittedNodes для вставки в корінь
викликається функція adjustBounds, яка розширює обмежує прямокутник кореня на вставляється точку
перевіряє, якщо chooseLeaf повернула ненульові splittedNodes, то дерево росте на рівень вгору: з цього моменту коренем оголошується вершина, діти якої ті самі splittedNodes
Функція chooseLeaf
якщо на вході лист (база рекурсії), то:
викликає функцію doInsert, яка здійснює безпосередню вставку елемента в дерево і повертає два листи, якщо відбулося розділення
змінює обмежуючий прямокутник вершини з урахуванням вставленої точки
повертає splittedNodes, які нам повернув doInsert
якщо на вході не листова вершина:
з усіх нащадків вибирається той, чиї кордони вимагають мінімального збільшення для вставки даної точки
рекурсивно викликається chooseLeaf для обраного нащадка
поправляються обмежуючі прямокутники
якщо splittedNodes від рекурсивного виклику нульові, то покидаємо функцію, інакше:
якщо numOfEntries <maxNumOfEntries, то додаємо нову вершину до дітей, чистимо splittedNodes
інакше (коли немає місць для вставки), ми конкатенуємо масив дітей з новою вершиною і передаємо отримане функції linearSplitNodes або іншої функції поділу вершин, і повернемо з chooseLeaf ті splittedNodes, які нам повернула використовувана функція поділу.
Функція linearSplit
Для поділу вершин можуть використовуватися різні алгоритми, це один з них. Він має всього лінійну складність і просто реалізується, правда видає не саме оптимальне розділення. Однак практика показує, що такої складності зазвичай достатньо.
по кожній координаті для всього набору поділюваних вершин обчислюється різниця між максимальною нижньою межею прямокутника з цієї координаті та мінімальної верхньої, потім ця величина нормалізується на різницю між максимальною і мінімальною координатою точок вихідного набору для побудови всього дерева
знаходиться максимум цього нормалізованого розкиду по всіх координатах
встановлюємо як перших дітей для повертаних вершин node1 і node2 ті вершини з вхідного списку, на яких досягався максимум, видаляємо їх з вхідного списку, коригуємо bounds для node1 і node2
далі, виконується вставка для решти вершин:
якщо в списку залишилося настільки мало вершин, що якщо їх все додати в одну з вихідних вершин, то в ній виявиться minNumOfEntries вершин, то в неї додається залишок, повернення з функції
якщо в якійсь з вершин вже набраний максимум нащадків, то залишок додається в протилежну, повернення
для чергової вершини зі списку порівнюється, на скільки треба збільшити обмежує прямокутник при вставці в кожну з двох майбутніх вершин, де менше — туди її і вставляється
Функція фізичної вставки doInsert
якщо в вершині є вільні місця, то точка вставляється туди
якщо ж місць немає, то діти вершини конкатенуються з точкою, яка додається, і викликається функція linearSplit або іншу функцію поділу, що повертає дві розділені вершини, які ми повертаємо з doInsert
Розбиття за допомогою алгоритмів кластеризації
Іноді замість R-дерева використовують так зване cR-дерево (c означає clustered). Основна ідея в тому, що для розділення вершин або точок використовуються алгоритми кластеризації, такі як k-means. Складність k-means теж лінійна, але він в більшості випадків дає кращий результат, ніж лінійний алгоритм поділу Гуттмана, на відміну від якого він не тільки мінімізує сумарну площу огинаючих паралелепіпедів, але і відстань між ними і площа перекриття. Для кластеризації точок використовується обрана метрика початкового простору, для кластеризації вершин можна використовувати відстань між центрами їх огинаючих паралелепіпедів або максимальною відстанню між ними.
Алгоритми кластеризації не враховують те, що число нащадків вершини обмежено зверху і знизу константами алгоритму. Якщо кластеризація видає неприйнятний результат, можна використовувати для цього набору класичний алгоритм, так як на практиці таке відбувається не часто.
Цікава ідея використовувати кластеризацію на кілька кластерів, де кілька може бути більше двох. Однак треба враховувати, що це накладає певні обмеження на параметри структури R-дерева.
Відзначимо, що крім cR-дерева існує його варіація clR-дерево, засноване на методі кластеризації, де як центр використаний ітераційний алгоритм розв'язання «задачі розміщення». Алгоритм має квадратичну обчислювальну складність, але забезпечує побудову більш компактних огинаючих паралелепіпедів у записах вершин структури.
Пошук
Пошук в дереві досить тривіальний, треба лише враховувати той факт, що кожна точка простору може бути покрита декількома вершинами.
Вплив різних розщеплень евристики на базі даних з американськими поштовими районами
Квадратичний розкол Гуттмана.[1] В цьому дереві накладено багато сторінок.
Лінійний розкол Гуттмана.[1] Ще гірша структура, але її швидше будувати.
Розкол Гріна.[9] Сторінки перекриваються значно менше ніж за стратегією Гуттмана.
Лінійний розкол Анг-Тана.[10] Ця стратегія передбачає нарізання сторінок, які часто призводять до поганої продуктивності запитів.
Топологічний розкол R*-дерева.[11] Сторінки перекриваються набагато менше, так як R*-дерево намагається звести до мінімуму дублювання сторінок, а також вставити додатково оптимізоване дерево. Стратегія розколу надає перевагу квадратним сторінкам, що дає кращу продуктивність для найбільш часто використовуваних додатків карти.
Bulk завантажене R* дерево використовує Sort-Tile-Recursive (STR). Сторінки листя не перекриваються, а сторінки каталогу тільки трохи перекривають одна одну. Це дуже ефективне дерево, але воно вимагає, щоб дані були повністю відомі заздалегідь.
M-дерева[en] подібні до R-дерев, але використовують вкладені сферичні сторінки. Розщеплення цих сторінок набагато складніше, і сторінки, як правило, перекриваються набагато більше.
Обговорення R-дерев
Переваги
ефективно зберігають локалізовані в просторі групи об'єктів
збалансовані, значить, швидкий пошук в гіршому випадку
вставка / видалення однієї точки не вимагає істотної перебудови дерева (динамічний індекс)
Недоліки
чутливе до порядку додавання даних
обмежують прямокутники вершин можуть перекриватися
↑Roussopoulos, N.; Kelley, S.; Vincent, F. D. R. (1995). Nearest neighbor queries. Proceedings of the 1995 ACM SIGMOD international conference on Management of data – SIGMOD '95. с. 71. doi:10.1145/223784.223794. ISBN0897917316.
↑Schubert, E.; Zimek, A.; Kriegel, H. P. (2013). Geodetic Distance Queries on R-Trees for Indexing Geographic Data. Advances in Spatial and Temporal Databases. Lecture Notes in Computer Science. Т. 8098. с. 146. doi:10.1007/978-3-642-40235-7_9. ISBN978-3-642-40234-0.
↑Brinkhoff, T.; Kriegel, H. P.; Seeger, B. (1993). Efficient processing of spatial joins using R-trees. ACM SIGMOD Record. 22 (2): 237. doi:10.1145/170036.170075.
↑Achtert, E.; Böhm, C.; Kröger, P. (2006). DeLi-Clu: Boosting Robustness, Completeness, Usability, and Efficiency of Hierarchical Clustering by a Closest Pair Ranking. LNCS: Advances in Knowledge Discovery and Data Mining. Lecture Notes in Computer Science. 3918: 119—128. doi:10.1007/11731139_16. ISBN978-3-540-33206-0.
↑Ang, C. H.; Tan, T. C. (1997). New linear node splitting algorithm for R-trees. У Scholl, Michel; Voisard, Agnès (ред.). Proceedings of the 5th International Symposium on Advances in Spatial Databases (SSD '97), Berlin, Germany, July 15–18, 1997. Lecture Notes in Computer Science. Т. 1262. Springer. с. 337—349. doi:10.1007/3-540-63238-7_38.
Toko Aneka Jaya pada 2018. Toko Aneka Jaya adalah bangunan yang terinventarisasi untuk ditetapkan sebagai salah satu bangunan cagar budaya, yang terletak di Jalan Semeru No. 20, Kelurahan Kalicacing, Kecamatan Sidomukti, Kota Salatiga, Provinsi Jawa Tengah. Rumah toko yang diperkirakan dibangun pada 1912 ini merupakan salah satu bukti fisik yang mewakili kawasan pecinan di Kota Salatiga pada masa pemerintahan gemeente (kotapraja). Pada 17 Juni 2015, bangunan ini menerima penghargaan dalam ben...
Municipality in Östergötland County, SwedenÖdeshög Municipality Ödeshögs kommunMunicipality Coat of armsCoordinates: 58°13′N 14°39′E / 58.217°N 14.650°E / 58.217; 14.650CountrySwedenCountyÖstergötland CountySeatÖdeshögArea[1] • Total668.99 km2 (258.30 sq mi) • Land430.42 km2 (166.19 sq mi) • Water238.57 km2 (92.11 sq mi) Area as of 1 January 2014.Population...
«Aceptación» Episodio de House M. D. House tiene que salvar a un condenado a morir por inyección letal. Dos años después de estrenado el episodio la pena de muerte fue abolida en Nueva Jersey.[1]Título traducido «Acceptance»Episodio n.º Temporada 2Episodio HOU 201Dirigido por Dan AttiasEscrito por Russel Friend y Garrett LernerGuion por Russel FriendCód. de producción HOU-201Emisión 13 de septiembre de 2005Diagnóstico Feocromocitoma y envenenamiento con metanolEstrel...
PlovdivОбласт Пловдив Oblast van Bulgarije Situering Planregio Zuid-Centraal Coördinaten 42°10'NB, 24°45'OL Algemeen Oppervlakte 5.973 km² Inwoners (31 december 2018 [1]) 668.334 (112 inw./km²) Gemeentes 18 Hoofdplaats Plovdiv Overig Nummerplaat PB Portaal Bulgarije Plovdiv (Bulgaars: Област Пловдив) is een oblast in het centrale zuiden van Bulgarije. De hoofdstad is het gelijknamige Plovdiv en de oblast heeft 668.334 inwoners (2018). ...
Gereja Lospalos Peta Lospalos Lospalos (kadang-kadang keliru ditulis Los Palos) adalah kota di Timor Leste. Letaknya 248 km di timur Dili, ibu kota negara itu. Lospalos dihuni oleh 28.000 penduduk dan merupakan ibu kota dari distrik Lautém. Lospalos adalah kota kelahiran pemimpin gerilya kemerdekaan Timor Leste, Nino Konis Santana (1959-1998). Di dunia internasional, kota ini sering kali keliru disebut Los Palos, sehingga kesannya nama ini berasal dari bahasa Spanyol. Kenyataannya, nama...
Highway in British Columbia BC 16 redirects here. For the year, see 16 BC. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: British Columbia Highway 16 – news · newspapers · books · scholar · JSTOR (August 2009) (Learn how and when to remove this template message) Highway 16Yellowhead HighwayTrans-Canada High...
Bandar Udara Robert Atty BessingRobert Atty Bessing AirportGerbang masuk area Bandara R.A. BessingIATA: LNUICAO: WAQMInformasiJenisPublikLokasiMalinau, Kalimantan Timur, IndonesiaKetinggian dpl8 mdplKoordinat03°34′31″N 116°37′11″E / 3.57528°N 116.61972°E / 3.57528; 116.61972PetaLNULokasi bandara di IndonesiaLandasan pacu Arah Panjang Permukaan m kaki 04/22 1,400 5 Aspal Bandar Udara Robert Atty Bessing (IATA: LNU, ICAO: WAQM,[1] sebel...
Pour les articles homonymes, voir Turgis. Tanguy TurgisTanguy Turgis au départ de Paris-Roubaix juniors en 2016InformationsNaissance 16 mai 1998 (25 ans)Bourg-la-ReineNationalité françaiseDistinctions Vélo d'or Juniors (d) (2015 et 2016)Équipes amateurs 2013-2014US Métro Transports2015-2016US Métro Transports Junior2017BMC DevelopmentÉquipes professionnelles 2018Vital Conceptmodifier - modifier le code - modifier Wikidata Tanguy Turgis, né le 16 mai 1998 à Bourg-la-Reine, est u...
هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (نوفمبر 2017) قدرة الجر في الهندسة الميكانيكية (بالإنجليزية: Tractive effort ) هي القوة الناتجة من محرك أو مركبة لتحريكها عن طريق قوة الجر. وتختلف قدرة الجر عن قوة الجر في كونها ت...
هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (نوفمبر 2019) روث ترينغهام معلومات شخصية الميلاد 14 أكتوبر 1940 (83 سنة) بيدفوردشير مواطنة المملكة المتحدة الحياة العملية المدرسة الأم جامعة إدنبرة (الشهادة:دك...
Kereta kecepatan tinggi Beijing-Guangzhou-Shenzhen-Hong Kong京广深港高速铁路京廣深港高速鐵路Kereta kecepatan tinggi Beijing-Guangzhou dengan nomor G71 sedang meluncur meninggalkan Beijing.IkhtisarJenisKereta kecepatan tinggiStatusBeroperasiLokasiBeijing, Hebei, Henan, Hubei, Hunan, Guangdong, Hong KongTerminusBeijingxi(selanjutnya: Stasiun Fengtai)Stasiun Kereta Kowloon BaratStasiun47OperasiDibuka26 Desember 2012PemilikKereta api Tiongkok (sektor Tiongkok ...
Contoh tata letak petak balon Petak balon (bahasa Inggris: balloon loop) adalah struktur jalan rel yang dibuat melingkar mengitari suatu tempat yang luas dan memungkinkan kereta api untuk membalikkan arah tanpa harus langsir atau bahkan berhenti. Balon loop dapat berguna untuk semua jenis kereta api.[1] Petak balon banyak dimanfaatkan pada sistem jalur trem. Banyak trem menggunakan kereta ujung tunggal yang memiliki pintu hanya pada satu sisi dan harus diputar pada tiap-tiap jurusan a...
Canadian actress (active 2006–) For other people named Sharon Taylor, see Sharon Taylor (disambiguation). This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Sharon Taylor – news · newspapers · books · ...
Town in County Durham, England For people named Billingham, see Billingham (surname). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Billingham – news · newspapers · books · scholar · JSTOR (July 2018) (Learn how and when to remove this template message) Town in EnglandBillinghamTownFrom the top, Town Centr...
Pantai Ungapan adalah sebuah pantai di pesisir selatan atau berada di Samudra Hindia, dimana secara administratif masuk Desa Gajahrejo, Kecamatan Gedangan, Kabupaten Malang, Jawa Timur.[1] Letak pantai ini berdekatan dengan Pantai Bajulmati. Pantai ini berjarak sekitar 64 km dari Kota Malang dan dibutuhkan sekitar 3 jam perjalanan untuk mencapainya. Jika dari Kota Malang Anda bisa mengambil arah ke Turen lalu berbelok ke selatan menuju Sumbermanjing Wetan dan lurus menuju arah Pantai ...
4-port 10BASE-T hub Ethernet dengan port MDI-X / MDI yang dapat dipilih Hub Ethernet 8-port dengan satu konektor 10BASE2 dan delapan port 10BASE-T Hub, hub Eternet, hub aktif, hub jaringan, hub pengulang, atau multiport pengulang adalah perangkat keras jaringan untuk menghubungkan beberapa perangkat Eternet bersama-sama dan menjadikannya bertindak sebagai segmen jaringan tunggal. Ini memiliki beberapa porta input/output (I/O), di mana sinyal diperkenalkan pada input dari porta apa pun muncul ...