2009-06-29 4 views
0

В настоящее время я реализую очень сложную древовидную структуру, позволяющую получить доступ к почти мгновенным данным вместо повторной обработки по каждому запросу.Разумный размер дерева и словаря

Мне просто интересно, существует ли теоретический или практический предел, при котором размер дерева становится слишком большим или точка, в которой словарь становится слишком заполненным столкновением, чтобы функционировать правильно/быстро?

Общий ответ будет оценен, но C# -специфическая информация будет намного лучше!

ответ

2

В .NET максимальный либо в Дереве, либо в Словаре составляет 2^31 - 1 (и, вероятно, несколько меньше с накладными расходами).

В практическом плане у вас, вероятно, раньше не хватило памяти!

Если дерево остается сбалансированным, поиск будет оставаться ок. O (log N).

Словари более чувствительны к используемому алгоритму, например, существует множество схем хэширования с различными характеристиками.

+0

В словаре нет никакого поиска как такового, поскольку он имеет форму перевернутого клина, причем каждый новый предмет добавляется как ребенок любого другого предмета (это имеет больше смысла, если у вас есть хорошее знание невероятно случайные требования сайта! = D) –

1

Зависит от того, что вы считаете большим количеством. Сотни или тысячи должны быть в порядке, но миллионы могут стоить поискать что-то специализированное.

Дерево будет замедляться по мере роста, в зависимости от вашей техники хранения и перебалансировки.

Словарь должен быть достаточно последовательным, но обязательно создайте его с размером, соответствующим количеству данных, которое вы, вероятно, будете хранить (может быть, x2 будет безопасным).

1

См this question - это один из первых я ответил на так :)

Проблема была низкая производительность построения словаря с приблизительно 900 000 пунктов. Я получил время от 10 + до 0,34 секунды.

Урок заключается в том, что словарь хорош только как хэш-функция, если вы можете быстро создать уникальный хеш, он будет работать как свет.

Надеется, что это помогает,

EDIT:

класс Сравнения не важен, .net строки имеют очень сильную хэш-функцию и - следовательно - имеют отличную производительность в словарях. Эта проблема парней просто «ушла», если бы он использовал одиночные строки вместо пар строк.

+0

Да, я понимаю, что словари хороши только тогда, когда они используют сильную функцию хеширования, однако я старался не реализовывать свои собственные! Поскольку я использую словарь для строк, ваш класс сравнения не так полезен, что является позором! –

 Смежные вопросы

  • Нет связанных вопросов^_^