
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
09.03.2005, 12:31
|
|||
|---|---|---|---|
Организация множеств std::map |
|||
|
#18+
Вопрос такой: имеется некоторое множество (map) в котороя я добавляю элементы <ключ,значение>. Так вот если добавляемые ключи заведомо упорядочены (например, <1,"sss">,<2,"fff">,<4,"sdfs">,...), то не превратится ли множество в список (т.е. добавление элементов будет идти по одной ветке): <1,"sss"> \ <2,"fff"> \ <4,"sdfs"> И поиск в данном множестве из логарифмической сложности превратится в линейную ? Или все-таки множества устроены по-другому (в виде, например, сбалансированного бинарного дерева). Но тогда получается при каждом добавлении элемента необходимо перестраивать дерево? Спасибо за внимание... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 12:49
|
|||
|---|---|---|---|
|
|||
Организация множеств std::map |
|||
|
#18+
Alex_VCВопрос такой: имеется некоторое множество (map) в котороя я добавляю элементы <ключ,значение>. Так вот если добавляемые ключи заведомо упорядочены (например, <1,"sss">,<2,"fff">,<4,"sdfs">,...), то не превратится ли множество в список (т.е. добавление элементов будет идти по одной ветке): <1,"sss"> \ <2,"fff"> \ <4,"sdfs"> И поиск в данном множестве из логарифмической сложности превратится в линейную ? Или все-таки множества устроены по-другому (в виде, например, сбалансированного бинарного дерева). Но тогда получается при каждом добавлении элемента необходимо перестраивать дерево? Спасибо за внимание... Да, добавление данных по порядке возрастание ключей будет приводить к баллансировке дерева после каждого добавления. С поиском будет сооотвественно всё нормально, а вот добавление элементов будет долгим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 13:02
|
|||
|---|---|---|---|
Организация множеств std::map |
|||
|
#18+
Пардон, речь идет об отображениях (день тяжелый, после праздника...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 13:23
|
|||
|---|---|---|---|
|
|||
Организация множеств std::map |
|||
|
#18+
Alex_VCПардон, речь идет об отображениях (день тяжелый, после праздника...) Я тебя понял :) На самом деле для множеств тоже самое - это ведь считай просто набор ключей ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 14:28
|
|||
|---|---|---|---|
Организация множеств std::map |
|||
|
#18+
Т.е., получается, быстрее будут вставляться неупорядоченные значения ключей, т.к. при упорядоченной вставке (когда вставляемый эл-т всегда больше имеющихся) дерево каждый раз будет перестраиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 14:57
|
|||
|---|---|---|---|
|
|||
Организация множеств std::map |
|||
|
#18+
Alex_VCТ.е., получается, быстрее будут вставляться неупорядоченные значения ключей, т.к. при упорядоченной вставке (когда вставляемый эл-т всегда больше имеющихся) дерево каждый раз будет перестраиваться? В принципе да, хотя это не совсем полная перестройка дерева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.03.2005, 18:07
|
|||
|---|---|---|---|
Организация множеств std::map |
|||
|
#18+
В СУБД Oracle есть оригинальный способ решения проблемы. Там есть понятие "инверсного индекса". То есть при добавлении ключа в индекс, ключ переворачивается (пример "12345" => "54321" ). Это обеспечивает более равномерное разбрасывание ключей в дереве и как следствие - быстрая вставка. Этот индекс используется для точечной выборки одиночных значений ключа. Поиск в диапазоне и сортировка по такому индексу - лишены смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2033640]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 415ms |

| 0 / 0 |
