Автор Тема: Вставка в красно-чёрное дерево  (Прочитано 5059 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Вставка в красно-чёрное дерево
« : Ноябрь 11, 2013, 01:07:12 pm »
Возможно глупый вопрос. При вставке, если данный ключ уже имеется в дереве, то как правильно обрабатывать эту ситуацию?
1. Вставлять
2. Ничего не делать
3. Сгенерить исключение

Смотрел две реализации. В одной вставляют, в другой ничего не делают. Какое поведение правильное?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вставка в красно-чёрное дерево
« Ответ #1 : Ноябрь 11, 2013, 01:25:24 pm »
Возможно глупый вопрос. При вставке, если данный ключ уже имеется в дереве, то как правильно обрабатывать эту ситуацию?
1. Вставлять
2. Ничего не делать
3. Сгенерить исключение

Смотрел две реализации. В одной вставляют, в другой ничего не делают. Какое поведение правильное?
Заменить значение для этого ключа.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Вставка в красно-чёрное дерево
« Ответ #2 : Ноябрь 11, 2013, 01:33:35 pm »
Да, вроде логично.
А тут косяк получается?:
if (compEQ(data, current->data)) return (current);http://algolist.manual.ru/ds/rbtree.php

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Вставка в красно-чёрное дерево
« Ответ #3 : Ноябрь 11, 2013, 01:40:53 pm »
Вообще, я правильно понимаю, что поведение должно быть 1:1 как у map?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вставка в красно-чёрное дерево
« Ответ #4 : Ноябрь 11, 2013, 01:53:30 pm »
Вообще, я правильно понимаю, что поведение должно быть 1:1 как у map?
Как у плюсатого std::map, да. Ибо это и есть то самое дерево скорее всего.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Вставка в красно-чёрное дерево
« Ответ #5 : Ноябрь 11, 2013, 02:02:07 pm »
Возможно глупый вопрос. При вставке, если данный ключ уже имеется в дереве, то как правильно обрабатывать эту ситуацию?
1. Вставлять
2. Ничего не делать
3. Сгенерить исключение

Смотрел две реализации. В одной вставляют, в другой ничего не делают. Какое поведение правильное?

Заменить значение для этого ключа.

Не совсем понял. Получится два разных значения для одного ключа или второе значение перезапишет первоначальное?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Вставка в красно-чёрное дерево
« Ответ #6 : Ноябрь 11, 2013, 02:04:06 pm »
Возможно глупый вопрос. При вставке, если данный ключ уже имеется в дереве, то как правильно обрабатывать эту ситуацию?
1. Вставлять
2. Ничего не делать
3. Сгенерить исключение

Смотрел две реализации. В одной вставляют, в другой ничего не делают. Какое поведение правильное?

Заменить значение для этого ключа.

Не совсем понял. Получится два разных значения для одного ключа или второе значение перезапишет первоначальное?
Перезапишет. Иначе это уже не map, a multimap.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Вставка в красно-чёрное дерево
« Ответ #7 : Ноябрь 11, 2013, 02:36:52 pm »
Кажись понял. В этой сишной реализации ключ выступает и в качестве значения. А в этом случае действительно ничего не надо делать.