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

start [/forum/topic.php?fid=57&msg=32952075&tid=2033640]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 332ms |

| 0 / 0 |
