Исследуя Reflector'ом внутренности классов .NET фреймворка, нередко можно узнать много любопытных вещей. Например, однажды (довольно давно) я узнал, что для дотнетовского QuickSort можно очень просто придумать такой класс входных данных, на которых сортировка будет осуществляться за квадратичное время. Так, на массивах-«пирамидках» (то есть на таких, в которых максимальный элемент находится посередине, второй и третий по величине — слева и справа от него, и так далее) быстрая сортировка была сравнима по времени с пузырьковой. Причина очевидна — в качестве медианы выбирался средний элемент массива. Как с этой проблемой дело обстоит сейчас, не знаю, но если она всё ещё имеет место — это заслуживает отдельного поста.
Речь сейчас пойдёт о другом. Всем, кто знаком с дотнетом, полагаю, известен класс System.Collections.Generic.HashSet<T>. Как гласит MSDN, класс HashSet предоставляет высокопроизводительные операции над множествами. Как вы думаете, за какое время ваш компьютер, скажем, двести раз пробежит по хэшсету из одного элемента? Сотая доля секунды? Меньше? Вовсе не факт!
Речь сейчас пойдёт о другом. Всем, кто знаком с дотнетом, полагаю, известен класс System.Collections.Generic.HashSet<T>. Как гласит MSDN, класс HashSet предоставляет высокопроизводительные операции над множествами. Как вы думаете, за какое время ваш компьютер, скажем, двести раз пробежит по хэшсету из одного элемента? Сотая доля секунды? Меньше? Вовсе не факт!