Содержание
- 2. ROPE Rope — структура данных для хранения строки, представляющая из себя двоичное сбалансированное дерево и позволяющая
- 3. ROPE В таблице приведены трудоемкости операций очереди с приоритетом:
- 4. Представление ROPE Очевидно что наша структура — это двоичное дерево поиска, в листьях которого находятся элементарные
- 5. Представление ROPE Узлы дерева имеют характеристику — вес. Если в узле дерева хранится непосредственно часть символов
- 6. Представление ROPE Структура будет имет следующий вид: struct trie { char *string; int length; struct trie
- 7. Создание узла ROPE struct trie *trie_create(char *string) { struct trie *node; if ((node = (trie*)malloc(sizeof(*node))) ==
- 8. Операция Merge (Конкатенация строк) Когда приходит запрос на конкатенацию с другой строкой мы объединяем оба дерева,
- 9. Операция Merge (Конкатенация строк) struct trie *merge(struct trie *trie1, struct trie *trie2) { struct trie *node;
- 10. Получение символа по индексу Чтобы получить символ по некоторому индексу , будем спускаться по дереву из
- 11. Получение символа по индексу char get(int i, struct trie *node) { if (node->left != NULL) if
- 12. Split (Разбиение строки) Чтобы разбить строку на две по некоторому индексу необходимо спускаясь по дереву (аналогично
- 13. Split (Разбиение строки) Пускай дано дерево:
- 14. Получение символа по индексу Тогда результатом выполнения операции по индексу будет:
- 15. Возвращение функцией двух узлов Для того, чтобы возвращать сразу два узла, воспользуемся следующей структурой: struct d_trie
- 16. Получение символа по индексу struct d_trie *split(struct trie *node, int i) { struct d_trie *res; res
- 17. Получение символа по индексу if (node->left != NULL) if (node->left->length >= i) { res = split(node->left,
- 18. Операции удаления и вставки Нетрудно понять, что имея операции merge и split, можно легко через них
- 19. Операция удаления struct trie *_delete(struct trie *node, int beginIndex, int endIndex) { struct d_trie *res; res
- 21. Скачать презентацию