Поисковые деревья m-WAY | Комплект-1 (Поиск)
M- сторонние деревья поиска - это многосторонние деревья, которые представляют собой обобщенные версии двоичных деревьев, в которых каждый узел содержит несколько элементов. В m-Way дереве порядка m каждый узел содержит не более m - 1 элемента и m дочерних элементов.
Цель m-Way поискового дерева высоты h требует O (h) no. доступов для операции вставки / удаления / извлечения. Следовательно, это гарантирует, что высота h близка к log_m (n + 1) .
Количество элементов в дереве поиска m-Way высоты h колеблется от минимума h до максимума .
Дерево поиска m-Way из n элементов находится в диапазоне от минимальной высоты log_m (n + 1) до максимума n.
Пример 5-стороннего дерева поиска показан на рисунке ниже. Обратите внимание на то, что каждый узел имеет не более 5 дочерних узлов и, следовательно, содержит не более 4 ключей.
The structure of a node of an m-Way tree is given below:
struct node { int count; int value[MAX + 1]; struct node* child[MAX + 1]; }; |
- Here, count represents the number of children that a particular node has
- The values of a node stored in the array value
- The addresses of child nodes are stored in the child array
- The MAX macro signifies the maximum number of values that a particular node can contain
Поиск в дереве поиска m-Way:
- Поиск ключа в дереве поиска m-Way аналогичен поиску в двоичном дереве поиска.
- Чтобы найти 77 в 5-стороннем дереве поиска, показанном на рисунке, мы начинаем с корня и, поскольку 77> 76> 44> 18, переходим к четвертому поддереву.
- В корневом узле четвертого поддерева 77 <80 & поэтому мы переходим к первому поддереву узла. Поскольку 77 доступно в единственном узле этого поддерева, мы утверждаем, что поиск 77 был успешно выполнен.
// Searches value in the node struct node* search( int val, struct node* root, int * pos) { // if root is Null then return if (root == NULL) return NULL; else { // if node is found if (searchnode(val, root, pos)) return root; // if not then search in child nodes else return search(val, root->child[*pos], pos); } } // Searches the node int searchnode( int val, struct node* n, int * pos) { // if val is less than node->value[1] if (val < n->value[1]) { *pos = 0; return 0; } // if the val is greater else { *pos = n->count; // check in the child array // for correct position while ((val < n->value[*pos]) && *pos > 1) (*pos)--; if (val == n->value[*pos]) return 1; else return 0; } } |
поиск():
- Функция search () получает три параметра
- Первый параметр - это значение для поиска, второй - это адрес узла, с которого должен выполняться поиск, а третий - это адрес переменной, которая используется для хранения позиции найденного значения.
- Первоначально проверяется условие, является ли адрес искомого узла NULL.
- Если это так, то просто возвращается значение NULL.
- В противном случае вызывается функция searchchnode (), которая фактически ищет заданное значение.
- Если поиск успешен, возвращается адрес узла, в котором найдено значение.
- Если поиск не увенчался успехом, выполняется рекурсивный вызов функции search () для дочернего элемента текущего узла.
searchchnode ():
- Функция searchchnode () получает три параметра
- Первый параметр - это значение, которое нужно найти.
- Второй параметр - это адрес узла, в котором должен выполняться поиск, а третий - указатель pos, который содержит адрес переменной, в которой сохраняется позиция значения, которое однажды было найдено.
- Эта функция возвращает значение 0, если поиск завершился неудачно, и 1, если он успешен.
- В этой функции сначала проверяется, меньше ли искомое значение, чем самое первое значение узла.
- Если это так, это означает, что значение отсутствует в текущем узле. Следовательно, значение 0 присваивается переменной, на которую указывает pos, и возвращается 0, поскольку поиск неуспешен.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.