Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > B-Tree


Автор: Domain 18.12.2011, 23:52
Всем привет. Есть задача. Реализовать  в  виде  программы  заданный  набор  операций (принадлежность,  поиск, 
объединение,  разность,  пересечение)  с  использованием  управляющей  структуры  данных – B-дерево 
порядка k=4. 

В Java есть TreeSet, а в си или с++ есть что-то подобное? Реализаций B-Tree в инете завались, а вот методов аналогичных  retainAll и removeAll я не видел.
Что посоветуете, может есть у кого готовая реализация.  

Автор: bsa 19.12.2011, 00:18
обычно, http://en.cppreference.com/w/cpp/container/set реализуется через черно-красное бинарное дерево. И там есть метод clear. А вот аналога retainAll нет. Придется писать самому.

Автор: Domain 19.12.2011, 09:35
Это вообщем не радует. А идеи по retainAll есть ? Т.е. как его реализовать, алгоритм.

Автор: bsa 19.12.2011, 10:46
Domain, конечно. ничего сложного там нет. просто удаляешь все элементы, которые отсутствуют в другом контейнере. В чем проблема?
for, std::set::erase, std::set::count тебе в помощь.

Автор: Domain 21.12.2011, 01:05
а как понять B-дерево порядка k=4 ?

Автор: bsa 21.12.2011, 11:48
Цитата(http://en.wikipedia.org/wiki/B-tree)
According to Knuth's definition, a B-tree of order m (the maximum number of children for each node) is a tree which satisfies the following properties:
Every node has at most m children.
Every node (except root) has at least m⁄2 children.
The root has at least two children if it is not a leaf node.
All leaves appear in the same level, and carry information.
A non-leaf node with k children contains k−1 keys.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)