Блог пользователя Dalgerok

Автор Dalgerok, 6 лет назад, По-русски

Оптимизация декартова дерева по памяти, о которой знают не все.

Фишка в процедуре erase() (находит вершину с заданным ключем и удаляет ее). На e-maxx.ru есть код:

void erase (pitem & t, int key) {
	if (t->key == key)
		merge (t, t->l, t->r);
	else
		erase (key < t->key ? t->l : t->r, key);
}

Добавим капельку магии:

void erase (pitem & t, int key) {
	if (t->key == key){
                pitem to_del = t;
		merge (t, t->l, t->r);
                delete to_del;
        }
	else
		erase (key < t->key ? t->l : t->r, key);
}

Ну вот, теперь вершина действительно удаляется, тем самым мы экономим немного памяти.

UPD: добавлено в https://cp-algorithms.com/data_structures/treap.html

  • Проголосовать: нравится
  • -35
  • Проголосовать: не нравится