Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
book_2_1_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
18.93 Mб
Скачать

2.4. Двокаскадна декомпозиція простору

Підхід з декомпозицією всього простору n-вимірних даних полягає в поділі всіх координат на частини і побудови гіперкубів. Фактично рознесення значень точок n-вимірного простору у відповідний гіперкуб вимагає попереднього опрацювання даних, а саме сортування значень вибірки за всіма координатами.

Для декомпозиції простору використовуємо двокаскадну кластеризацію. Розбиваємо вхідну множину ключів Q(Q1, Q2, Q3, … QN) на p підмножин O1(Q1, Q2, Q3, Qz), O2(Qz+1, Q z+2, Q z+3, … Qt), … , Op(Qt+1, Q t+2, Qt+3, QN). До кожної з підмножин, застосуємо алгоритм кластеризації, утворивши множини відповідних кластерів K1(k1, k2, k3, …), K2(ks, ks+1, ks+2, …), … , Kp(kr, kr+1, kr+2, …), де k1, k2,…, ki, ... – кластери, ключі в яких відносяться до відповідних підмножин O1, O2, …, Op. Утворимо множину кластерів 1-го каскаду кластеризації K об’єднанням ( 2 .71). Застосуємо до цієї множини алгоритм кластеризації, розглядаючи кожен з кластерів k1, k2,…, ki, ... як базовий, тобто листок дерева згортання. В результаті сформується множина кластерів 1-го каскаду. Таким чином отримуємо двокаскадну декомпозицію простору. Схема поділу та згортання зображена на рис. 2 .59.

Рис. 2.59. Двокаскадне дерево формування кластерів

Нехай простір складаєтсься із s n-вимірних даних: C = C(a, b, … , z). Вимірність а поділимо на n частин, b – на m частин, ..., вимірність z – на k частин. Поділ простору за вимірностями на частини за параметрами n, m, … , k позначимо вектором розбиття l = (n, m, …, k). Схематично поділ тривимірного простору зображено на рис. 2 .60.

Рис. 2.60. Схема поділу тривимірного простору на куби

Використаємо два способи поділу простору: гіперкуби різних розмірів, але з однаковою кількістю значень даних; другий ­­– на гіперкуби з неконтрольованими кількостями значеннями даних, але контрольованими розмірами сторін, що задаються користувачем.

На рис. 2 .61 схематично зображено поділ двовимірного простору: а – вхідна множина, б – гіперкуби із однаковою кількістю точок, в – поділ за значеннями по кожній координаті.

а б в

Рис. 2.61. Схема поділу двовимірного простору

На рис. 2 .61, а зображено простір що складається із 20000 2-вимірних точок, згенерованих за нормальним законом розподілу. На рис. 2 .61, б вектор розбиття l = (2, 2) дає гіперкуби (прямокутники у 2-вимірному просторі) із однаковою кількістю точок, але різних за розмірами. На рис. 2 .61, в цей же вектор розбиття та поділ координатних проміжків на рівні частини дає однакові гіперкуби. На рис. 2 .61, б – кожна підмножина (кожен квадрант) містить по 5000 точок. На рис. 2 .61, в червоним кольором позначено 4540 точок, зеленим – 2030, синім – 11350, темносинім – 2080.

Складність алгоритму збільшується на сортування вибірки за всіма координатами, тобто стає рівною: O(pni3) + pO(N2).

Приведемо алгоритм поділу гіперкуба на куби із однаковою кількістю точок:

Крок 0. Отримати вектор l = (n, m, …, k) розбиття гіперкуба за його вимірностями a, b, …, z; i = 0; множина C – вхідна множина.

Крок 1. Обчислити count = [s / l0].

Крок 2. Якщо l0 = 1 то перейти на крок 7, інакше на крок 3.

Крок 3. Посортувати множину С за i-вимірністю.

Крок 4. j = 0. Поки j < l0:

Крок 5. Поки кількість точок у Ctj не рівна count, перенести точку із множини С у Ctj, якщо С = перейти на крок 6, інакше j = j+1.

Крок 6. Перенести всі точки із множини С у Ctj.

Крок 7. Додати до множини Сt множину С.

Крок 8. Видалити зі списку l перший елемент l0.

Крок 9. Якщо l = , то кожну підмножину з Сt додати до множини результату Сres. Інакше i = i+1, для кожної підмножини Сt виконати алгоритм, починаючи з 1 кроку.

Множина Сt містить підмножини проміжних результатів поділу гіперкуба. Множина Сres містить шукані підмножини розбиття гіперкуба. Крок 6 додає {s/l0} точок до останньої підмножини у Сt.

У випадку коли необхідно поділити гіперкуб на куби за значеннями точок по кожній вимірності, поданий вище алгоритм зміниться в наступному кроці:

Крок 5. minMaxValue = C0, i + Cs-1, i. Поки координата точки Сі ≤ [(i + 1) ∙ minMaxValue/l0], перенести точку із множини С у Ctj, якщо С = перейти на крок 6, інакше j = j+1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]